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

標(biāo)題: 單片機(jī)數(shù)碼管電子時(shí)鐘Proteus仿真圖+代碼注釋很詳細(xì) [打印本頁(yè)]

作者: kkltdf    時(shí)間: 2019-1-5 21:13
標(biāo)題: 單片機(jī)數(shù)碼管電子時(shí)鐘Proteus仿真圖+代碼注釋很詳細(xì)
①開(kāi)機(jī)為走時(shí)模式,正常顯示時(shí)間。
②共設(shè)置3個(gè)按鍵,分別為模式鍵、功能鍵1、功能鍵2。按動(dòng)模式鍵,模式將在“走時(shí)/調(diào)時(shí)/日期顯示及調(diào)整/鬧鐘顯示及調(diào)整”4個(gè)模式下切換。
③走時(shí)模式下按動(dòng)功能鍵1/功能鍵2停止鬧鐘。
④調(diào)時(shí)模式下,功能鍵1上調(diào)時(shí)間,功能鍵2下調(diào)時(shí)間。

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


單片機(jī)源程序如下:
  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. //共陽(yáng)極數(shù)碼管顯示"0~9","滅"和"-"的字段碼
  5. //uchar code tab[]={0x3f,0x06,05b,0x4f,0x66,0x6d,07d,0x07,0x7f,0x6f,0x00,0x40};//共陰數(shù)碼管
  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. //顯示數(shù)據(jù)緩沖區(qū),時(shí)十、個(gè)位、分十、個(gè)位、秒十、個(gè)位初始為0,0x0b為"-"編碼
  9. uchar data timedat[3]={0x00,0x00,0x00};  //分別為秒、分和小時(shí)的計(jì)數(shù)值(記錄K1和K2次數(shù))
  10. uchar data  ms50=0x00, num=0x00,  n1=0x00,  n2=0x00;
  11. //定義定時(shí)次數(shù)變量,調(diào)整模式變量,按加1鍵次數(shù)變量,按減1鍵次數(shù)變量
  12. sbit  key0=P1^0 ;  //調(diào)整鍵--模式
  13. sbit  key1=P1^1 ;  //加1鍵
  14. sbit  key2=P1^2 ;  //減1鍵
  15. //---------------------------------------
  16. void  delay1ms( unsigned  int  z )  //定義延時(shí)1ms函數(shù)
  17. { unsigned  int  x, y ;
  18. for  ( x=z;  x>0;  x-- )
  19.                 for  ( y=120; y>0 ;  y-- )        ;
  20. }
  21. //---------------------------------------
  22. //按鍵處理函數(shù)。如果沒(méi)有按鍵則時(shí)鐘正常走時(shí)。當(dāng)按K0鍵1次→暫停走時(shí)進(jìn)入調(diào)小時(shí)狀態(tài);再按K0鍵1次→進(jìn)入調(diào)分鐘狀態(tài);再按K0鍵1次→回到正常走時(shí)狀態(tài)。對(duì)于K1和K2鍵,如果正常走時(shí)下→按K1K2鍵不起作用;如果進(jìn)入調(diào)時(shí)或者調(diào)分狀態(tài)→按K1鍵可對(duì)時(shí)或分加1操作,小時(shí)加到24則回0,分鐘加到60則回0。按K2鍵可對(duì)時(shí)或分減1操作,小時(shí)減到負(fù)則回23,分鐘減到負(fù)則回59。
  23. void keyscan(  void )
  24. {        EA=0;  //關(guān)中斷
  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;  // 調(diào)整鍵K0每按1次--模式變量num加1
  28.                         if (num>=3)         {num=0;  ET0=1;  TR0=1;  }  // 啟動(dòng)T0校時(shí)
  29.         }
  30.                 if (num!=0)        //模式變量不等于0
  31. {        if (key1==0)        // K1鍵確實(shí)按下
  32.          {        delay1ms(10);         while (key1==0);           timedat[num]++;  //記錄按鍵K1按下次數(shù)
  33.                                 if (num==2) n1=24;  else n1=60;                //模式變量等于小時(shí)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按下次數(shù)
  39.                                 if (num==2) n2=23;else n2=59;                        
  40.                                 if (timedat[num]<=0)                  {timedat[num]=n2; }          }
  41.                 }
  42.                  EA=1;
  43.         }
  44. //---------------------------------------
  45. //數(shù)碼管顯示函數(shù)。時(shí)間顯示先秒個(gè)位計(jì)算顯示→秒十位計(jì)算顯示→再分個(gè)位計(jì)算顯示→分十位顯示→再時(shí)個(gè)位計(jì)算顯示→時(shí)十位顯示。
  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;  //時(shí)
  52. for ( k=0;  k<8;  k++ )
  53.                         {         P0=tab[ dis[k] ];  P2=wetab[k];    delay1ms(1);     P2=0x00;         }
  54.         }        
  55. //---------------------------------------
  56. //主函數(shù),時(shí)間顯示先秒個(gè)位計(jì)算顯示,然后是秒十位計(jì)算顯示;再就是分個(gè)位計(jì)算顯示,然后是分十位顯示;再就是時(shí)個(gè)位計(jì)算顯示,然后是時(shí)十位顯示。定時(shí)器中斷先檢測(cè)1秒是否到→1秒如果到則秒單元加1;1秒如果沒(méi)到就檢測(cè)1分鐘是否到→1分鐘如果到則分單元加1;如果沒(méi)到就檢測(cè)1小時(shí)是否到→1小時(shí)如果到則時(shí)單元加1;如果沒(méi)到→則顯示時(shí)間。
  57.          void main( void )
  58.         {   TMOD=0x01;   //T0定時(shí)50ms,方式1
  59.                 EA=1;  ET0=1;  TR0=1;  //開(kāi)中斷,允許T0中斷,啟動(dòng)T0
  60.                 TH0=0x3c;  TL0=0xb0;
  61.                 while (1)
  62.                         {         display( ) ;
  63.                                 keyscan( ) ;
  64.                         }
  65. }
  66. //定時(shí)器/計(jì)數(shù)器T0中斷服務(wù)函數(shù)。定時(shí)器中斷先檢測(cè)1秒是否到→1秒如果到則秒單元加1;1秒如果沒(méi)到就檢測(cè)1分鐘是否到→1分鐘如果到則分單元加1;如果沒(méi)到就檢測(cè)1小時(shí)是否到→1小時(shí)如果到則時(shí)單元加1;如果沒(méi)到→則顯示時(shí)間。
  67.   void  timer0(void)  interrupt  1
  68. { ET0=0; TR0=0;   //不許T0中斷也不啟動(dòng)
  69. TH0=0x3c;  TL0=0xb0;  
  70. TR0=1;  //啟動(dòng)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,且時(shí)加1
  77.                                 if (timedat[2]==24)         {         timedat[2]=0;         }         }        }  //時(shí)到24后回0
  78.                                  
  79.         }
  80.         ET0=1;   //允許T0中斷
  81. }
復(fù)制代碼

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




作者: 蘿卜蘿卜我    時(shí)間: 2019-3-23 09:19
日期和鬧鐘怎么顯示啊
作者: 18099949935    時(shí)間: 2019-6-17 22:19
請(qǐng)問(wèn)這個(gè)單片機(jī)怎么用呢
作者: serk    時(shí)間: 2019-6-25 13:06
希望你能以后多多上傳資料
作者: jhlaox    時(shí)間: 2020-6-8 12:11
請(qǐng)問(wèn)用什么仿真軟件?

作者: 嶸川川    時(shí)間: 2020-6-21 20:08
這個(gè)使用共陰極數(shù)碼管做的嗎?我看代碼里面既有共陽(yáng)也有共陰

作者: jnlaok    時(shí)間: 2020-7-3 15:21
這個(gè)代碼編寫(xiě)的行數(shù)少,收下學(xué)習(xí)。
作者: kkltdf    時(shí)間: 2020-11-22 14:32
jhlaox 發(fā)表于 2020-6-8 12:11
請(qǐng)問(wèn)用什么仿真軟件?

Proteus
作者: 654654141    時(shí)間: 2020-11-22 22:10
timedat[0]==0&timedat[1]==0&timedat[2]==7后面這個(gè)為啥等于7?
作者: themaybe    時(shí)間: 2020-11-24 20:35
里面沒(méi)有protures 的文件啊
作者: jdlover    時(shí)間: 2020-12-2 20:49
654654141 發(fā)表于 2020-11-22 22:10
timedat[0]==0&timedat[1]==0&timedat[2]==7后面這個(gè)為啥等于7?

7:00鬧鐘亮
作者: 呆憨    時(shí)間: 2020-12-11 09:34
jhlaox 發(fā)表于 2020-6-8 12:11
請(qǐng)問(wèn)用什么仿真軟件?

Proteus
作者: 呆憨    時(shí)間: 2020-12-11 09:35
內(nèi)容詳細(xì),對(duì)初學(xué)者非常有幫助
作者: 你好de    時(shí)間: 2020-12-14 01:39
jhlaox 發(fā)表于 2020-6-8 12:11
請(qǐng)問(wèn)用什么仿真軟件?

protues軟件仿真,keil軟件編程
作者: 阿羊    時(shí)間: 2020-12-28 19:26
這個(gè)可以啊,很強(qiáng)
作者: 123456xuzhepu    時(shí)間: 2021-5-24 12:26
大神,protus可以用嗎
作者: yangbulasi    時(shí)間: 2021-11-12 22:22
jdlover 發(fā)表于 2020-12-2 20:49
7:00鬧鐘亮

應(yīng)該是開(kāi)機(jī)顯示7:00

作者: LBJ236    時(shí)間: 2022-1-5 14:23
文件里的仿真圖為啥打不開(kāi)呢
作者: heicad    時(shí)間: 2022-1-5 16:32
LBJ236 發(fā)表于 2022-1-5 14:23
文件里的仿真圖為啥打不開(kāi)呢

右鍵dsn文件  打開(kāi)方式選擇Proteus8即可打開(kāi) 如圖

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

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

51hei.gif

作者: 愛(ài)你20天    時(shí)間: 2022-9-2 14:06
大佬,整點(diǎn)報(bào)時(shí)怎么能做到
作者: vody    時(shí)間: 2022-9-24 22:43
這個(gè)代碼編寫(xiě)的行數(shù)少,收下學(xué)習(xí)。
作者: wjinyao    時(shí)間: 2022-12-23 10:43
jhlaox 發(fā)表于 2020-6-8 12:11
請(qǐng)問(wèn)用什么仿真軟件?

Proteus
作者: 666fafafa    時(shí)間: 2024-4-24 23:20
這個(gè)有沒(méi)有文檔?
作者: 115321    時(shí)間: 2025-6-18 19:43
謝謝大佬,為什么顯示橫杠




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产一区在线视频 | 国产精品网站在线观看 | 午夜视频在线 | 国产三级黄色片 | 免费毛片在线 | 四虎视频 | 久草福利视频 | 国产精品二区一区二区aⅴ污介绍 | a毛片视频| 99久久精品一区二区成人 | 肉丝美脚视频一区二区 | 中文字幕免费av | 91伊人 | 免费日韩视频 | 国产在线成人 | 青青草久久 | 亚洲色吧 | 999毛片 | 亚洲一区二区三区在线视频 | 91在线网站 | 色综合天天综合网天天狠天天 | 黄色大片免费在线观看 | 成人一区二区三区 | 国产传媒一区二区 | 国产一区二区不卡 | 黄色网av | 国产午夜一区二区三区 | 欧美精品乱码99久久蜜桃 | 黄色一极片 | 天堂在线www | 精品一区二区三区av | 亚洲精品二区 | 精品免费视频 | 日本a v在线播放 | 久久综合热 | 国产成人福利 | 久久久久婷婷 | 午夜激情在线观看 | 亚洲免费观看 | 国产精品一区一区三区 | 艳妇诱春(第5部分)(h) |