足球補時牌仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (20.99 KB, 下載次數(shù): 17)
下載附件
2018-10-15 17:07 上傳
0.png (15.47 KB, 下載次數(shù): 19)
下載附件
2018-10-15 17:07 上傳
單片機源程序如下:
- #include<reg51.h> //51單片機頭文件
- #include<intrins.h> //51庫函數(shù)
- #define uchar unsigned char //宏定義
- #define uint unsigned int
- sbit duan = P2^0;//段選接P2.0引腳
- sbit wei = P2^1; //位選接P2.1引腳
- sbit BUZZ = P2^3;
- char second = 0; //計數(shù),時間(秒鐘)
- char minute = 0; //計數(shù),時間(分鐘)
- /****
- 共陰級
- table[10]表示不顯示
- table[11] 表示“-”
- **************/
- uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d,
- 0x7d, 0x07, 0x7f, 0x6f, 0x00, 0x40};
- uchar s[8];
- uchar delay = 1;
- uchar n = 0;
- uint th,tl;
- uchar speak = 0; //標識蜂鳴器是否開始發(fā)聲
- void delayms(uint t) //延時函數(shù)
- {
- uint i,j;
- for(i=0;i<t;i++)
- for(j=0;j<110;j++);
- }
- void init()
- {
- EA = 1; //開全局中斷
- EX0 = 1;//INT0中斷允許
- IT0 = 1;//觸發(fā)方式為下降沿觸發(fā)
- EX1 = 1;//INT0中斷允許
- IT1 = 1;//觸發(fā)方式為下降沿觸發(fā)
- TMOD = 0x19;
- TH0 = 0x4C; //給定初值
- TL0 = 0x00;
- TH1 = 0xff; //給定初值
- TL1 = 0x00;
- ET0 = 1; //定時器中斷打開
- ET1 = 1;
- TR0 = 0; //不啟動定時器中斷
- TR1 = 0; //
- }
- void fun()
- {
- s[0] = table[second%10];
- s[1] = table[second/10];
- s[2] = table[11];
- s[3] = table[11];
- s[4] = table[minute%10];
- if(minute/10!=0) s[5] = table[minute/10];
- else s[5] = table[10];
- }
- void show()
- {
- uchar i;
- uchar temp = 0xdf;
- fun();
- for(i=0;i<6;i++){
- duan = 0;
- wei = 0;
- P0 = 0x00;
- duan = 1;
- P0 = s[i];
- duan = 0;
- P0 = 0xff;
- wei = 1;
- P0 = temp;
- wei = 0;
- temp = _cror_(temp, 1);
- TH1 = 0xff;
- TL1 = 0x00;
- TR1 = 1; //延時
- while(delay<1);
- TR1 = 0;
- delay = 0;
- }
- }
- void main()
- {
- init();
- while(1){
- show();
- if(speak==1){
- duan = 1;
- P0 = table[10];
- duan = 0;
- P0 = 0xff;
- wei = 1;
- P0 = 0x01;
- wei = 0;
- TR1 = 1;
- th = (65535-50000)/256;
- tl = (65536-50000)%256;
- TH1 = th;
- TL1 = tl;
- delayms(10000);
- TR1 = 0;
- speak=0;
- }
- }
- }
- void IN_T0() interrupt 0
- {
- minute++;
- if(minute > 19)
- minute=19;
- }
- void IN_T1() interrupt 2
- {
- TR0 = 1;
- }
- void timer0() interrupt 1
- {
- TH0 = 0x4C; //給定初值
- TL0 = 0x00;
- n++;
- if(n==20){
- n = 0;
- if(minute ==0 && second==0){
- TR0 = 0;
- speak = 1;
- }
- else if(second==0){
- minute --;
- second = 59;
- }
- else{
- second--;
- }
- }
- }
- void timer1() interrupt 3
- {
- if(speak==1)
- {
- BUZZ = ~BUZZ;
- TH1 = th; //給定初值
- TL1 = tl;
- }
- delay=1;
- }
復制代碼
所有資料51hei提供下載:
足球補時牌.zip
(71.67 KB, 下載次數(shù): 27)
2018-10-15 16:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|