- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uint x;
- sbit P34=P3^4; //T0的控制管腳
- uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //段碼表
- void delay1ms(uchar n) //1ms基準延時
- {
- uchar i;
- while(n--)
- for(i=0;i<125;i++);
- }
- void display(uint x) //顯示函數
- {
- P2=0xdf; //DS5點亮
- P0=tab[x/100]; //顯示百位
- delay1ms(5);
- P2=0xbf; //DS6點亮
- P0=tab[x%100/10]; //顯示十位
- delay1ms(5);
- P2=0x7f; //DS7點亮
- P0=tab[x%10]; //顯示個位
- delay1ms(5);
- }
- void main()
- {
- TMOD=0x06; //0000 0110 使用計數器T0的工作方式2 自動重裝
- EA=1; //開總中斷
- ET0=1; //允許計時器T0的中斷
- EX0=1; //允許外中斷INT0
- IT0=1; //INT0為負跳變觸發
- TR0=1; //啟動T0
- TH0=TL0=255; //計數器T0高8位賦值255
- //按鍵一下就溢出中斷,轉中斷服務程序
- while(1){ //無限循環,不停的將TL0計數結果送向P1口
- //x=TL0
- display(x);
- }
- }
- void clear0() interrupt 0 //INT0中斷函數
- {
- x=0;
- }
- void key_counter() interrupt 1 //定時器中斷
- {
- if(P34==0){
- delay1ms(20); //消陡
- if(P34==0){
- x=(x+1)%1000;
- }
- }
- }
復制代碼
|