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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機數碼管電子時鐘Proteus仿真圖+代碼注釋很詳細

  [復制鏈接]
跳轉到指定樓層
樓主
①開機為走時模式,正常顯示時間。
②共設置3個按鍵,分別為模式鍵、功能鍵1、功能鍵2。按動模式鍵,模式將在“走時/調時/日期顯示及調整/鬧鐘顯示及調整”4個模式下切換。
③走時模式下按動功能鍵1/功能鍵2停止鬧鐘。
④調時模式下,功能鍵1上調時間,功能鍵2下調時間。

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


單片機源程序如下:
  1. #include  <reg51.h>
  2. #define uchar unsigned char
  3. uchar code tab[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
  4. //共陽極數碼管顯示"0~9","滅"和"-"的字段碼
  5. //uchar code tab[]={0x3f,0x06,05b,0x4f,0x66,0x6d,07d,0x07,0x7f,0x6f,0x00,0x40};//共陰數碼管
  6. uchar code wetab[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};  //位選
  7. uchar data dis[8]={0x00,0x00,0x0b,0x00,0x00,0x0b,0x00,0x00};
  8. //顯示數據緩沖區,時十、個位、分十、個位、秒十、個位初始為0,0x0b為"-"編碼
  9. uchar data timedat[3]={0x00,0x00,0x00};  //分別為秒、分和小時的計數值(記錄K1和K2次數)
  10. uchar data  ms50=0x00, num=0x00,  n1=0x00,  n2=0x00;
  11. //定義定時次數變量,調整模式變量,按加1鍵次數變量,按減1鍵次數變量
  12. sbit  key0=P1^0 ;  //調整鍵--模式
  13. sbit  key1=P1^1 ;  //加1鍵
  14. sbit  key2=P1^2 ;  //減1鍵
  15. //---------------------------------------
  16. void  delay1ms( unsigned  int  z )  //定義延時1ms函數
  17. { unsigned  int  x, y ;
  18. for  ( x=z;  x>0;  x-- )
  19.                 for  ( y=120; y>0 ;  y-- )        ;
  20. }
  21. //---------------------------------------
  22. //按鍵處理函數。如果沒有按鍵則時鐘正常走時。當按K0鍵1次→暫停走時進入調小時狀態;再按K0鍵1次→進入調分鐘狀態;再按K0鍵1次→回到正常走時狀態。對于K1和K2鍵,如果正常走時下→按K1K2鍵不起作用;如果進入調時或者調分狀態→按K1鍵可對時或分加1操作,小時加到24則回0,分鐘加到60則回0。按K2鍵可對時或分減1操作,小時減到負則回23,分鐘減到負則回59。
  23. void keyscan(  void )
  24. {        EA=0;  //關中斷
  25.         if(timedat[0]==0&timedat[1]==0&timedat[2]==7)  {P1=0xff;}
  26. if (key0==0)         { delay1ms(10);         while (key0==0);
  27.                         num++; TR0=0; ET0=0;  // 調整鍵K0每按1次--模式變量num加1
  28.                         if (num>=3)         {num=0;  ET0=1;  TR0=1;  }  // 啟動T0校時
  29.         }
  30.                 if (num!=0)        //模式變量不等于0
  31. {        if (key1==0)        // K1鍵確實按下
  32.          {        delay1ms(10);         while (key1==0);           timedat[num]++;  //記錄按鍵K1按下次數
  33.                                 if (num==2) n1=24;  else n1=60;                //模式變量等于小時2--則回遲到一天或60分鐘
  34. if (timedat[num]>=n1)          { timedat[num]=0; }          }
  35.                 }
  36.                 if (num!=0)
  37.                  {        if (key2==0)        
  38. {        delay1ms(10);        while (key2==0);                 timedat[num]--;  //記錄按鍵K2按下次數
  39.                                 if (num==2) n2=23;else n2=59;                        
  40.                                 if (timedat[num]<=0)                  {timedat[num]=n2; }          }
  41.                 }
  42.                  EA=1;
  43.         }
  44. //---------------------------------------
  45. //數碼管顯示函數。時間顯示先秒個位計算顯示→秒十位計算顯示→再分個位計算顯示→分十位顯示→再時個位計算顯示→時十位顯示。
  46.          void  display( void )
  47.         {          uchar k;
  48.                 if(timedat[0]==0&timedat[1]==0&timedat[2]==7)  {P1=0xff;}
  49.                  dis[0]=timedat[0]%10;  dis[1]=timedat[0]/10;   //秒
  50. dis[3]=timedat[1]%10;  dis[4]=timedat[1]/10;  //分
  51. dis[6]=timedat[2]%10;  dis[7]=timedat[2]/10;  //時
  52. for ( k=0;  k<8;  k++ )
  53.                         {         P0=tab[ dis[k] ];  P2=wetab[k];    delay1ms(1);     P2=0x00;         }
  54.         }        
  55. //---------------------------------------
  56. //主函數,時間顯示先秒個位計算顯示,然后是秒十位計算顯示;再就是分個位計算顯示,然后是分十位顯示;再就是時個位計算顯示,然后是時十位顯示。定時器中斷先檢測1秒是否到→1秒如果到則秒單元加1;1秒如果沒到就檢測1分鐘是否到→1分鐘如果到則分單元加1;如果沒到就檢測1小時是否到→1小時如果到則時單元加1;如果沒到→則顯示時間。
  57.          void main( void )
  58.         {   TMOD=0x01;   //T0定時50ms,方式1
  59.                 EA=1;  ET0=1;  TR0=1;  //開中斷,允許T0中斷,啟動T0
  60.                 TH0=0x3c;  TL0=0xb0;
  61.                 while (1)
  62.                         {         display( ) ;
  63.                                 keyscan( ) ;
  64.                         }
  65. }
  66. //定時器/計數器T0中斷服務函數。定時器中斷先檢測1秒是否到→1秒如果到則秒單元加1;1秒如果沒到就檢測1分鐘是否到→1分鐘如果到則分單元加1;如果沒到就檢測1小時是否到→1小時如果到則時單元加1;如果沒到→則顯示時間。
  67.   void  timer0(void)  interrupt  1
  68. { ET0=0; TR0=0;   //不許T0中斷也不啟動
  69. TH0=0x3c;  TL0=0xb0;  
  70. TR0=1;  //啟動T0
  71. ms50++;
  72. P1=0xf7;
  73.          if(timedat[0]==0&timedat[1]==0&timedat[2]==7)  {P1=0xff;}
  74. if (ms50==20)         {        ms50=0x00;  timedat[0]++;  //變量m回0,且秒加1
  75.                 if (timedat[0]==60)          {         timedat[0]=0;timedat[1]++;  //秒到60后回0,且分加1
  76.                         if (timedat[1]==60)         {         timedat[1]=0;timedat[2]++;  //分到60后回0,且時加1
  77.                                 if (timedat[2]==24)         {         timedat[2]=0;         }         }        }  //時到24后回0
  78.                                  
  79.         }
  80.         ET0=1;   //允許T0中斷
  81. }
復制代碼

所有資料51hei提供下載:
電子時鐘.7z (45.58 KB, 下載次數: 667)



評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:482149 發表于 2019-3-23 09:19 | 只看該作者
日期和鬧鐘怎么顯示啊
回復

使用道具 舉報

板凳
ID:565105 發表于 2019-6-17 22:19 | 只看該作者
請問這個單片機怎么用呢
回復

使用道具 舉報

地板
ID:571632 發表于 2019-6-25 13:06 | 只看該作者
希望你能以后多多上傳資料
回復

使用道具 舉報

5#
ID:412002 發表于 2020-6-8 12:11 | 只看該作者
請問用什么仿真軟件?
回復

使用道具 舉報

6#
ID:785922 發表于 2020-6-21 20:08 | 只看該作者
這個使用共陰極數碼管做的嗎?我看代碼里面既有共陽也有共陰
回復

使用道具 舉報

7#
ID:515926 發表于 2020-7-3 15:21 | 只看該作者
這個代碼編寫的行數少,收下學習。
回復

使用道具 舉報

8#
ID:462715 發表于 2020-11-22 14:32 | 只看該作者
jhlaox 發表于 2020-6-8 12:11
請問用什么仿真軟件?

Proteus
回復

使用道具 舉報

9#
ID:846768 發表于 2020-11-22 22:10 | 只看該作者
timedat[0]==0&timedat[1]==0&timedat[2]==7后面這個為啥等于7?
回復

使用道具 舉報

10#
ID:848043 發表于 2020-11-24 20:35 | 只看該作者
里面沒有protures 的文件啊
回復

使用道具 舉報

11#
ID:529972 發表于 2020-12-2 20:49 | 只看該作者
654654141 發表于 2020-11-22 22:10
timedat[0]==0&timedat[1]==0&timedat[2]==7后面這個為啥等于7?

7:00鬧鐘亮
回復

使用道具 舉報

12#
ID:858511 發表于 2020-12-11 09:34 | 只看該作者
jhlaox 發表于 2020-6-8 12:11
請問用什么仿真軟件?

Proteus
回復

使用道具 舉報

13#
ID:858511 發表于 2020-12-11 09:35 | 只看該作者
內容詳細,對初學者非常有幫助
回復

使用道具 舉報

14#
ID:859848 發表于 2020-12-14 01:39 來自手機 | 只看該作者
jhlaox 發表于 2020-6-8 12:11
請問用什么仿真軟件?

protues軟件仿真,keil軟件編程
回復

使用道具 舉報

15#
ID:857685 發表于 2020-12-28 19:26 | 只看該作者
這個可以啊,很強
回復

使用道具 舉報

16#
ID:925453 發表于 2021-5-24 12:26 | 只看該作者
大神,protus可以用嗎
回復

使用道具 舉報

17#
ID:245820 發表于 2021-11-12 22:22 | 只看該作者

應該是開機顯示7:00
回復

使用道具 舉報

18#
ID:999989 發表于 2022-1-5 14:23 | 只看該作者
文件里的仿真圖為啥打不開呢
回復

使用道具 舉報

19#
ID:262 發表于 2022-1-5 16:32 | 只看該作者
LBJ236 發表于 2022-1-5 14:23
文件里的仿真圖為啥打不開呢

右鍵dsn文件  打開方式選擇Proteus8即可打開 如圖

或者安裝Proteus7.5可以直接打開老版本的dsn文件

51hei.gif (75.33 KB, 下載次數: 163)

51hei.gif
回復

使用道具 舉報

20#
ID:1043621 發表于 2022-9-2 14:06 | 只看該作者
大佬,整點報時怎么能做到
回復

使用道具 舉報

21#
ID:232619 發表于 2022-9-24 22:43 | 只看該作者
這個代碼編寫的行數少,收下學習。
回復

使用道具 舉報

22#
ID:1003452 發表于 2022-12-23 10:43 | 只看該作者
jhlaox 發表于 2020-6-8 12:11
請問用什么仿真軟件?

Proteus
回復

使用道具 舉報

23#
ID:1118204 發表于 2024-4-24 23:20 | 只看該作者
這個有沒有文檔?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品区一区二 | 中文字幕在线第一页 | 久久精品视频91 | 色呦呦在线 | 国产91综合 | 亚洲电影一区二区三区 | 国产免费一区二区三区网站免费 | 国内精品99 | 亚洲国产欧美日韩 | 欧美在线一区二区视频 | 亚洲精品v | 精品国产乱码久久久久久1区2区 | 综合网中文字幕 | 日韩av一区二区在线观看 | 国产精品欧美一区二区三区不卡 | 久久久成人精品 | 久久99精品久久久久久噜噜 | 理论片午午伦夜理片影院 | 99资源 | 欧美一区2区三区4区公司二百 | 亚洲精品99999 | 在线视频日韩精品 | 国产精品久久国产精品久久 | 人人干人人草 | 欧美不卡一区二区 | 一区二区国产精品 | 国产成人av免费看 | 国产免费一区二区三区 | 成人a网 | 黄色成人在线网站 | 欧美中文字幕一区二区三区亚洲 | 波多野结衣先锋影音 | 国产99精品| 免费簧片视频 | 国产精品日韩欧美一区二区三区 | 国产亚洲精品精品国产亚洲综合 | 中文字幕高清 | 国产精品日韩欧美 | 狠狠爱综合网 | 欧美日韩国产在线观看 | 午夜影院在线播放 |