下面是我自己用proteus搭建的一個簡單的單片機開發板的平臺,功能不是很多。但是也夠用了,程序是實現99倒計時的,下面是仿真開發板的原理圖:
所有資料下載(包含99倒計時的程序):
定時器控制電路.zip
(46.12 KB, 下載次數: 13)
2016-9-27 18:36 上傳
點擊文件名下載附件
源程序:
- #include<reg52.h>
- typedef unsigned char uchar;
- typedef unsigned int uint;
- uchar code Number[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };
- sbit digt1=P2^4;
- sbit digt2=P2^5;
- sbit digt3=P2^6;
- sbit digt4=P2^7;
- sbit led=P2^0;
- sbit key0=P3^4;
- sbit key1=P3^3;
- sbit key2=P3^5;
- sbit buzz=P3^2;
- uchar min,sec=0,counter=0,shan=0;
- void delay(uint n) //延時
- {
-
- while(n--);
- }
- void sound() //蜂鳴器響
- { uchar i;
- uint j;
- buzz=0;
- for(i=0;i<255;i++);
- buzz=1;
- for( j=0;j<5000;j++);
- }
- void timer0()interrupt 1 //中斷函數
- { counter++;
- led=0;
- if(counter==20)
- { counter=0;
-
- if(sec==0)
- { sec=60;
- if((min==0)&(sec==60))
- { min=1;sec=1;delay(1000);led=1;TR0=0;}
-
- min--;}
- sec--;
-
- }
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- }
- void display(uchar m,uchar s ) //數碼管掃描
- { digt1=0;
- P0=Number[s%10];
- delay(1000);
- digt1=1;
- digt2=0;
- P0=Number[s/10];
- delay(1000);
- digt2=1;
- digt3=0;
- P0=Number[m%10];
- delay(1000);
- digt3=1;
- digt4=0;
- P0=Number[m/10];
- delay(1000);
- digt4=1;
- }
- void keyscan() //鍵盤掃描
- {
- if(key1==0)
- { delay(10000);
- if(key1==0)
- min++;
- sound();
- if(min>99)
- min=0;
- while(!key1);
- }
- if(key0==0)
- { delay(10000);
- if(key0==0)
- if(min>0)
- { min--;
- sound(); }
- if(min<=0)
- min=0;
-
- while(!key0);
- }
- if(key2==0)
- { delay(10000);
- if(key2==0)
- TR0=1;
- sound();
- while(!key2);
- }
- }
- void main() //主函數
- {
- TMOD=0X01; //定時器工作方式配置
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TR0=0;
- ET0=1;
- EA=1;
- led=1;
- while(1)
- {
- display(min,sec);
- keyscan();
-
- }
- }
復制代碼 |