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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1796|回復: 0
收起左側

51單片機8位數(shù)碼管的鬧鐘Proteus仿真圖程序有注釋

[復制鏈接]
ID:1047841 發(fā)表于 2022-11-23 16:42 | 顯示全部樓層 |閱讀模式
下面我介紹一下本人之前原創(chuàng)做的 電子時鐘(含鬧鐘功能)
點擊仿真運行,默認顯示:00-00-00 ,時分秒按鍵分別調節(jié)時分秒, 點擊復位,正常計時
在復位前點擊切換,進入鬧鐘時間設置,也是時分秒,再點擊切換,返回正常時間設置,當正常時間到了鬧鐘設定時間,數(shù)碼管閃爍10s;
原理圖及程序注釋詳細,可供大家參考。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif 6db0d5d1c43554013b4fe3e93b7a205.png

單片機源程序注釋很詳細如下:
  1. /***********************************
  2. 項  目: 可設置鬧鐘的電子時鐘
  3. 編寫人:電氣小渣渣
  4. 時  間:6.7
  5. 1、開機顯示00-00-00
  6. 2、時 24  分 60 秒 60
  7. 3、可設置計時與鬧鐘模式下的時分秒
  8. 4、可切換鬧鐘模式與計時模式
  9. 5、有計時時間與鬧鐘時間,當計時時間到鬧鐘時間 ,二極管閃爍10s后熄滅

  10. ************************************/
  11. #include <reg51.h>
  12. #include "delay.h"
  13. #include "display.h"
  14. void Timer0Init(void);           //定時器t0初始化
  15. void Timer1Init(void);           //定時器t1初始化
  16. void showNormal();               //正常顯示
  17. void show();                      //鬧鐘模式下的顯示
  18. unsigned char timerCnt;
  19. static unsigned char sec,min,hour=0;//秒、分 時 用來數(shù)碼管顯示
  20.   static unsigned char min_n,hour_n=0;//鬧鐘設置下的 分、時
  21.   static unsigned char sec_n=1;      //秒
  22. unsigned char flag=0;           //判斷是鬧鐘模式還是計時模式
  23. unsigned char count;
  24. unsigned char ten;               //閃爍時間10s
  25. void key_Scan();
  26. sbit key1=P1^0; //計時模式下的 調節(jié)時
  27. sbit key2=P1^1;//計時模式下的 調節(jié)分
  28. sbit key3=P1^2;//計時模式下的 調節(jié)秒
  29. sbit key4=P1^3;//復位按鍵 用于正常顯示

  30. sbit key5=P1^4; //鬧鐘模式下 調節(jié)時
  31. sbit key6=P1^5;//鬧鐘模式下 調節(jié)分
  32. sbit key7=P1^6;//鬧鐘模式下 調節(jié)秒
  33. sbit key8=P1^7;//調節(jié)模式
  34. sbit led=P2^0; //發(fā)光二極管

  35. void main()
  36. {
  37.         Timer0Init();      //定時器T0初始化
  38.         Timer1Init();            //定時器T1初始化
  39.         EA=0;            //先將總開關關閉
  40.         TR1=0;                 //將定時器T1關閉
  41.         led=0;                 //不讓燈亮
  42.         while(1)
  43.         {
  44.                 key_Scan();    //進入按鍵掃描函數(shù)
  45.                 if(flag==0)
  46.                 {        showNormal();
  47.                   Display();
  48.                 }
  49.                 else
  50.                 {show();
  51.                         Display();
  52.                 }
  53.         if((min_n==min) && (hour_n==hour) && (sec_n==sec))
  54.                 {
  55.                   TR1=1;
  56.                 }
  57.         }

  58. }
  59. void key_Scan()  
  60. {
  61.                   if(key8==0)    //判斷按鍵是否按下
  62.          {
  63.            DelayXms(10);  //消抖
  64.                  if(key8==0)  //再次判斷按鍵是否按下
  65.                  {                 
  66.                    flag++;     //通過flag判斷進入哪種模式
  67.                          if(flag==2)
  68.                                  flag=0;
  69.                  }while(!key8); //釋放
  70.          }
  71.         if(flag==0)      //flag=0 表示計時模式
  72. {     
  73.                 if(key1==0)    //以下延時消抖類似,這里主要將功能
  74.                                  {
  75.                                          DelayXms(10);
  76.                                          if(key1==0)
  77.                                          {                 
  78.                                                  hour++;           //如果key1按下,hour+1
  79.                                                  if(hour>=24)   //如果,hour>=24 ,就清零
  80.                                                          hour=0;
  81.                                          }while(!key1);
  82.                                  }
  83.                                                 if(key2==0)
  84.                                  {
  85.                                          DelayXms(10);
  86.                                          if(key2==0)
  87.                                          {                 
  88.                                                  min++;               //如果key2按下,min+1
  89.                                                  if(min>=60)   //如筸min>=60 ,就清零
  90.                                                          min=0;
  91.                                          }while(!key2);
  92.                                  }
  93.                                                 if(key3==0)
  94.                                  {
  95.                                          DelayXms(10);
  96.                                          if(key3==0)   //如果key3按下,sec+1
  97.                                          {                 
  98.                                                  sec++;           //如果sec>=60 ,就清零
  99.                                                  if(sec>=60)
  100.                                                          sec=0;
  101.                                          }while(!key3);
  102.                                  }
  103.                                                         if(key4==0)
  104.                                  {
  105.                                          DelayXms(10);
  106.                                          if(key4==0)
  107.                                          {                 
  108.                                                  EA=1;
  109.                                          }while(!key4);
  110.                                  }
  111. }
  112.                                                         if(flag==1)  //flag=1 表示鬧鐘模式   
  113.                                                         {        
  114.                                                                  if(key5==0)   
  115.                                                          {
  116.                                                                  DelayXms(10);   
  117.                                                                  if(key5==0)
  118.                                                                  {                 
  119.                                                                          hour_n++;          //如果key5按下,hour_n+1
  120.                                                                          if(hour_n>=24)
  121.                                                                                  hour_n=0;
  122.                                                                  }while(!key5);
  123.                                                          }
  124.                                                                         if(key6==0)
  125.                                                          {
  126.                                                                  DelayXms(10);   
  127.                                                                  if(key6==0)
  128.                                                                  {                 
  129.                                                                          min_n++;           //如果key6按下,min_n+1
  130.                                                                          if(min_n>=60)
  131.                                                                                  min_n=0;
  132.                                                                  }while(!key6);
  133.                                                          }
  134.                                                                         if(key7==0)
  135.                                                          {
  136.                                                                  DelayXms(10);   
  137.                                                                  if(key7==0)
  138.                                                                  {                 
  139.                                                                          sec_n++;            //如果key7按下,sec_n+1
  140.                                                                          if(sec_n>=60) //超過60 就清零
  141.                                                                                  sec_n=0;
  142.                                                                  }while(!key7);
  143.                                                          }        
  144.                                                                
  145.                                                  }

  146.                                                                         
  147. }
  148. void showNormal()     //給8位數(shù)碼 管 賦值
  149. {
  150.    LEDBuf[0]=hour/10;  //顯示 時的 十位
  151.    LEDBuf[1]=hour%10;  //顯示 時的 十位
  152.    LEDBuf[2]=16;      // -
  153.    LEDBuf[3]=min/10;   //顯示分的 十位
  154.    LEDBuf[4]=min%10;  //顯示 分的 矢鑫?
  155.    LEDBuf[5]=16;     // -
  156.    LEDBuf[6]=sec/10;  //顯示秒的 十位
  157.    LEDBuf[7]=sec%10;  //顯示 秒的各位


  158. }
  159. void show()   //同上
  160. {
  161.    LEDBuf[0]=hour_n/10;
  162.    LEDBuf[1]=hour_n%10;
  163.    LEDBuf[2]=16;
  164.    LEDBuf[3]=min_n/10;
  165.    LEDBuf[4]=min_n%10;
  166.    LEDBuf[5]=16;
  167.    LEDBuf[6]=sec_n/10;
  168.    LEDBuf[7]=sec_n%10;
  169. }

  170. void Timer0Init(void)                //50毫秒@12.000MHz
  171. {
  172.         //AUXR &= 0x7F;                //定時器時鐘12T模式
  173.         TMOD &= 0xF0;                //設置定時器模式
  174.         TMOD |= 0x01;                //設置定時器模式
  175.         TL0 = 0xB0;                //設置定時初值
  176.         TH0 = 0x3C;                //設置定時初值
  177.         TF0 = 0;                //清除TF0標志
  178.         ET0=1;
  179.         TR0 = 1;                //定時器0開始計時
  180. }
  181. void timer0_ISR() interrupt 1  
  182. {
  183.     timerCnt++;
  184.         if(timerCnt>=20)
  185.         {
  186.           timerCnt=0;
  187.           sec++;
  188.           if(sec>=60)
  189.           {         sec=0;
  190.                   min++;
  191.                 if(min>=60)
  192.                 {
  193.                    min=0;
  194.                    hour++;
  195.                    if(hour>=24)
  196.                    {
  197.                             hour=0;
  198.                    }               
  199.                 }         
  200.           }        
  201.         }
  202.   TL0 = 0xB0;                //設置定時初值
  203.         TH0 = 0x3C;                //設置定時初值
  204. }
  205. void Timer1Init(void)                //50毫秒@12.000MHz
  206. {
  207.         //AUXR &= 0xBF;                //定時器時鐘12T模式
  208.         TMOD &= 0x0F;                //設置定時器模式
  209.         TMOD |= 0x10;                //設置定時器模式
  210.         TL1 = 0xB0;                //設置定時初值
  211.         TH1 = 0x3C;                //設置定時初值
  212.         TF1 = 0;                //清除TF1標志
  213.         ET1=1;
  214.         TR1 = 1;                //定時器1開始計時
  215. }
  216. void timer1_ISR() interrupt 3
  217. {   TR1=0;
  218.                 //Display();
  219.         
  220.                 count++;        
  221.         if(count>=10)
  222.         {
  223.           led=~led;
  224.                 count=0;
  225.                 ten++;
  226.                 if(ten>=20)
  227.                 {        
  228.                   led=0;
  229.                 }
  230.         }
  231.                 TL1 = 0xB0;                //設置定時初值
  232.           TH1 = 0x3C;                //設置定時初值
  233.   
  234.                 TR1=1;
  235. }
復制代碼
cde7ebeb4e93476e60a4540c086860e.jpg
Keil代碼與Proteus仿真下載:
詳解代碼注釋.7z (45.8 KB, 下載次數(shù): 46)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区久久久久久久久 | 欧美在线观看一区 | 欧美日韩一区二区三区在线观看 | 国产高清一区二区三区 | 国产精品一级 | 婷婷综合 | 精品国产一区二区久久 | 中文字幕一区在线观看视频 | 久久久国产亚洲精品 | 日韩理论电影在线观看 | 午夜精品久久久久久久星辰影院 | 久久免费观看视频 | 日韩电影中文字幕在线观看 | 精品亚洲一区二区三区四区五区 | 久久aⅴ乱码一区二区三区 91综合网 | 噜噜噜噜狠狠狠7777视频 | 国产一级一级国产 | 中文字幕一区在线观看视频 | 玖玖在线免费视频 | 综合久久综合久久 | 成人在线看片 | 毛片1| 日韩一区二区在线播放 | av一区二区在线观看 | 亚洲精品99 | 欧美区在线 | a级片在线观看 | 国产精品大全 | 久久香焦| 亚洲精品国产成人 | 国产婷婷色综合av蜜臀av | 国产精品久久久久久模特 | 波多野结衣电影一区 | 欧美一极视频 | 在线看亚洲 | 拍戏被cao翻了h承欢 | 欧美成人精品 | 亚洲一区在线免费观看 | 黄免费观看 | 国产精品美女久久久久久久久久久 | 国产精品永久久久久 |