找回密码
 立即注册

QQ登录

只需一步,快速开始

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

AT89C51单片机为核心的可调电子时钟时钟仿真+代码

[复制链接]
跳转到指定楼层
楼主
AT89C51单片机为核心的可调电子时钟时钟,有原程序(附上注解)

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code table[]="   HH:MM:ss!  ";
  5. uchar code table1[]="WWW.BAIDU.COM";
  6. sbit E=P3^4;        //液晶使能端
  7. sbit RS=P3^5;        //液晶数据命令选择端
  8. sbit dula=P2^6;                //申明U1锁存器的锁存端
  9. sbit wela=P2^7;                //申明U2锁存器的锁存端
  10. sbit s_add=P2^0;
  11. sbit s_dec=P2^1;
  12. sbit m_add=P2^2;
  13. sbit m_dec=P2^3;
  14. sbit h_add=P2^4;
  15. sbit h_dec=P2^5;

  16. sbit fun=P3^0;
  17. sbit add=P3^1;
  18. sbit dec=P3^2;
  19. uchar num ,ssf;
  20.         int time=0;
  21.          char hh=12;
  22.          char mm=22;
  23.          char ss=33;
  24.          char funnum=0;
  25. void delay(uint z)
  26. {
  27. while(z--);
  28. }
  29. void write_com(uchar com)
  30. {
  31.         RS=0;
  32.         P0=com;
  33.         delay(5);
  34.         E=1;
  35.         delay(5);
  36.         E=0;
  37. }
  38. void write_data(uchar date)
  39. {
  40.         RS=1;
  41.         P0=date;
  42.         delay(5);
  43.         E=1;
  44.         delay(5);
  45.         E=0;
  46. }
  47. void init()
  48. {
  49.         dula=0;
  50.         wela=0;
  51.         E=0;
  52.         write_com(0x38);//设置16X2显示,5X7点阵,8位数据接口
  53.         write_com(0x0c);//设置开显示,不显示光标
  54.         write_com(0x06);//写一个字符后地址指针加1
  55.         write_com(0x01);//显示清零,数据指针清零



  56. }
  57. void Timer0Init(void)                //1毫秒@12.000MHz
  58. {
  59.   
  60.         TMOD &= 0xF0;                //设置定时器模式
  61.         TMOD |= 0x01;                //设置定时器模式
  62.         TL0 = 0x18;                //设置定时初值
  63.         TH0 = 0xFC;                //设置定时初值
  64.         TF0 = 0;                //清除TF0标志
  65.         TR0 = 1;                //定时器0开始计时
  66.         EA=1;
  67.         ET0=1;
  68. }

  69. void main()
  70. {

  71.         init();
  72.         Timer0Init();
  73.         write_com(0x80);
  74.         for(num=0;num<11;num++)
  75.         {
  76.                 write_data(table[num]);
  77.                 delay(5);
  78.         }

  79.          write_com(0x80);
  80.         while(1)
  81.         {

  82. if(ssf==1)
  83. { ssf=0;
  84. write_com(0x80+3);
  85. write_data((hh/10)+'0');
  86. write_data((hh%10)+'0');
  87. write_com(0x80+6);
  88. write_data((mm/10)+'0');
  89. write_data((mm%10)+'0');
  90. write_com(0x80+9);
  91. write_data((ss/10)+'0');
  92. write_data((ss%10)+'0');

  93. }
  94.                 if (h_add==0)
  95.                 {
  96.                 ssf=1;
  97.                 while(!h_add);
  98.                 hh++;
  99.                 if(hh==24) hh=0;
  100.                 }
  101.                 if (h_dec==0)
  102.                 { ssf=1;
  103.                 while(!h_dec);
  104.                 hh--;
  105.                 if(hh==-1) hh=23;
  106.                 }
  107.                 if (m_add==0)
  108.                 {
  109.                 ssf=1;
  110.                 while(!m_add);
  111.                 mm++;
  112.                 if(mm==60) mm=0;
  113.                 }
  114.                 if (m_dec==0)
  115.                 { ssf=1;
  116.                 while(!m_dec);
  117.                 mm--;
  118.                 if(mm==-1) mm=59;
  119.                 }
  120.         if (s_add==0)
  121.                 {
  122.                 ssf=1;
  123.                 while(!s_add);
  124.                 ss++;
  125.                 if(ss==60) ss=0;
  126.                 }
  127.                 if (s_dec==0)
  128.                 { ssf=1;
  129.                 while(!s_dec);
  130.                 ss--;
  131.                 if(ss==-1) ss=59;
  132.                 }
  133. if(fun==0)
  134. { while(!fun) ;
  135.   funnum++;         EA=0;
  136.   if(funnum==4)        {EA=1; funnum=0;}

  137. }
  138.                 if(funnum==1)
  139.                 {if(add==0)
  140.                 { while(!add); hh++;if(hh==24)hh=0; ssf=1;}                  
  141.                 if(dec==0)
  142.                 { while(!dec);
  143.                    hh--;
  144.                    if(hh==-1)hh=23;
  145.                    ssf=1;  
  146.                 }
  147.                   
  148.                 }
  149. if(funnum==2)
  150. {if(add==0)
  151. { while(!add);        mm++;if(mm==60)mm=0; ssf=1; }
  152. if(dec==0)
  153. { while(!dec);  mm--;if(mm==-1)mm=59; ssf=1; }  
  154. }
  155. if(funnum==3)
  156. {if(add==0)
  157. { while(!add);        ss++;if(ss==60)ss=0; ssf=1; }
  158. if(dec==0)
  159. { while(!dec);  ss--;if(ss==-1)ss=59; ssf=1; }  
  160. }


  161.         }
  162. }

  163. time0()        interrupt  1
  164. {
  165.         TL0 = 0x18;                //设置定时初值
  166.         TH0 = 0xFC;                //设置定时初值
  167. time++;
  168. if(time==1000)
  169. { time=0; ssf=1;
  170.    ss++;
  171.    if(ss==60)
  172.    {  ss=0;
  173.       mm++;
  174.           if(mm==60)
  175.           {         mm=0;
  176.             hh++;
  177.                 if(hh==24)
  178.                 { hh=0;
  179.                 }
  180.           
  181.           }
  182.    
  183.    
  184.    }



  185. }


  186. }
复制代码

所有资料51hei提供下载:
可调时钟.rar (14.12 KB, 下载次数: 57)


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

使用道具 举报

沙发
ID:484023 发表于 2019-3-4 09:11 | 只看该作者
你好  这个功能能介绍下吗
回复

使用道具 举报

板凳
ID:490020 发表于 2019-3-14 13:58 | 只看该作者
很好,收藏了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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