找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2603|回复: 2
收起左侧

单片机多功能闹钟包含仿真原理图及设计报告

[复制链接]
ID:414426 发表于 2018-11-23 12:29 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png 0.png

单片机源程序如下:
  1. #include<reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. uint   miao,fen,fen1,shi,shi1,flag1,flag2,flag3,aa,K1num,K2num,K3num,K4num,N;      
  5. uchar code table[]="  TIMING CLOCK";      
  6.       
  7. sbit K1=P1^0;      
  8. sbit K2=P1^1;
  9. sbit K3=P1^2;
  10. sbit K4=P1^3;
  11. sbit rs=P2^0;
  12. sbit lcden=P2^2;
  13. sbit led=P2^3;      
  14. sbit beep=P2^4;   
  15. sbit relay=P2^5;      

  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 write_date(uchar date)      
  23. {
  24.         rs=1;
  25.         lcden=0;
  26.         P0=date;
  27.         delay(5);
  28.         lcden=1;
  29.         delay(5);
  30.         lcden=0;      
  31. }
  32. void write_com(uchar com)
  33. {
  34.         rs=0;
  35.         lcden=0;
  36.         P0=com;
  37.         delay(5);
  38.         lcden=1;
  39.         delay(5);
  40.         lcden=0;      
  41. }
  42. void write_sfm(uchar add,uchar date)      
  43. {
  44.         uchar shi,ge;
  45.         shi=date/10;
  46.         ge=date%10;
  47.         write_com(0x80+0x40+add);
  48.         write_date(0x30+shi);               
  49.         write_date(0x30+ge);
  50. }

  51. void init()               
  52. {      
  53.         uint num;      
  54.         aa=0;               
  55.         K1num=0;      
  56.         K2num=0;      
  57.         K3num=0;      
  58.         K4num=0;
  59.         flag1=1;      
  60.         flag2=1;      
  61.         flag3=1;      
  62.         led=1;         
  63.         relay=0;
  64.         N=100;               
  65.         miao=0;      
  66.         fen=10;
  67.         shi=5;
  68.         fen1=12;      
  69.         shi1=5;
  70.         beep=0;               
  71.         lcden=0;
  72.         write_com(0x38);
  73.         write_com(0x0c);      
  74.         write_com(0x06);
  75.         write_com(0x01);      
  76.         write_com(0x80);
  77.         for(num=0;num<15;num++)      
  78.         {
  79.                         write_date(table[num]);
  80.                         delay(10);
  81.         }
  82.         write_com(0x80+0x40+7);
  83.         write_date(':');

  84.         write_sfm(8,fen);      
  85.         write_sfm(5,shi);
  86.         TMOD=0x01;      
  87.         TH0=(65536-50000)/256;      
  88.         TL0=(65536-50000)%256;
  89.         EA=1;      
  90.         ET0=1;
  91.         TR0=1;

  92. }


  93. void keyscan()               
  94. {      
  95.         if(K1==0&&K3num==0)      
  96.         {
  97.                 delay(5);
  98.                 if(K1==0&&K1num==0)
  99.                 {      
  100.                        
  101.                         K1num=1;      
  102.                         while(!K1)      
  103.                         if(K1num==1)
  104.                         {
  105.                                 TR0=0;      
  106.                                 write_com(0x80+0x40+9);               
  107.                                 write_com(0x0f);
  108.                         }
  109.                 }
  110.         }


  111.         if(K3==0&&K3num==0&&K1num==0)      
  112.         {
  113.                 delay(5);
  114.                 if(K3==0)
  115.                 {      
  116.                         flag1=0;
  117.                         write_com(0x80+0x40+9);      
  118.                         while(!K3);
  119.                         K3num=1;
  120.                         write_sfm(8,fen1);
  121.                         write_sfm(5,shi1);
  122.                         write_com(0x0f);
  123.                         write_com(0x80+0x40+9);
  124.                 }
  125.         }

  126.         if(K1==0&&K1num==1)               
  127.         {
  128.                 delay(5);
  129.                 if(K1==0)
  130.                 {      
  131.                         write_com(0x80+0x40+6);      
  132.                         K1num=1;
  133.                         while(!K1);
  134.                         shi++;        
  135.                         if(shi==24) shi=0;
  136.                         write_sfm(5,shi);
  137.                         write_com(0x80+0x40+6);
  138.                 }
  139.                
  140.         }               
  141.       
  142.       
  143.         if(K2==0&&K1num==1)               
  144.         {
  145.                 delay(5);
  146.                 if(K2==0)
  147.                 {      
  148.                         write_com(0x80+0x40+9);      
  149.                         K1num=1;
  150.                         while(!K2);
  151.                         fen++;
  152.                         if(fen==60)        fen=0;
  153.                         write_sfm(8,fen);
  154.                         write_com(0x80+0x40+9);      
  155.                 }
  156.         }

  157.         if(K1num==1||K3num==1)
  158.         {
  159.                 if(K3==0)      
  160.                 {
  161.                         delay(5);
  162.                         if(K3==0)
  163.                         {
  164.                                 K1num=0;
  165.                                 K3num=0;
  166.                                 while(!K3);
  167.                                 write_com(0x0c);      
  168.                                 TR0=1;
  169.                                 flag1=1;
  170.                                 write_sfm(8,fen);
  171.                                 write_sfm(5,shi);
  172.                         }
  173.                 }
  174.         }
  175.         if(K2==0&&K1num==0&&K3num==0)
  176.         {
  177.                 delay(5);
  178.                 if(K2==0)
  179.                 {      
  180.                         write_sfm(8,fen1);      
  181.                         write_sfm(5,shi1);
  182.                         while(!K2);      
  183.                         write_sfm(8,fen);      
  184.                         write_sfm(5,shi);

  185.                 }
  186.         }


  187.         if(K1==0&&K3num==1)      
  188.         {      
  189.                 delay(5);
  190.                 if(K1==0)
  191.                 {      
  192.                         write_com(0x80+0x40+6);
  193.                         K3num=1;
  194.                         while(!K1);
  195.                         shi1++;
  196.                         if(shi1==24)
  197.                         shi1=0;
  198.                         write_sfm(5,shi1);      
  199.                         write_com(0x80+0x40+6);
  200.                 }
  201.         }
  202.       
  203.         if(K2==0&&K3num==1)      
  204.         {
  205.                 delay(5);
  206.                 if(K2==0)
  207.                 {      
  208.                         write_com(0x80+0x40+9);      
  209.                         K3num=1;
  210.                         while(!K2);
  211.                         fen1++;
  212.                         if(fen1==60)      
  213.                         fen1=0;
  214.                         write_sfm(8,fen1);      
  215.                         write_com(0x80+0x40+9);      
  216.                 }
  217.         }
  218.       

  219.         if(K4==0&&flag3==0)      
  220.         {
  221.                 delay(5);
  222.                 if(K4==0)
  223.                 {      
  224.                         flag2=0;
  225.                         flag3=1;      
  226.                 }
  227.         }
  228.         if(K4==0&&flag3==1&&K4num==0)
  229.         {
  230.                 delay(5);
  231.                 {
  232.                         K4num=1;      
  233.                 }
  234.         }
  235.         if(K4==0&&flag3==1&&K4num==1)
  236.         {
  237.                 delay(5);
  238.                 {
  239.                         K4num=0;      
  240.                 }
  241.         }      
  242. }

  243. void clock()
  244. {
  245.         if((fen==fen1)&&(shi==shi1)&&(flag2==1)&&(K4num==0))                              
  246.         {
  247.                 beep=1;      
  248.                 relay=1;
  249.                 flag3=0;      
  250.                 delay(100);
  251.                 beep=0;
  252.                 delay(100);
  253.                 beep=1;
  254.                 delay(100);
  255.                 beep=0;
  256.                 delay(100);
  257.                 beep=1;
  258.                 delay(100);
  259.                 beep=0;
  260.                 delay(300);
  261.         }
  262.         else if((fen==fen1)&&(shi==shi1)&&(flag2==1)&&(K4num==1))                              
  263.         {
  264.                 beep=1;      
  265.                 relay=1;      
  266.                 flag3=0;      
  267.         }
  268.         else
  269.         {
  270.                 beep=0;
  271.                 relay=0;
  272.         }
  273. }
  274. void main()               
  275. {      
  276.       
  277.         init();
  278.         while(1)
  279.         {      
  280.                 keyscan();
  281.                 clock();
  282.         }
  283. }
  284. void time0() interrupt 1
  285. {
  286.         TH0=(65536-50000)/256;      
  287.         TL0=(65536-50000)%256;
  288.         aa++;                              

  289.         if(aa==20)      
  290.         {               
  291.                 aa=0;
  292.                 miao++;
  293.                 led=~led;
  294.                 if(miao==60)
  295.                         {
  296.                                 miao=0;
  297.                                 fen++;
  298.                                 flag2=1;
  299.                                 if(fen==60)
  300.                                 {
  301.                                         fen=0;
  302.                                         shi++;
  303.                                         if(shi==24)
  304.                                         {
  305.                                                 shi=0;
  306.                                         }
  307.                                         if(flag1==1)
  308.                                         {write_sfm(5,shi);}      
  309.                                 }
  310.                                 if(flag1==1)
  311.                                 {write_sfm(8,fen);}      
  312.                         }      
  313.                 }      
  314. }


复制代码

所有资料51hei提供下载:
单片机多功能闹钟.zip (341.91 KB, 下载次数: 76)
回复

使用道具 举报

ID:434173 发表于 2018-11-30 10:29 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:269312 发表于 2018-12-1 20:38 | 显示全部楼层
感谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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