欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機數(shù)碼管電子時鐘Proteus仿真圖+代碼注釋很詳細 [打印本頁]

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

仿真原理圖如下(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. //共陽極數(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ū),時十、個位、分十、個位、秒十、個位初始為0,0x0b為"-"編碼
  9. uchar data timedat[3]={0x00,0x00,0x00};  //分別為秒、分和小時的計數(shù)值(記錄K1和K2次數(shù))
  10. uchar data  ms50=0x00, num=0x00,  n1=0x00,  n2=0x00;
  11. //定義定時次數(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 )  //定義延時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ù)。如果沒有按鍵則時鐘正常走時。當按K0鍵1次→暫停走時進入調(diào)小時狀態(tài);再按K0鍵1次→進入調(diào)分鐘狀態(tài);再按K0鍵1次→回到正常走時狀態(tài)。對于K1和K2鍵,如果正常走時下→按K1K2鍵不起作用;如果進入調(diào)時或者調(diào)分狀態(tài)→按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;  // 調(diào)整鍵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按下次數(shù)
  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按下次數(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ù)。時間顯示先秒個位計算顯示→秒十位計算顯示→再分個位計算顯示→分十位顯示→再時個位計算顯示→時十位顯示。
  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. //主函數(shù),時間顯示先秒個位計算顯示,然后是秒十位計算顯示;再就是分個位計算顯示,然后是分十位顯示;再就是時個位計算顯示,然后是時十位顯示。定時器中斷先檢測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. //定時器/計數(shù)器T0中斷服務函數(shù)。定時器中斷先檢測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, 下載次數(shù): 667)




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

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

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

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

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

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

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

應該是開機顯示7:00

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

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

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

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

51hei.gif

作者: 愛你20天    時間: 2022-9-2 14:06
大佬,整點報時怎么能做到
作者: vody    時間: 2022-9-24 22:43
這個代碼編寫的行數(shù)少,收下學習。
作者: wjinyao    時間: 2022-12-23 10:43
jhlaox 發(fā)表于 2020-6-8 12:11
請問用什么仿真軟件?

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




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1