51單片機時鐘完整資料
0.png (37.25 KB, 下載次數(shù): 135)
下載附件
2017-4-26 02:18 上傳
時鐘計時器元件清單 序號 | | | | | 1 | | | | | 2 | | | | | 3 | | | | | 4 | | | | | 5 | | | | | 6 | | | | | 7 | | | | | 8 | | | | | 9 | | | | | 10 | | | | | 11 | | | | | 12 | | | | | 13 | | | | | 14 | | | | |
0.png (49.33 KB, 下載次數(shù): 111)
下載附件
2017-4-26 02:18 上傳
單片機源程序:
- #include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit K1=P1^0; //功能鍵
- sbit K2=P1^1; //加1鍵
- sbit K3=P1^2; //減1鍵
- sbit K4=P1^3; //備用
- sbit beep=P1^4;// 蜂鳴器輸出控制
- uchar t,m,f,s;
- uchar num;
- uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
- 0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0-F共陰極數(shù)碼管
- /*uchar code table0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,//共陽極段碼
- 0x82,0xf8,0x80,0x90};*/
- uchar code tablewe[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //控制位選
- void delayms(uint z) //延時z ms
- {
- uint x,y;
- for(x=z;x>0;x--) for(y=110;y>0;y--);
- }
- void di() //蜂鳴器響
- { beep=0; delayms(100); beep=1; }
- void display(uchar n,uchar c,uchar d) //分離變量
- {
- uchar a,b;
- a=n/10; //十位
- b=n%10; //個位
- P0=table[a]; P2=tablewe[c]; delayms(2); //十位顯示
- P0=table[b]; P2=tablewe[d]; delayms(2); //個位顯示
- }
- void init()
- { t=0; m=0; f=0; s=0;
-
- TMOD=0X01; //定時器T0工作于方式1
- TH0=(65536-50000)/256; //晶振為12MHZ
- TL0=(65536-50000)%256; //定時時間為50ms
- EA=1; //開中斷
- ET0=1; //開T0中斷
- TR0=1; //啟動T0
- }
- void key() //按鍵掃描
- {
- if(K1==0) //功能鍵
- {
- delayms(10); //延時消抖
- if(K1==0) //再判
- { di(); //調(diào)蜂鳴器響
- num++; //功能鍵按下次數(shù)加1
- while(!K1);//等待功能鍵釋放
- if(num==1)TR0=0; //關閉T0,進入調(diào)時模式
- if(num==4)
- {
- num=0; TR0=1; //啟動T0
- }
- }
- }
- if(K2==0) //加1鍵
- {
- delayms(10);//延時消抖
- if(K2==0)
- { di(); //調(diào)蜂鳴器響
- while(!K2); //等待加1鍵釋放
- if(num==1){ m++; if(m==60)m=0; display(m,6,7); } //秒加1,顯示秒
- if(num==2){ f++; if(f==60)f=0; display(f,3,4); } //分加1,顯示分
- if(num==3){ s++; if(s==24)s=0; display(s,0,1); } //時加1,顯示時
- }
- }
- if(K3==0) //加1鍵
- {
- delayms(10);
- if(K3==0)
- { di(); //調(diào)蜂鳴器響
- while(!K3); //等待減1鍵釋放
- if(num==1){ m--;if(m==-1)m=59;display(m,6,7);} //秒減1,顯示秒
- if(num==2){ f--;if(f==-1)f=59;display(f,3,4);} //分減1,顯示分
- if(num==3){ s--;if(s==-1)s=23;display(s,0,1);} //時減1,顯示時
- }
- }
- }
- void main()
- {
- init();//初始化
- while(1)
- {
- key(); //調(diào)鍵掃描
- P0=0x40; //顯示-
- P2=0xdb;
-
- delayms(2); //延時
- display(s,0,1); //秒顯示
- display(f,3,4); //分顯示
- display(m,6,7); //時顯示
- }
- }
- void T0_time() interrupt 1
- {
- TH0=(65536-50000)/256; //重賦初值
- TL0=(65536-50000)%256;
- t++; //中斷次數(shù)加1
- if(t==20) //到1秒
- {
- t=0; //計數(shù)清0
- m++; //秒加1
-
- …………限于本文篇幅 余下代碼請從51電子黑下載附件…………
復制代碼
下載:
源程序.zip
(21.97 KB, 下載次數(shù): 54)
2017-4-25 17:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
原理圖和PCB及仿真.zip
(89.88 KB, 下載次數(shù): 41)
2017-4-25 17:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
時鐘計時器元件清單.doc
(34 KB, 下載次數(shù): 29)
2017-4-25 17:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|