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

標題: 單片機倒計時牌Proteus仿真圖+代碼 可倒計時24小時 [打印本頁]

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

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

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


單片機源程序如下:
  1. #include <reg51.h>
  2. #include <stdio.h>
  3. void timer0_init();               //定時器0初始化
  4. void delay(int);                  //延時程序
  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;     //定義時間變量
  10. unsigned int state=0;             //運行狀態(tài)標志
  11. unsigned int asec=0;              //記錄定時器0中斷次數(shù),當asec=20時計時為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); //"天"的個位閃爍
  29.              break;
  30.      default:trans_led(0,20,20,20);  //正常運行
  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){             //定時一秒           
  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){              //計時時間未完,秒減一
  61.       sec--;
  62.     }
  63.     else{
  64.       day=hour=min=sec=0;    //計時結(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)               //計時范圍限制
  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.                          //顯示時
  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下載地址:

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



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

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

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




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 婷婷综合久久 | 午夜电影福利 | www.日本在线观看 | 九色在线 | 精品免费国产视频 | 国产婷婷综合 | 在线免费激情视频 | japanhd成人 | 日韩欧美三区 | 在线一区观看 | 国产不卡一区在线观看 | 日韩亚洲视频 | 亚洲高清在线观看 | 一本岛道一二三不卡区 | 日本二区在线观看 | 伊人久久成人 | 午夜精品视频在线观看 | 精品国产网 | 久草日韩 | 日韩综合网 | 亚洲国产精品久久久久秋霞不卡 | 欧美黄色绿像 | 久久激情av | 日本不卡一区 | 免费观看一级毛片 | 天堂久久久久久久 | 精品伊人| 古典武侠第一页久久777 | 欧美日韩精品国产 | 在线日韩不卡 | 欧美一区二区三区国产精品 | 国产高清视频 | 亚洲精品自在在线观看 | 黄免费观看视频 | www国产亚洲精品久久网站 | 99精品一区二区三区 | 精品国产色 | 久久精品国产一区二区三区不卡 | 91tv在线观看 | 大伊人久久| 九九伦理片 |