標(biāo)題: 51單片機(jī)時(shí)鐘完整資料 [打印本頁]

作者: 1323    時(shí)間: 2017-4-25 17:03
標(biāo)題: 51單片機(jī)時(shí)鐘完整資料
51單片機(jī)時(shí)鐘完整資料


時(shí)鐘計(jì)時(shí)器元件清單
  
序號(hào)
  
元器件名
元件序號(hào)與規(guī)格
單位
數(shù)量
  
1
  
電阻
R1   R19          1KΩ
個(gè)
2
  
2
  
R2              10KΩ
個(gè)
1
  
3
  
R3~R10           330Ω
個(gè)
8
  
4
  
R11~R18限流電阻       100Ω
個(gè)
8
  
5
  
電容
C1   C2         30pF
個(gè)
2
  
6
  
C3電解電容    10uF
個(gè)
1
  
7
  
三極管
P1~P9      9012
個(gè)
9
  
8
  
晶振
Y1         12MHz
個(gè)
1
  
9
  
按鍵
S1 K1~K4
個(gè)
5
  
10
  
蜂鳴器
B1
個(gè)
1
  
11
  
數(shù)碼管
四位一體共陰
2
  
12
  
單片機(jī)
STC89C52
1
  
13
  
排針
若干
個(gè)
1
  
14
  
插座
40
1



單片機(jī)源程序:
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. sbit K1=P1^0; //功能鍵
  5. sbit K2=P1^1; //加1鍵
  6. sbit K3=P1^2; //減1鍵
  7. sbit K4=P1^3; //備用
  8. sbit beep=P1^4;// 蜂鳴器輸出控制
  9. uchar t,m,f,s;
  10. uchar num;
  11. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
  12. 0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  //0-F共陰極數(shù)碼管
  13. /*uchar code table0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,//共陽極段碼
  14. 0x82,0xf8,0x80,0x90};*/
  15. uchar code tablewe[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //控制位選

  16. void delayms(uint z)  //延時(shí)z ms
  17. {
  18.         uint x,y;
  19.         for(x=z;x>0;x--)         for(y=110;y>0;y--);
  20. }

  21. void di()          //蜂鳴器響
  22. {         beep=0;        delayms(100);          beep=1;        }

  23. void display(uchar n,uchar c,uchar d) //分離變量
  24. {
  25.         uchar a,b;
  26.         a=n/10;        //十位
  27.         b=n%10;        //個(gè)位

  28.         P0=table[a];         P2=tablewe[c];        delayms(2);        //十位顯示
  29.         P0=table[b];         P2=tablewe[d];         delayms(2); //個(gè)位顯示
  30. }
  31. void init()
  32. {        t=0; m=0;         f=0;           s=0;
  33.         
  34.         TMOD=0X01; //定時(shí)器T0工作于方式1
  35.         TH0=(65536-50000)/256;        //晶振為12MHZ
  36.         TL0=(65536-50000)%256;         //定時(shí)時(shí)間為50ms
  37.         EA=1;         //開中斷
  38.         ET0=1;         //開T0中斷
  39.         TR0=1;         //啟動(dòng)T0
  40.         }
  41. void key()                  //按鍵掃描
  42. {
  43.         if(K1==0)        //功能鍵
  44.         {         
  45.                 delayms(10); //延時(shí)消抖
  46.                 if(K1==0)         //再判
  47.                 {        di();         //調(diào)蜂鳴器響
  48.                         num++;         //功能鍵按下次數(shù)加1
  49.                         while(!K1);//等待功能鍵釋放
  50.                         if(num==1)TR0=0; //關(guān)閉T0,進(jìn)入調(diào)時(shí)模式
  51.                         if(num==4)
  52.                         {
  53.                                 num=0;         TR0=1;        //啟動(dòng)T0
  54.                         }
  55.                 }
  56.         }
  57.         if(K2==0)                 //加1鍵
  58.         {
  59.                 delayms(10);//延時(shí)消抖
  60.                 if(K2==0)
  61.                 {        di();    //調(diào)蜂鳴器響
  62.                         while(!K2);        //等待加1鍵釋放
  63.                         if(num==1){        m++; if(m==60)m=0;         display(m,6,7);        } //秒加1,顯示秒
  64.                         if(num==2){        f++; if(f==60)f=0;        display(f,3,4);        } //分加1,顯示分
  65.                         if(num==3){        s++; if(s==24)s=0;         display(s,0,1);        } //時(shí)加1,顯示時(shí)
  66.                 }
  67.         }
  68.         if(K3==0)         //加1鍵
  69.         {
  70.                 delayms(10);
  71.                 if(K3==0)
  72.                 {        di();  //調(diào)蜂鳴器響
  73.                         while(!K3);        //等待減1鍵釋放
  74.                         if(num==1){        m--;if(m==-1)m=59;display(m,6,7);} //秒減1,顯示秒
  75.                         if(num==2){        f--;if(f==-1)f=59;display(f,3,4);} //分減1,顯示分
  76.                         if(num==3){        s--;if(s==-1)s=23;display(s,0,1);} //時(shí)減1,顯示時(shí)
  77.                 }
  78.         }
  79. }

  80. void main()
  81. {        
  82.         init();//初始化        
  83.         while(1)
  84.         {        
  85.                 key();           //調(diào)鍵掃描                  
  86.                 P0=0x40;  //顯示-        
  87.                 P2=0xdb;
  88.         
  89.                 delayms(2);        //延時(shí)
  90.                 display(s,0,1);        //秒顯示
  91.                 display(f,3,4);        //分顯示
  92.                 display(m,6,7);        //時(shí)顯示
  93.         }
  94. }

  95. void T0_time() interrupt 1
  96. {
  97.         TH0=(65536-50000)/256; //重賦初值
  98.         TL0=(65536-50000)%256;
  99.         t++;                                   //中斷次數(shù)加1
  100.         if(t==20)                           //到1秒
  101.         {
  102.                 t=0;                           //計(jì)數(shù)清0
  103.                 m++;                           //秒加1
  104.                

  105. …………限于本文篇幅 余下代碼請(qǐng)從51電子黑下載附件…………
復(fù)制代碼

下載:
源程序.zip (21.97 KB, 下載次數(shù): 54)
原理圖和PCB及仿真.zip (89.88 KB, 下載次數(shù): 41)
時(shí)鐘計(jì)時(shí)器元件清單.doc (34 KB, 下載次數(shù): 29)




作者: lsx116    時(shí)間: 2021-12-1 13:04
用什么軟件仿真
作者: 51大盤雞    時(shí)間: 2022-10-2 21:34
lsx116 發(fā)表于 2021-12-1 13:04
用什么軟件仿真

protues
作者: bbxyliyang    時(shí)間: 2022-10-4 21:14
lsx116 發(fā)表于 2021-12-1 13:04
用什么軟件仿真

proteus仿真軟件




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