久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5232|回復: 1
打印 上一主題 下一主題
收起左側

基于單片機的電子時鐘proteus仿真設計

[復制鏈接]
跳轉到指定樓層
樓主
有proteus的仿真,還有源程序。
有興趣的朋友可以一起學習!!


單片機源程序如下:
  1. #include <reg52.h>
  2. #include "ds1302.h"
  3. #include "key.h"

  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. bit WATCH_TIME=1;        //數碼管顯示時間標志位,默認情況下顯示時間
  7. bit WATCH_DATE=0;        //數碼管顯示日期標志位
  8. bit SET_TIME=0;            //數碼管顯示調時時的在調時間
  9. bit SET_DATE=0;                //數碼管顯示在調日期
  10. bit SET_CLOK=0;                //數碼管顯示在調鬧鐘的數值
  11. bit CLK;                        //開鬧鐘標志位

  12. sbit led=P2^1;
  13. sbit wela=P2^2;
  14. sbit dula=P2^3;
  15. sbit beef=P2^4;
  16. sbit tom=P2^0;

  17. //uchar tab_date[14]="2012-11-06 TUE";//表示年月日星期
  18. //uchar tab_time[8]="00:00:00";//表示時分秒
  19. uchar tab_t[6],tab_c[6],tab_d[6],date[6],time[6];         //用來顯示調節時間、鬧鐘、日期時顯示相應數據
  20. uchar tiao,second;//調時或設置鬧鐘時,相應的時分秒跳動
  21. uchar code tabdu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/*共陰極數*/
  22. uchar code tabwe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  23. uchar keyval,tiao=2;
  24. uchar hour,min,sec;
  25. uchar year,month,day;
  26. uchar clkh,clkm,clks;

  27. void delay(uint t)
  28. {
  29.         uint x,y;
  30.         for(x=0;x<t;x++)
  31.                 for(y=0;y<40;y++);
  32. }
  33. //------------------------------------------
  34. //              數據轉換
  35. //------------------------------------------
  36. void trans()
  37. {
  38.          date[0]=tab_1302[6]/10;     //年十位
  39.          date[1]=tab_1302[6]%10;     //年個位
  40.          date[2]=tab_1302[4]/10;     //月十位
  41.          date[3]=tab_1302[4]%10;     //月個位
  42.          date[4]=tab_1302[3]/10;     //日十位
  43.          date[5]=tab_1302[3]%10;     //日個位
  44.        
  45.          time[0]=tab_1302[2]/10;     //小時十位
  46.          time[1]=tab_1302[2]%10;     //小時個位
  47.          time[2]=tab_1302[1]/10;     //分十位
  48.          time[3]=tab_1302[1]%10;     //分個位
  49.          time[4]=tab_1302[0]/10;     //秒十位
  50.          time[5]=tab_1302[0]%10;     //秒個位
  51. }
  52. void Getval(uchar hour1,uchar min1,uchar sec1)
  53. {
  54.         tab_t[0]=hour1/10;
  55.         tab_t[1]=hour1%10;
  56.         tab_t[2]=min1/10;
  57.         tab_t[3]=min1%10;
  58.         tab_t[4]=sec1/10;
  59.         tab_t[5]=sec1%10;
  60. }
  61. void Getdate(uchar year1,uchar month1,uchar day1)
  62. {
  63.         tab_d[0]=year1/10;
  64.         tab_d[1]=year1%10;
  65.         tab_d[2]=month1/10;
  66.         tab_d[3]=month1%10;
  67.         tab_d[4]=day1/10;
  68.         tab_d[5]=day1%10;
  69. }
  70. void clkinit()
  71. {
  72.         tab_c[0]=2;
  73.         tab_c[1]=4;
  74.         tab_c[2]=0;
  75.         tab_c[3]=0;
  76.         tab_c[4]=0;
  77.         tab_c[5]=0;
  78. }
  79. void Getclok()
  80. {
  81.         tab_c[0]=clkh/10;
  82.         tab_c[1]=clkh%10;
  83.         tab_c[2]=clkm/10;
  84.         tab_c[3]=clkm%10;
  85.         tab_c[4]=clks/10;
  86.         tab_c[5]=clks%10;
  87. }
  88. void dsptime()          //顯示實時時間
  89. {
  90.         uchar i;
  91.         led=0;
  92.         for(i=0;i<6;i++)
  93.         {
  94.                 P3=tabwe[i];
  95.                 P0=tabdu[time[i]];               
  96.                 delay(5);
  97.         }
  98. }

  99. void dspdate()        //顯示日期
  100. {       
  101.         uchar i;
  102.         led=1;
  103.         for(i=0;i<6;i++)       
  104.         {       
  105.                 P3=tabwe[i];
  106.                 P0=tabdu[date[i]];               
  107.                 delay(5);
  108.         }       
  109. }
  110. void setdisp(uchar tab_set[])  //數碼管顯示當前設置相應的數值并跳動
  111. {
  112.         uchar i;
  113.         for(i=0;i<6;i++)
  114.         {       
  115.                 switch(tiao)
  116.                 {
  117.                         case 0:if(i==0||i==1)
  118.                                         {
  119.                                                 if(second<8)
  120.                                                 {       
  121.                                                         P3=tabwe[i];
  122.                                                         P0=tabdu[tab_set[i]];
  123.                                                                        
  124.                                                 }
  125.                                         }
  126.                                         else
  127.                                         {
  128.                                                 P3=tabwe[i];
  129.                                                 P0=tabdu[tab_set[i]];
  130.                                                
  131.                                         }break;
  132.                         case 1:if(i==2||i==3)
  133.                                         {
  134.                                                 if(second<8)
  135.                                                 {
  136.                                                          P3=tabwe[i];
  137.                                                         P0=tabdu[tab_set[i]];                                       
  138.                                                 }
  139.                                         }
  140.                                         else
  141.                                         {       
  142.                                                 P3=tabwe[i];
  143.                                                 P0=tabdu[tab_set[i]];                                               
  144.                                         }break;
  145.                         case 2:if(i==4||i==5)
  146.                                         {
  147.                                                 if(second<8)
  148.                                                 {       
  149.                                                         P3=tabwe[i];
  150.                                                         P0=tabdu[tab_set[i]];
  151.                                                                        
  152.                                                 }
  153.                                         }
  154.                                         else
  155.                                         {       
  156.                                                 P3=tabwe[i];
  157.                                                 P0=tabdu[tab_set[i]];
  158.                                                
  159.                                         }break;
  160.                 }
  161.                 delay(5);
  162.         }
  163. }
  164. void settime()         //設置時間
  165. {
  166.         SET_TIME=1;
  167.         SET_DATE=0;
  168.         WATCH_TIME=0;
  169.         hour=time[0]*10+time[1];
  170.         min=time[2]*10+time[3];
  171.         sec=time[4]*10+time[5];
  172.         while(1)
  173.         {
  174.                 keyval=Getkey();
  175.                 switch(keyval)
  176.                 {
  177.                         case KEY_MU:tiao++;tiao=tiao%3;break;        //調時
  178.                         case KEY_UP:if(tiao==0){hour++;if(hour==24) hour=0;}
  179.                                                 if(tiao==1){min++;if(min==60) min=0;}
  180.                                                 if(tiao==2){sec++;if(sec==60) sec=0;};
  181.                                                 break;
  182.                         case KEY_DN:if(tiao==0){hour--;if(hour==255) hour=23;}
  183.                                                 if(tiao==1){min--;if(min==255) min=59;}
  184.                                                 if(tiao==2){sec--;if(sec==255) sec=59;};
  185.                                                 break;
  186.                         case KEY_OK:tab1_1302[2]=hour;tab1_1302[1]=min;tab1_1302[0]=sec;ds1302_init();SET_TIME=0;WATCH_TIME=1;tiao=1;return;break;
  187.                         case KEY_BK:SET_TIME=0;WATCH_TIME=1;tiao=1;return;
  188.                        
  189.                 }       
  190.         }
  191. }
  192. void setdate()         //設置日期
  193. {
  194.         uchar keyval;
  195.         SET_TIME=0;
  196.         SET_DATE=1;
  197.         WATCH_DATE=0;
  198.         year=date[0]*10+date[1];
  199.         month=date[2]*10+date[3];
  200.         day=date[4]*10+date[5];
  201.         while(1)
  202.         {
  203.                 keyval=Getkey();
  204.                 switch(keyval)
  205.                 {
  206.                         case KEY_MU:tiao++;tiao=tiao%3;break;
  207.                         case KEY_UP:if(tiao==0){year++;if(year==100) year=0;}
  208.                                                 if(tiao==1){month++;if(month==13) month=0;}
  209.                                                 if(tiao==2){day++;if(day==32) day=0;};
  210.                                                 break;
  211.                         case KEY_DN:if(tiao==0){year--;if(year==255) year=99;}
  212.                                                 if(tiao==1){month--;if(month==0) month=12;}
  213.                                                 if(tiao==2){day--;if(day==0) day=31;};
  214.                                                 break;
  215.                         case KEY_OK:tab1_1302[6]=year;tab1_1302[4]=month;tab1_1302[3]=day;
  216.                                                 ds1302_init();SET_DATE=0;WATCH_TIME=1;tiao=2;led=0;return;
  217.                                                 break;
  218.                         case KEY_BK:SET_DATE=0;WATCH_TIME=1;tiao=2;led=0;return;
  219.                        
  220.                 }       
  221.         }       
  222. }
  223. void setclok()        //設置鬧鐘
  224. {       
  225.         clkh=tab_c[0]*10+tab_c[1];
  226.         clkm=tab_c[2]*10+tab_c[3];
  227.         clks=tab_c[4]*10+tab_c[5];
  228.         SET_CLOK=1;
  229.         tiao=0;
  230.         while(1)
  231.         {
  232.                 keyval=Getkey();
  233.                 switch(keyval)
  234.                 {
  235.                         case KEY_MU:tiao++;tiao=tiao%2;break;
  236.                         case KEY_UP:if(tiao==0){clkh++;if(clkh>=24) clkh=0;}
  237.                                                 if(tiao==1){clkm++;if(clkm==60) clkm=0;};
  238.                                                 break;
  239.                         case KEY_DN:if(tiao==0){clkh--;if(clkh==255) clkh=23;}
  240.                                                 if(tiao==1){clkm--;if(clkm==255) clkm=59;};
  241.                                                 break;
  242.                         case KEY_OK:SET_CLOK=0;WATCH_TIME=1;CLK=1;tiao=1;return;break;
  243.                         case KEY_BK:clkh=24;clkm=0;clks=0;SET_CLOK=0;CLK=0;WATCH_TIME=1;tiao=1;return;
  244.                        
  245.                 }
  246.         }
  247. }
  248. void smg()       
  249. {
  250.         if(WATCH_TIME)
  251.                 dsptime();         //顯示時間
  252.         else if(WATCH_DATE)       
  253.                 dspdate();        //顯示日期
  254.         else if(SET_TIME)       
  255.         {       
  256.                 Getval(hour,min,sec);
  257.                 setdisp(tab_t);        //顯示在調時間
  258.         }
  259.         else if(SET_DATE)
  260.         {
  261.                 Getdate(year,month,day);
  262.                 setdisp(tab_d);        //顯示在調日期
  263.         }
  264.         else if(SET_CLOK)
  265.         {
  266.                 Getclok();
  267.                 setdisp(tab_c);        //顯示在調鬧鐘
  268.         }  
  269. }
  270. void dealkey(uchar key)
  271. {
  272.         switch(key)
  273.         {
  274.                 case KEY_MU:if(WATCH_DATE)
  275.                                         {
  276.                                                 led=1;
  277.                                                 setdate();
  278.                                         }
  279.                                         else
  280.                                                 settime();
  281.                                         break;
  282.                 case KEY_CK:WATCH_TIME=0;WATCH_DATE=0;setclok();break;
  283.                 case KEY_TD:WATCH_TIME=~WATCH_TIME;WATCH_DATE=~WATCH_DATE;break;//時間與日期的切換
  284.         }
  285. }
  286. void feng()//鬧鐘
  287. {

  288.         if(clkh==tab_1302[2]&&clkm==tab_1302[1])
  289.                 tom=0;
  290.         if(KEY_CK==Getkey())
  291.         {
  292.                 tom=1;
  293.                 CLK=0;
  294.         }
  295. }
  296. void main()
  297. {
  298.         uchar num;
  299.         TMOD=0X01; //T0工作方式1
  300.         TH0=(65536-10000)/256;
  301.         TL0=(65536-10000)%256;         //10毫秒中斷一次
  302.         EA=1;
  303. ……………………

  304. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
基于單片機的電子時鐘仿真.7z (43.07 KB, 下載次數: 71)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:228634 發表于 2017-8-21 16:01 | 只看該作者
小白來學習一下,謝謝分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲444eee在线观看 | 精品国产一区二区三区成人影院 | www.亚洲一区二区 | 日韩一区二区在线免费观看 | 蜜臀网| 国产永久免费 | 一区福利视频 | 国产精品国产精品国产专区不蜜 | 91传媒在线观看 | 亚洲欧美日韩在线 | 国产免费拔擦拔擦8x高清 | 国外成人在线视频网站 | 中文字幕久久精品 | 三级黄色片在线观看 | 精品国产欧美一区二区三区成人 | 久久久久久91 | 91亚洲国产精品 | 国产日韩欧美 | 偷牌自拍| 日韩激情在线 | wwwxxx日本在线观看 | 久久精品国产一区二区电影 | 久久久久av | 免费在线观看h片 | 国产一区二区三区精品久久久 | 成人免费毛片片v | 九九久久精品视频 | 久久精品中文 | 成人黄色电影在线观看 | 日韩中文在线视频 | 亚洲视频网 | 91成人精品 | 国产一级视频在线 | 精品一级 | 韩国久久精品 | 国产精品美女久久久久 | 91精品麻豆日日躁夜夜躁 | 情侣黄网站免费看 | 91视视频在线观看入口直接观看 | 中文字幕av亚洲精品一部二部 | 日韩精品一区二区三区视频播放 |