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

標題: C51單片機的可調電子時鐘Proteus仿真代碼設計 [打印本頁]

作者: yfnd    時間: 2019-6-16 20:41
標題: C51單片機的可調電子時鐘Proteus仿真代碼設計
要求:



仿真電路圖:


單片機KEIL程序及仿真圖:
  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit set=P1^0;
  5. sbit save=P1^5;
  6. sbit rselect=P1^1;
  7. sbit lselect=P1^2;
  8. sbit add=P1^3;
  9. sbit reduce=P1^4;

  10. uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  11. uchar disp_buf[6];
  12. uchar disp_bit=0;
  13. uint hour,min,sec;
  14. uint select_num=0;
  15. uint hour_adj,min_adj,sec_adj;
  16. uchar count;
  17. uchar key_num=0;       
  18. void key_scan()
  19. {                                                  
  20.         if(!set)
  21.         {
  22.                 hour_adj=hour;
  23.                 min_adj=min;
  24.                 sec_adj=sec;
  25.                 key_num++;
  26.         }
  27.         while(!set);
  28.         if(key_num%2==1)               
  29.         {
  30.                 if(rselect==0)
  31.                 {
  32.                         select_num++;
  33.                         if(select_num==4)
  34.                         select_num=1;
  35.                 }
  36.                 while(!rselect);
  37.                 if(lselect==0)
  38.                 {
  39.                         select_num--;
  40.                         if(select_num<=0)
  41.                         select_num=3;
  42.                 }
  43.                 while(!lselect);
  44.         }
  45.         if(!add&&(key_num%2))
  46.         {
  47.                 switch(select_num)
  48.                 {
  49.                         case 1 :
  50.                         {
  51.                                 hour_adj++;
  52.                                 if(hour_adj==24)
  53.                                 hour_adj=0;
  54.                                 break;
  55.                         }
  56.                         case 2 :
  57.                         {
  58.                                 min_adj++;
  59.                                 if(min_adj==60)
  60.                                 min_adj=0;
  61.                                 break;
  62.                         }
  63.                         case 3 :
  64.                         {
  65.                                 sec_adj++;
  66.                                 if(sec_adj==60)
  67.                                 sec_adj=0;
  68.                                 break;
  69.                         }
  70.                         default:break;
  71.                 }
  72.                 while(!add);
  73.         }
  74.         if(!reduce&&(key_num%2))
  75.         {
  76.                 switch(select_num)
  77.                 {
  78.                         case 1 :
  79.                         {
  80.                                 hour_adj--;
  81.                                 if(hour_adj<=0)
  82.                                 hour_adj=23;
  83.                                 break;
  84.                         }
  85.                         case 2 :
  86.                         {
  87.                                 min_adj--;
  88.                                 if(min_adj<=0)
  89.                                 min_adj=59;
  90.                                 break;
  91.                         }
  92.                         case 3 :
  93.                         {
  94.                                 sec_adj--;
  95.                                 if(sec_adj<=0)
  96.                                 sec_adj=59;
  97.                                 break;
  98.                         }
  99.                         default:break;
  100.                 }
  101.                 while(!reduce);
  102.         }
  103.         if(!save&&(key_num%2))
  104.         {
  105.                 select_num=0;
  106.                 hour=hour_adj;
  107.                 min=min_adj;
  108.                 sec=sec_adj;
  109.                 while(!save);
  110.         }          
  111. }               
  112.        
  113. /*主函數*/
  114. void main()
  115. {
  116.         TMOD=0x11;
  117.         TH0=0xf7;
  118.         TL0=0x00;
  119.         TH1=0x4c;
  120.         TH0=0x00;
  121.         ET0=1;
  122.         ET1=1;
  123.         EA=1;
  124.         TR0=1;
  125.         TR1=1;
  126.         PT1=1;
  127.         hour=23;
  128.         min=58;
  129.         sec=49;
  130.         count=0;
  131.         while(1)
  132.         {
  133.                 key_scan();
  134.                 if(key_num%2)
  135.                 {
  136.                 switch(select_num)
  137.                 {
  138.                         case 1 :
  139.                         {
  140.                                  if(count<=10)
  141.                                 {
  142.                                         disp_buf[0]=hour_adj/10;
  143.                                         disp_buf[1]=hour_adj%10;
  144.                                 }
  145.                                 else
  146.                                 {
  147.                                         disp_buf[0]=0x40;
  148.                                         disp_buf[1]=0x40;
  149.                                 }
  150.                                 disp_buf[2]=min_adj/10;
  151.                                 disp_buf[3]=min_adj%10;
  152.                                 disp_buf[4]=sec_adj/10;
  153.                                 disp_buf[5]=sec_adj%10;
  154.                                 break;
  155.                         }
  156.                         case 2 :
  157.                         {
  158.                                  if(count<=10)
  159.                                 {
  160.                                         disp_buf[2]=min_adj/10;
  161.                                         disp_buf[3]=min_adj%10;
  162.                                 }
  163.                                 else
  164.                                 {
  165.                                         disp_buf[2]=0x40;
  166.                                         disp_buf[3]=0x40;
  167.                                 }
  168.                                 disp_buf[0]=hour_adj/10;
  169.                                 disp_buf[1]=hour_adj%10;
  170.                                 disp_buf[4]=sec_adj/10;
  171.                                 disp_buf[5]=sec_adj%10;
  172.                                 break;
  173.                         }
  174.                         case 3 :
  175.                         {
  176.                                  if(count<=10)
  177.                                 {
  178.                                         disp_buf[4]=sec_adj/10;
  179.                                         disp_buf[5]=sec_adj%10;
  180.                                 }
  181.                                 else
  182.                                 {
  183.                                         disp_buf[4]=0x40;
  184.                                         disp_buf[5]=0x40;
  185.                                 }
  186.                                 disp_buf[0]=hour_adj/10;
  187.                                 disp_buf[1]=hour_adj%10;
  188.                                 disp_buf[2]=min_adj/10;
  189.                                 disp_buf[3]=min_adj%10;
  190.                                 break;
  191.                         }
  192.                         default :         break;
  193.                 }
  194.                 }
  195.                 if(key_num%2==0)
  196.                 {
  197.                         disp_buf[0]=hour/10;
  198.                         disp_buf[1]=hour%10;
  199.                         disp_buf[2]=min/10;
  200.                         disp_buf[3]=min%10;
  201.                         disp_buf[4]=sec/10;
  202.                         disp_buf[5]=sec%10;       
  203.                                
  204.                 }
  205.         }
  206. }

  207. void timer0() interrupt 1
  208. {
  209.         TH0=0xf7;
  210.         TL0=0x00;
  211.         P2=~(0x01<<disp_bit);
  212.         P0=tab[disp_buf[disp_bit]];
  213.         disp_bit++;
  214.         if(disp_bit==6) disp_bit=0;       
  215. }

  216. void timer1() interrupt 3
  217. {
  218.         TH1=0x4c;
  219.         TL1=0x00;
  220.         if(++count==20)
  221.         {
  222.                 count=0;
  223.                 if(++sec==60)
  224.                 {
  225.                         sec=0;
  226.                         if(++min==60)
  227.                         {
  228.                                 min=0;
  229.                                 if(++hour==24)
  230.                                 {
  231.                                         hour=0;
  232.                                 }
  233.                         }

  234.                 }
  235.         }
  236. }
復制代碼


全部資料51hei下載地址:
keshe2.7z (31.66 KB, 下載次數: 93)


作者: 778!    時間: 2020-6-7 21:58
想問下怎么在整點的時候蜂鳴器或者揚聲器報時?
作者: iamxsy    時間: 2020-6-8 19:25
謝謝樓主的分析!超贊的!
作者: jsxb123    時間: 2020-6-17 09:06
支持樓主的分析!支持支持




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲国产欧美91 | 在线观看成人小视频 | 国产成人一区在线 | 久久久久久成人 | 国产在线精品一区二区三区 | 成人18亚洲xxoo | av一区二区三区在线观看 | 免费观看成人性生生活片 | 91视视频在线观看入口直接观看 | 高清欧美性猛交xxxx黑人猛交 | 久久999| 青娱乐av | 久久综合99 | 鸳鸯谱在线观看高清 | 亚洲精品日韩一区二区电影 | 日本欧美黄色片 | 四虎影院在线播放 | 久久综合一区二区 | 伊人导航| 欧美高清视频在线观看 | 精品久久av| 亚洲国产精品区 | 一区二区三区四区免费在线观看 | 成人av免费播放 | 亚洲成av人影片在线观看 | 国产精品久久久久9999鸭 | 欧美久久一级 | 99久久久久久 | 一级在线免费观看 | 在线观看视频91 | a级大片免费观看 | 国产精品看片 | 日本电影一区二区 | 国产精品一区二区不卡 | 亚洲午夜精品视频 | 国产日韩欧美精品一区二区 | 国产在线观看一区二区 | 久久香蕉精品视频 | 欧美综合久久 | 国产精品污www一区二区三区 | 亚洲综合在线播放 |