📄 bo hao.lst
字号:
209 2 }
210 1 }
211
212 /************************************************************
213 * *
214 * 蜂鸣器响一声 *
215 * *
216 ************************************************************/
217 void beep()
218 {
219 1 unsigned char i;
220 1 for (i=0;i<180;i++)
221 1 {
222 2 delay0(6);
223 2 BEEP=!BEEP; //BEEP取反
224 2 }
225 1 BEEP=1; //关闭蜂鸣器
226 1 delay(250); //延时
227 1 }
228
229 /************************************************************
230 * *
231 * 键入电话号码函数 *
232 * *
233 ************************************************************/
234 void key_input ()
235 {
236 1 P1=0xF0;
237 1 if(P1!=0xF0) //判是否有健按下
238 1 {
239 2 keyscan();
240 2 beep();
241 2
C51 COMPILER V8.02 BO_HAO 12/11/2006 11:06:57 PAGE 5
242 2 if(key==0x0f) //是否为发送键
243 2 return;
244 2
245 2 if(key==0) //0转换为电话码"a"
246 2 key=0x0a;
247 2
248 2 dis_buf1[keynum]=key; //健值送存储单元
249 2
250 2 dis_buf =dis_buf1[keynum]; //健值送显示单元
251 2
252 2 if(dis_buf==0x0a) //数据转换
253 2 dis_buf=0x00;
254 2
255 2 dis_buf = dis_buf & 0x0f;
256 2
257 2 if(dis_buf>9) //转换为ASCII码
258 2 dis_buf = dis_buf+0x37;
259 2 else
260 2 dis_buf = dis_buf+0x30;
261 2
262 2 lcd_pos(0x44+keynum);
263 2 lcd_wdat(dis_buf); //显示健值
264 2
265 2 keynum++; //按键次数计数
266 2 }
267 1 }
268
269 /*************************************************************
270 * *
271 * MT8880 写状态函数 *
272 * RS=1,RW=0,写状态寄存器 *
273 * *
274 *************************************************************/
275 void write_status(uchar value)
276 {
277 1 MT_RS=1;
278 1 MT_RW =0;
279 1 MT_CK =0;
280 1
281 1 P1 = value; //写 8880CRA和CRB.
282 1 MT_CK =1;
283 1 delayNOP();
284 1 MT_CK =0;
285 1 }
286
287 /*************************************************************
288 * *
289 * MT8880 初始化函数 *
290 * *
291 *************************************************************/
292 void MT_INIT()
293 {
294 1 MT_CS=0; //MT8880使能
295 1 delayNOP();
296 1 write_status(0x10); //写 8880CRA,CRA=0000.
297 1 write_status(0x10); //写 8880CRA,CRA=0000.
298 1 write_status(0x18); //写 8880CRA,CRA=1000,允许选择CRB.
299 1 write_status(0x10); //写 8880CRB,CRB=0000
300 1 MT_CS=1; //禁止MT8880工作
301 1 }
302
303 /*************************************************************
C51 COMPILER V8.02 BO_HAO 12/11/2006 11:06:57 PAGE 6
304 * *
305 * MT8880 发码程序 *
306 * *
307 * RS=1,RW=0,写状态寄存器 *
308 * RS=1,RW=1,读状态寄存器 *
309 * RS=0,RW=0,写发送寄存器 *
310 * *
311 *************************************************************/
312 void MT_TRAN()
313 {
314 1 uchar i;
315 1
316 1 lcd_pos(0x40); //设置显示位置为第二行
317 1 for(m=0;m<16;m++)
318 1 lcd_wdat(cdis2[m]);
319 1
320 1 MT_CS=0;
321 1 delayNOP();
322 1
323 1 write_status(0x1d); //写 8880CRA,CRA=1101.
324 1 write_status(0x10); //写 8880CRB,CRB=0000.
325 1 //8880模式2为TONE,DTMF,IRQ,BURST
326 1
327 1 MT_RS=0; //写发送寄存器
328 1 MT_RW =0;
329 1 MT_CK =0;
330 1
331 1 for(i=0;i<keynum;i++)
332 1 {
333 2 dis_buf1[i]=dis_buf1[i]&0x0f; //取数据低4位
334 2 P1 = dis_buf1[i];
335 2 MT_CK =1; //发送号码
336 2 delayNOP();
337 2 MT_CK =0;
338 2
339 2 if(dis_buf1[i]==0x0a)
340 2 dis_buf1[i]=0x00;
341 2
342 2 dis_buf1[i]=dis_buf1[i]+0x30; //转换为ASCII码
343 2 lcd_pos(0x44+i);
344 2 lcd_wdat(dis_buf1[i]); //显示拨号码
345 2
346 2 delay(300); //调整拨号速率
347 2 }
348 1 MT_CS=1;
349 1 }
350
351 /************************************************************
352 * *
353 * 主程序 *
354 * *
355 ************************************************************/
356 void main()
357 {
358 1 P0=0xFF; //置P0口
359 1 P2=0xFF; //置P2口
360 1 delay(10); //延时
361 1 MT_CS=1; //禁止MT8880工作
362 1 lcd_init(); //初始化LCD
363 1
364 1 lcd_pos(0); //设置显示位置为第一行
365 1 for(m=0;m<16;m++)
C51 COMPILER V8.02 BO_HAO 12/11/2006 11:06:57 PAGE 7
366 1 lcd_wdat(cdis1[m]);
367 1
368 1 lcd_pos(0x40); //设置显示位置为第二行
369 1 for(m=0;m<16;m++)
370 1 lcd_wdat(cdis2[m]);
371 1
372 1 while(1)
373 1 {
374 2 key_input(); //输入拨号号码
375 2
376 2 if(key==0x0f) //拨号
377 2 {
378 3 TEL = 0; //摘机
379 3 delay(2000); //延时等待拨号音出现
380 3 MT_INIT(); //MT8880初始化
381 3 MT_TRAN(); //MT8880拨号
382 3
383 3 delay(5000); //调整在线时间
384 3 delay(5000);
385 3 delay(5000);
386 3
387 3 TEL = 1; //挂机
388 3
389 3 MT_CS=1; //禁止MT8880工作
390 3 key=0x00;
391 3 keynum=0x00;
392 3
393 3 lcd_pos(0x40); //设置显示位置为第二行
394 3 for(m=0;m<16;m++)
395 3 lcd_wdat(cdis2[m]);
396 3
397 3 delay(1000);
398 3 }
399 2 }
400 1 }
401
402 /************************************************************
403
404 使用说明:
405 先使用矩阵键盘输入你要拨的电话号码,LCD显示你输入的电话
406 号码,可以输入12位。检查号码输入无误后,按"F"健即可进行拨号。
407
408 ************************************************************/
409
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 726 ----
CONSTANT SIZE = 34 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 17 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -