📄 ds12cr887mnl.lst
字号:
382 1 lcm_w_test(1,min%10+0x30);
383 1 lcm_w_test(1,0x3a); //分钟与小时之间显示":"
384 1 }
385
386 //往液晶屏填写 秒 数据
387 void lcm_w_sec(void)
388 {
389 1 uint i=0;
390 1 uchar a=0,b=0,c=0;
391 1 sec=ds_read(0);//读取DS12CR887的秒
392 1 lcm_w_test(0,0x8b); //秒钟在液晶屏上显示的位置
393 1 lcm_w_test(1,(sec/10)+0x30); //写十位//对10求余分解出十位
394 1 lcm_w_test(1,sec%10+0x30); //写个位
395 1
396 1 lcm_w_test(0,0x8d); //温度在液晶屏上显示的位置
397 1 i=ReadTemperature();//读温度并送显
398 1 a=i/100;
399 1 lcm_w_test(1,a+0x30); //显示温度十位
400 1 b=i/10-a*10;
401 1 lcm_w_test(1,b+0x30); //个位
402 1 lcm_w_test(1,0x2e); //"."
403 1 c=i-a*100-b*10;
404 1 lcm_w_test(1,c+0x30); //小数点位1位
405 1 lcm_w_word("℃"); //度C
406 1
407 1 }
408
409 /*调整时间、日期程序---------------------------------------------------------*/
410 void Set_time(uchar sel)
411 {
412 1 signed char address,item;
413 1 signed char max,mini;
414 1 lcm_w_test(0,0x9a);
415 1 lcm_w_word("调整");
416 1 if(sel==5) {lcm_w_word("分钟");address=2; max=59;mini=0;} //分钟2
417 1 if(sel==4) {lcm_w_word("小时");address=4; max=23;mini=0;} //小时4
418 1 if(sel==3) {lcm_w_word("星期");address=6; max=7; mini=1;} //星期6
419 1 if(sel==2) {lcm_w_word("日期");address=7; max=31;mini=1;} //日期7
420 1 if(sel==1) {lcm_w_word("月份");address=8; max=12;mini=1;} //月份8
421 1 if(sel==0) {lcm_w_word("年份");address=9; max=99; mini=0;} //年份9
422 1
423 1 //读取DS12CR887某地址上的数值赋给item
424 1 item=ds_read(address);
425 1 if(K3 == 0)//K3-加
426 1 {
427 2 item++;//数加 1
C51 COMPILER V8.05a DS12CR887MNL 04/15/2009 21:34:52 PAGE 8
428 2 }
429 1 if(K4 == 0)//K4-减
430 1 {
431 2 item--;//数减 1
432 2 }
433 1 if(item>max)
434 1 item=mini;//查看数值有效范围
435 1 if(item<mini)
436 1 item=max;
437 1
438 1 //将调整好的item值写入DS12CR887
439 1 ds_write(address,item);//+
440 1 lcm_w_year(); //年
441 1 lcm_w_month(); //月
442 1 lcm_w_date(); //日
443 1 lcm_w_day(); //星期
444 1 lcm_w_hour(); //时
445 1 lcm_w_min(); //分
446 1 }
447
448 /*显示欢迎信息---------------------------------------------------------------*/
449
450 void welcome(void)
451 {
452 1 write_com(0x81);//第一行(如果是地址是:80H,即LCD的第一行的第一个位置显示)
453 1 lcm_w_word("电子智能时钟");
454 1
455 1 write_com(0x90);//第二行(如果是地址是:90H,即LCD的第二行的第一个位置显示)
456 1 lcm_w_word("DS12887+LCM12864");
457 1
458 1 write_com(0x88);//第三行(如果是地址是:88H,即LCD的第二行的第一个位置显示)
459 1 lcm_w_word("※程序设计: 七品");
460 1
461 1 write_com(0x98);//第四行(如果是地址是:98H,即LCD的第二行的第一个位置显示)
462 1 lcm_w_word("☆2009年02月11日");
463 1 }
464
465 /*主程序---------------------------------------------------------------------*/
466
467 main()
468 {
469 1 uchar e=0;
470 1 K1=1;K2=1;K3=1;K4=1;
471 1 ds_int(); //初始化DS12CR887
472 1 lcm_init(); //初始化液晶显示器
473 1 lcm_clr(); //清屏
474 1 welcome(); //显示欢迎信息
475 1 DelayM(3000); //显示停留3秒
476 1 lcm_clr(); //清屏
477 1 while(1)
478 1 {
479 2 if (w == 0) //正常走时
480 2 {
481 3 lcm_w_year(); //显示年
482 3 lcm_w_month(); //显示月
483 3 lcm_w_date(); //显示日
484 3 lcm_w_day(); //显示星期
485 3 lcm_w_hour(); //显示时
486 3 lcm_w_min(); //显示分
487 3 lcm_w_sec(); //显示秒
488 3 days(); //显示节日提示
489 3 }
C51 COMPILER V8.05a DS12CR887MNL 04/15/2009 21:34:52 PAGE 9
490 2 else {}//否则启动调时
491 2
492 2 if (K1 == 0) // 设置时间
493 2 {
494 3 DelayM(20); //按键消抖
495 3 if(K1 == 0 && w == 1) //当是调时状态 本键用于调整下一项
496 3 {
497 4 e++;
498 4 if (e >= 6 )
499 4 {
500 5 e = 0;
501 5 }
502 4 Set_time(e);//调整
503 4 }
504 3 if(K1 == 0 && w == 0) //当是正常状态时就进入调时状态
505 3 {
506 4 lcm_clr();//清屏
507 4 w=1; //进入调时
508 4 Set_time(e);//调整
509 4 }
510 3 while(K1 == 0);//等待键松开
511 3 }
512 2
513 2 if (K2 == 0) // 当在调时状态时就退出调时
514 2 {
515 3 DelayM(20);//按键消抖
516 3 if(K2 == 0 && w == 1)
517 3 {
518 4 w = 0; //退出调时
519 4 e = 0; //"下一项"计数器清0
520 4 }
521 3 if(K2 == 0 && w == 0)
522 3 {
523 4 lcm_clr();//清屏
524 4 welcome();//显示欢迎字
525 4 while(K2 == 0);//等待键松开
526 4 }
527 3 lcm_clr();//清屏
528 3 lcm_w_year(); //年
529 3 lcm_w_month(); //月
530 3 lcm_w_date(); //日
531 3 lcm_w_day(); //星期
532 3 lcm_w_hour(); //时
533 3 lcm_w_min(); //分
534 3 lcm_w_sec(); //秒
535 3 days(); //显示节日提示
536 3 while(K2 == 0);//等待键松开
537 3 }
538 2
539 2 if (K3 == 0 && w == 1)//加调整
540 2 {
541 3 DelayM(20);//按键消抖
542 3 if(K3 == 0 && w == 1)
543 3 {
544 4 Set_time(e);//调整
545 4 }
546 3 while(K3 == 0);//等待键松开
547 3 }
548 2
549 2 if (K4 == 0 && w == 1) //减调整
550 2 {
551 3 DelayM(20);//按键消抖
C51 COMPILER V8.05a DS12CR887MNL 04/15/2009 21:34:52 PAGE 10
552 3 if(K4 == 0 && w == 1)
553 3 {
554 4 Set_time(e);//调整
555 4 }
556 3 while(K4 == 0);//等待键松开
557 3 }
558 2 }
559 1 }
560
561 /*----------------------------文件结束-------------------------*/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2650 ----
CONSTANT SIZE = 1195 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 10
IDATA SIZE = ---- ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -