找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1136|回复: 0
打印 上一主题 下一主题
收起左侧

通过51单片机控制lcd1602的时钟显示程序

[复制链接]
跳转到指定楼层
楼主
先写好年份和日期,然后通过定时中断来控制时间的增加
按按键控制更改校准时间



单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar  miao =13, fen =12, shi = 11 ;
  5. uchar code Time_Table[] ="2023-4-17 1";
  6. uchar num,t,KEY1_num=0;
  7. sbit lcdrs=P1^0;
  8. sbit lcden=P1^1;
  9. sbit wela=P1^6;         
  10. sbit KEY1=P2^4;
  11. sbit KEY2=P2^5;
  12. sbit KEY3=P2^6;
  13. sbit KEY4=P2^7;
  14. sbit beep=P3^5;
  15. void KEY_scan();
  16. void delay(uint z)
  17. {
  18.           uint x,y;
  19.         for(x=z;x>0;x--)
  20.         for(y=110;y>0;y--);
  21. }
  22. void di()            
  23. {
  24.         beep = 0;
  25.         delay(100);
  26.         beep = 1;
  27. }
  28. void write_com(uchar com)
  29. {
  30.         lcden=0;
  31.         lcdrs=0;
  32.         P0=com;
  33.         delay(5);
  34.         lcden=1;
  35.         delay(5);
  36.         lcden=0;
  37. }
  38. void write_date(uchar date)
  39. {
  40.         lcden=0;
  41.         lcdrs=1;
  42.         P0=date;
  43.         delay(5);
  44.         lcden=1;
  45.         delay(5);
  46.         lcden=0;
  47. }
  48. void Display(uchar add,uchar date)
  49. {
  50.         uchar shi,ge;
  51.         shi=date/10;
  52.         ge=date%10;
  53.         write_com(0x80+0x40+add);
  54.         write_date(0x30+shi);
  55.         write_date(0x30+ge);
  56. }
  57. void lcdinit()
  58. {
  59.         wela=0;
  60.         write_com(0x38);
  61.         write_com(0x0c);
  62.         write_com(0x06);
  63.         write_com(0x01);
  64.         write_com(0x80+3);
  65.         for(num = 0;Time_Table[num]!='\0'; num++)
  66.         {
  67.                 write_date(Time_Table[num]);
  68.                 delay(5);
  69.         }
  70.         write_com(0x80+0x40+6);
  71.         write_date(':');
  72.         delay(5);
  73.         write_com(0x80+0x40+9);
  74.         write_date(':');
  75.         delay(5);
  76.         Display(4,shi);
  77.         Display(7,fen);
  78.         Display(10,miao);
  79. }
  80. void Time0_Init()
  81. {
  82.         TMOD=0x01;         
  83.         TH0=(65536-45872)/256;
  84.         TL0=(65536-45872)%256;
  85.         EA=1;              
  86.         ET0=1;            
  87.         TR0=1;            
  88. }
  89. void main()
  90. {
  91.         lcdinit();
  92.         Time0_Init();
  93.         while(1)
  94.         {
  95.            KEY_scan();
  96.         }               
  97. }
  98. void timer0() interrupt 1
  99. {
  100.         TH0=(65536-50000)/256;
  101.         TL0=(65536-50000)%256;
  102.         t++;
  103.         if(t==20)
  104.         {
  105.                 t=0;
  106.                 miao++;
  107.                 if(miao==60)
  108.                 {
  109.                         miao=0;
  110.                         fen++;
  111.                         if(fen==60)
  112.                         {
  113.                                 fen=0;
  114.                                 shi++;
  115.                                 if(shi==24)
  116.                                 {
  117.                                         shi=0;
  118.                                 }
  119.                                 Display(4,shi);
  120.                         }
  121.                         Display(7,fen);
  122.                 }
  123.                 Display(10,miao);
  124.         }      
  125. }
  126. void KEY_scan()
  127. {
  128.         if(KEY1==0)
  129.         {
  130.                 delay(5);                                                               
  131.                 if(KEY1==0)
  132.                 {
  133.                         KEY1_num++;
  134.                         while(!KEY1);
  135.                         di();
  136.                         if(KEY1_num==1)
  137.                         {
  138.                                 TR0=0;
  139.                                 write_com(0x80+0x40+11);
  140.                                 write_com(0x0f);      
  141.                         }
  142.                         if(KEY1_num==2)
  143.                         {
  144.                                  write_com(0x80+0x40+8);
  145.                         }
  146.                         if(KEY1_num==3)
  147.                         {
  148.                                  write_com(0x80+0x40+5);
  149.                         }
  150.                         if(KEY1_num==4)
  151.                         {
  152.                                  KEY1_num=0;
  153.                                  write_com(0x0c);
  154.                                  TR0=1;
  155.                   }      
  156.                 }
  157.         }                                                                  
  158.         if(KEY1_num!=0)
  159.         {
  160.                 if(KEY2==0)
  161.                 {
  162.                         delay(5);
  163.                         if(KEY2==0)
  164.                         {
  165.                                 while(!KEY2);
  166.                                 di();
  167.                                 if(KEY1_num==1)
  168.                                 {
  169.                                         miao++;
  170.                                         if(miao==60)
  171.                                         miao=0;
  172.                                         Display(10,miao);
  173.                                         write_com(0x80+0x40+10);
  174.                                 }
  175.                                 if(KEY1_num==2)
  176.                                 {
  177.                                         fen++;
  178.                                         if(fen==60)                                                                       
  179.                                         fen=0;
  180.                                         Display(7,fen);
  181.                                         write_com(0x80+0x40+7);                                                                       
  182.                                 }
  183.                                 if(KEY1_num==3)
  184.                                 {
  185.                                         shi++;
  186.                                         if(shi==24)                                                                       
  187.                                         shi=0;
  188.                                         Display(4,shi);
  189.                                         write_com(0x80+0x40+4);                                                                       
  190.                                 }                                       
  191.                         }                                                                                                                                                                                                                                                                       
  192.                 }
  193.         }
  194.         if(KEY3==0)
  195.         {
  196.                 delay(5);
  197.                 if(KEY3==0)
  198.                 {
  199.                         while(!KEY3);
  200.                         di();
  201.                         if(KEY1_num==1)
  202.                         {
  203.                                 miao--;
  204.                                 if(miao==-1)
  205.                                 miao=59;
  206.                                 Display(10,miao);
  207.                                 write_com(0x80+0x40+10);
  208.                         }
  209.                         if(KEY1_num==2)
  210.                         {
  211.                                 fen--;
  212.                                 if(fen==-1)                                                                       
  213.                                 fen=59;
  214.                                 Display(7,fen);
  215.                                 write_com(0x80+0x40+7);                                                                       
  216.                         }
  217.                         if(KEY1_num==3)
  218.                         {
  219.                                 shi--;
  220.                                 if(shi==-1)                                                                       
  221.                                 shi=23;
  222.                                 Display(4,shi);
  223.                                 write_com(0x80+0x40+4);                                                                       
  224.                         }                                                                                                                                               
  225.                 }               
  226.         }                                                                              
  227. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表