找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3920|回复: 4
收起左侧

单片机可调智能定时闹钟proteus仿真与源码

[复制链接]
ID:405992 发表于 2018-10-7 00:27 | 显示全部楼层 |阅读模式
这是一个可调电子时钟的代码和仿真图!
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png 0.png

单片机源程序如下:
  1. #include<reg52.h>
  2. typedef unsigned char uint8;
  3. typedef unsigned int uint16;
  4. sbit rs=P2^6;         // 数据命令选择
  5. sbit rw=P2^5;         //读写选择
  6. sbit e=P2^7;          //使能
  7. sbit k1=P3^3;        //设置
  8. sbit k2=P3^0;        //分加
  9. sbit k3=P3^1;  //时加
  10. sbit k4=P3^2;  //闹钟分加
  11. sbit k5=P3^4;  //闹钟时加
  12. sbit SPK = P1^0;
  13. void baojing();
  14. void alarm();
  15. uint8 a[]="time:  ";  //要显示的字符
  16. uint8 num[]="0123456789";
  17. uint8 b[8],shi,fen,miao;
  18. uint8 c[]="alarm: ";
  19. uint8 d[8],nshi,nfen= 1,nmiao;
  20. uint8 num1[]="0123456789";
  21. uint8 timeset;
  22. uint8 sum;

  23. void delay(uint16 i)
  24. {
  25.         while(i--);
  26. }


  27. void wrc(uint8 c)         //写命令
  28. {
  29.         delay(1000);
  30.         rs=0;
  31.         rw=0;
  32.         e=0;
  33.         P0=c;
  34.         e=1;
  35.         delay(10);
  36.         e=0;
  37.         /*
  38.         P0=c<<4;
  39.         e=1;
  40.         e=0;*/       //四位的LCD要加上
  41. }
  42. void wrd(uint8 dat)          //写数据
  43. {
  44.         delay(1000);
  45.         rs=1;
  46.         rw=0;
  47.         e=0;
  48.         P0=dat;
  49.         e=1;
  50.         delay(10);
  51.         e=0;
  52.         /*
  53.         P0=dat<<4;
  54.         e=1;
  55.         e=0;*/           //四位的LCD要加上
  56.         rs=0;
  57. }
  58. void lcdinit()
  59. {
  60.         delay(1000);
  61. /*        wrc(0x32);         
  62.         wrc(0x28);
  63.         wrc(0x28);        */        //四位的LCD要加上
  64.         wrc(0x38);
  65.         wrc(0x38);
  66.         wrc(0x38);
  67.         wrc(0x06);
  68.         wrc(0x0c);
  69.         wrc(0x01);
  70. }
  71. void time0init()
  72. {
  73.         TMOD=0X01;
  74.         TH0=0XFC;
  75.         TL0=0X18; //1ms
  76.         TR0=1;
  77.         ET0=1;
  78.         EA=1;
  79. }
  80. void int0init()
  81. {
  82.         EA=1;
  83.         EX0=1;
  84.         IT0=1;       
  85. }
  86. void int1init()
  87. {
  88.         EA=1;
  89.         EX1=1;
  90.         IT1=1;       
  91. }
  92. void timepros()
  93. {
  94.      
  95.         b[0]=num[shi/10];
  96.         b[1]=num[shi%10];
  97.         b[2]=0x3a;
  98.         b[3]=num[fen/10];
  99.         b[4]=num[fen%10];
  100.         b[5]=0x3a;
  101.         b[6]=num[miao/10];
  102.         b[7]=num[miao%10];

  103.         d[0]=num[nshi/10];
  104.         d[1]=num[nshi%10];
  105.         d[2]=0x3a;
  106.         d[3]=num[nfen/10];
  107.         d[4]=num[nfen%10];
  108.         d[5]=0x3a;
  109.         d[6]=num[nmiao/10];
  110.         d[7]=num[nmiao%10];
  111.          
  112. }
  113. void display()
  114. {
  115.         uint8 i;
  116.         timepros();
  117.         wrc(0x00+0x80);
  118.         for(i=0;i<16;i++)
  119.         {
  120.                 wrd(a[i]);
  121.         }
  122. //        wrc(0x00+0x86);
  123.         wrd(b[0]);
  124.         wrd(b[1]);
  125.         wrd(b[2]);
  126.         wrd(b[3]);
  127.         wrd(b[4]);
  128.         wrd(b[5]);
  129.         wrd(b[6]);
  130.         wrd(b[7]);

  131.            wrc(0x40+0x80);
  132.         for(i=0;i<16;i++)
  133.         {
  134.                 wrd(c[i]);
  135.         }
  136.         wrd(d[0]);
  137.         wrd(d[1]);
  138.         wrd(d[2]);
  139.         wrd(d[3]);
  140.         wrd(d[4]);
  141.         wrd(d[5]);
  142.         wrd(d[6]);
  143.         wrd(d[7]);

  144. }
  145. void main()
  146. {
  147.         lcdinit();
  148.         time0init();
  149.         int1init();
  150.         while(1)
  151.         {
  152.                 if(timeset==1)                //可以调整时间
  153.                 {
  154.                         if(k2==0)                //分设置
  155.                         {
  156.                                 delay(5);
  157.                                 if(k2==0)
  158.                                 {
  159.                                         fen++;
  160.                                         if(fen==60)fen=0;
  161.                                 }
  162.                                 while(!k2);       
  163.                         }
  164.                         if(k3==0)                //时设置
  165.                         {
  166.                                 delay(5);
  167.                                 if(k3==0)
  168.                                 {
  169.                                         shi++;
  170.                                         if(shi==12)shi=0;
  171.                                 }
  172.                                 while(!k3);       
  173.                         }
  174.                 }

  175.                         if(timeset==2)                //可以调整闹钟
  176.                 {
  177.                  
  178.                         if(k4==0)                //分设置
  179.                         {
  180.                                 delay(5);
  181.                                 if(k4==0)
  182.                                 {
  183.                                         nfen++;
  184.                                         if(nfen==60)nfen=0;
  185.                                 }
  186.                                 while(!k4);       
  187.                         }
  188.                         if(k5==0)                //时设置
  189.                         {
  190.                                 delay(5);
  191.                                 if(k5==0)
  192.                                 {
  193.                                         nshi++;
  194.                                         if(nshi==12)nshi=0;
  195.                                 }
  196.                                 while(!k3);       
  197.                         }
  198.                 }
  199.                 display();
  200.                 alarm();
  201.         }       
  202. }

  203. void alarm()
  204. {
  205.   SPK=1;
  206. if(fen==nfen && shi == nshi)
  207.   {
  208.           SPK=~SPK;
  209.         delay(50);
  210.         SPK=~SPK;
  211.         }
  212.         else
  213.       ;
  214. }
  215. void tim0() interrupt 1
  216. {
  217.         static uint16 n;
  218.         TH0=0XFC;
  219.         TL0=0X18;//1ms
  220.         n++;
  221.         if(n==1000)
  222.         {
  223.                 n=0;
  224.                 miao++;
  225.                 if(miao==60)
  226.                 {
  227.                         miao=0;
  228.                         fen++;
  229.                         if(fen==60)
  230.                         {
  231.                                 fen=0;
  232.                                 shi++;
  233.                                 if(shi==60)
  234.                                 {
  235.                                         shi=0;
  236.                                         miao=0;
  237.                                         fen=0;
  238.                                 }
  239.                         }
  240.                 }
  241.         }
  242. }


  243. void int1() interrupt 2
  244. {
  245.         delay(1000);
  246.         if(k1==0)
  247.         {
  248.                 sum++;
  249.                 if(sum==1)
  250.                 {
  251.                     TR0=0;
  252.                         timeset=1;       
  253.                 }
  254.                         if(sum==2)
  255.                 {
  256.                          TR0=0;
  257.                         timeset=2;       
  258.                 }
  259.                 if(sum==3)
  260.                 {
  261.                          TR0=1;
  262.                         timeset=0;
  263.                         sum=0;
  264.                 }
  265.         }
  266. }
复制代码

所有资料51hei提供下载:
2362486-1FS1105153.zip (92.84 KB, 下载次数: 137)
回复

使用道具 举报

ID:404878 发表于 2018-10-8 15:17 | 显示全部楼层
看上去不错的样子
回复

使用道具 举报

ID:668832 发表于 2019-12-19 23:39 | 显示全部楼层
请问C语言如何转为汇编语言
回复

使用道具 举报

ID:668832 发表于 2019-12-19 23:42 | 显示全部楼层
lzDestiny 发表于 2018-10-8 15:17
看上去不错的样子

C语言怎么转为汇编语言
回复

使用道具 举报

ID:668557 发表于 2019-12-24 18:06 | 显示全部楼层
我试着自己写了个差不多的,我的问题很大难受
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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