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

標(biāo)題: 單片機(jī)倒計(jì)時(shí)牌Proteus仿真圖+代碼 可倒計(jì)時(shí)24小時(shí) [打印本頁]

作者: danpianji?    時(shí)間: 2019-3-10 15:42
標(biāo)題: 單片機(jī)倒計(jì)時(shí)牌Proteus仿真圖+代碼 可倒計(jì)時(shí)24小時(shí)
“彼岸之光”倒計(jì)時(shí)牌設(shè)計(jì)書

一.設(shè)計(jì)構(gòu)想
⒈設(shè)計(jì)一個(gè)倒計(jì)時(shí)牌。
⒉倒計(jì)時(shí)牌由九個(gè)數(shù)碼管分別顯示“天”、“時(shí)”、“分”、“秒”,其中“天”為三位,“時(shí)”、“分”、“秒”各兩位。
⒊倒計(jì)時(shí)牌設(shè)置兩個(gè)按鍵:select/start鍵和set鍵,用來設(shè)置計(jì)時(shí)時(shí)間(只能設(shè)置整天)。當(dāng)按select/start鍵時(shí),“天”的百位、十位、個(gè)位依次閃爍,閃爍位表明當(dāng)前位被選中,此時(shí)按set鍵進(jìn)行調(diào)整。三位調(diào)整完畢再按下select/start鍵,倒計(jì)時(shí)開始。
二.實(shí)現(xiàn)方法
⒈定時(shí)器0工作在方式1(16位)下定時(shí)一秒,每秒觸發(fā)依次,使“秒”變量減一,相當(dāng)于秒針。
⒉兩個(gè)按鍵:select/start鍵和set鍵分別使用兩個(gè)外部中斷INT0和INT1(設(shè)置下降沿有效)。當(dāng)相應(yīng)的按鍵按下時(shí),觸發(fā)相應(yīng)的中斷子程序。

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


單片機(jī)源程序如下:
  1. #include <reg51.h>
  2. #include <stdio.h>
  3. void timer0_init();               //定時(shí)器0初始化
  4. void delay(int);                  //延時(shí)程序
  5. void trans_led(int,int,int,int);  //數(shù)碼管顯示傳送函數(shù)
  6. sbit P10=0x90;                    //管腳定義
  7. sbit P30=0xB0;
  8. sbit P20=0xA0;
  9. int day=0,hour=0,min=0,sec=0;     //定義時(shí)間變量
  10. unsigned int state=0;             //運(yùn)行狀態(tài)標(biāo)志
  11. unsigned int asec=0;              //記錄定時(shí)器0中斷次數(shù),當(dāng)asec=20時(shí)計(jì)時(shí)為1s
  12. unsigned int check_b=0,check_s=0,check_g=0;    //記錄set鍵的按下次數(shù)
  13. char table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};  //定義表格
  14. main(){
  15.   timer0_init();
  16.   EX0=1;
  17.   EX1=1;
  18.   IT0=1;
  19.   IT1=1;
  20.   EA=1;
  21.   TR0=1;
  22.   while(1){
  23.    switch(state){
  24.      case(1):trans_led(100,5,10,10); //"天"的百位閃爍
  25.              break;
  26.      case(2):trans_led(10,100,5,10); //"天"的十位閃爍
  27.              break;
  28.      case(3):trans_led(10,10,100,5); //"天"的個(gè)位閃爍
  29.              break;
  30.      default:trans_led(0,20,20,20);  //正常運(yùn)行
  31.              break;

  32.    }
  33.   }
  34. }
  35. void timer0_init(){
  36.   TMOD=0x21;
  37.   TH0=0x3C;
  38.   TL0=0xB0;
  39.   ET0=1;
  40.   TF0=0;
  41. }
  42. void Timer0_overflow() interrupt 1 using 0{
  43.   TH0=0x3C;
  44.   TL0=0xB0;
  45.   asec++;
  46.   if(asec==20){             //定時(shí)一秒           
  47.     asec=0;
  48.     if(sec==0){
  49.       sec+=60;
  50.       min--;
  51.     }
  52.     if(min<0){
  53.       min+=60;
  54.       hour--;
  55.     }
  56.     if(hour<0){
  57.       hour+=24;
  58.       day--;
  59.     }
  60.     if(day>=0){              //計(jì)時(shí)時(shí)間未完,秒減一
  61.       sec--;
  62.     }
  63.     else{
  64.       day=hour=min=sec=0;    //計(jì)時(shí)結(jié)束
  65.       TR0=0;
  66.     }
  67.   }
  68. }
  69. void Int0() interrupt 0 using 0{  //set鍵
  70.   if(state>4)
  71.     state=1;
  72.   else
  73.     state++;
  74.   if(state==4){
  75.     state=0;
  76.     TR0=1;
  77.   }
  78. }
  79. void Int1() interrupt 2 using 0{ //select/start鍵

  80. if(state>=1&&state<=3){
  81.   TR0=0;
  82.   hour=min=sec=0;
  83.   timer0_init();
  84.   }
  85.     switch(state){
  86.        case(1):day+=100;
  87.                check_b++;
  88.                break;
  89.        case(2):day+=10;
  90.                check_s++;
  91.                break;
  92.        case(3):day++;
  93.                check_g++;
  94.                break;
  95.        default:break;      
  96.      }

  97.   if(check_b>9)               //計(jì)時(shí)范圍限制
  98.     day-=1000;
  99.   if(check_s>9){      
  100.     day-=100;
  101.   }
  102.   if(check_g>9){
  103.     day-=10;
  104.   }

  105. }
  106. void delay(int time){
  107.   int i,j;
  108.   for(i=0;i<=time;i++){
  109.     for(j=0;j<=10;j++);
  110.   }
  111. }
  112. void trans_led(int a,int b,int c,int d){
  113.                            //顯示秒
  114.   P2=0xFE;
  115.   P1=table[sec%10];
  116.   delay(20);
  117.   P2=0xFF;

  118.   P2=0xFD;              
  119.   P1=table[sec/10];
  120.   delay(20);
  121.   P2=0xFF;

  122.                           //顯示分
  123.   P2=0xFB;
  124.   P1=table[min%10];
  125.   delay(20);
  126.   P2=0xFF;

  127.   P2=0xF7;              
  128.   P1=table[min/10];
  129.   delay(20);
  130.   P2=0xFF;


  131.                          //顯示時(shí)
  132.   P2=0xEF;
  133.   P1=table[hour%10];
  134.   delay(20);
  135.   P2=0xFF;

  136.   P2=0xDF;              
  137.   P1=table[hour/10];
  138.   delay(20);



  139.                         //顯示天
  140.   delay(a);         
  141.   P2=0xFF;            
  142.   P30=0;
  143.   check_b=day/100;         
  144.   P1=table[check_b];
  145.   delay(b);
  146.   P2=0xFF;


  147.   P30=1;
  148.   P2=0x7F;
  149.   check_s=(day/10)%10;
  150.   P1=table[check_s];
  151.   delay(c);
  152.   P2=0xFF;

  153.   P2=0xBF;
  154.   check_g=day%10;
  155.   P1=table[check_g];
  156.   delay(d);
  157.   P2=0xFF;



  158. }
復(fù)制代碼
全部資料51hei下載地址:

倒計(jì)時(shí)牌.zip (540.18 KB, 下載次數(shù): 137)



作者: jovew    時(shí)間: 2020-4-26 21:12
值得學(xué)習(xí)的好東西!!!
作者: Alexand    時(shí)間: 2020-6-8 10:16
膜拜大神
作者: ajian-1023    時(shí)間: 2020-10-19 11:33
大神,我只要時(shí)分秒的倒計(jì)時(shí),怎么改

作者: lyd2004888    時(shí)間: 2023-9-1 14:47
值得學(xué)習(xí)的好東西!!!
作者: unity134679    時(shí)間: 2024-5-21 11:11
值得學(xué)習(xí)的好東西!

作者: Sweetxy    時(shí)間: 2024-10-21 08:33
值得學(xué)習(xí)的好東西




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: www欧美 | 精品国产伦一区二区三区 | 日本午夜精品 | a视频在线免费观看 | 十八岁毛片 | 美日韩一区二区三区 | 日韩精品在线视频 | 成人午夜网| 国产日韩欧美一区 | 三级中文字幕 | 久久九九国产 | 亚洲成人免费观看 | av在线成人 | 免费三级网站 | 国产日韩在线视频 | 成人福利网站 | 伊人干综合 | 成人国产精品一区二区 | 一级特黄aaaaaa大片 | 亚洲天堂视频在线观看 | 99久久综合 | 欧美黄色片在线观看 | 一区二区国产精品 | 欧美日韩黄色片 | 99精品色| 青青草国产成人av片免费 | 日韩国产在线播放 | 国产一区久久 | 亚洲一区在线视频 | 精品一区二区三区av | 亚洲国产精品va在线看黑人 | 91成人精品一区在线播放 | 97精品国产 | 91视频精选| 国产日韩在线视频 | 国产色在线 | 九色在线视频 | aaa一级片| 五月天激情国产综合婷婷婷 | www.国产.com | 成av人片一区二区三区久久 |