|
樓主這程序好像是3分鐘定時(shí)器,為了按鍵不干擾數(shù)碼管顯示,數(shù)碼管掃描要放在中斷中合適位置并且T0不能停,按鍵只控制計(jì)數(shù)啟停。改這樣試試。
- #include "reg51.h"
- #define uint unsinged int
- #define uchar unsigned char
- unsigned char code d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰0~9字形碼
- unsigned char timer=0,second=0,key=0,c=0,k;
- bit sign;
- void delay()
- {
- uchar i,j;
- for(i=0;i<10;i++)
- for(j=0;j<110;j++);
- }
- void show ()
- {
- switch(k)
- {
- case 0:P2=0x01;P0=~d[second/10];k++;break;
- case 1:P2=0x02;P0=~d[second%10];k++;break;
- case 2:P2=0x08;P0=~d[c%10];k=0;break;
- }
- }
- void main(void)
- {
- TMOD=0x01;
- TH0=0xee;
- TL0=0x00;
- TR0=1;
- ET0=1;
- EA=1;
- second=0;
- while(1)
- {
- if((P3&0x08)==0x00) //判斷按鍵是否按下
- {
- delay();
- if((P3&0x08)==0x00) //判斷按鍵是否按下
- {
- key++;
- switch(key)
- {
- case 1:sign=1;c=0;break;
- case 2:sign=0;break;
- case 3:key=0;second=0;break;
- }
- while((P3&0x08)==0x00);
- }
- }
- }
- }
- void int_T0( ) interrupt 1 using 0
- {
- TH0=0xee;
- TL0=0x00;
- if(sign)
- {
- timer++;
- if(timer==200)
- {
- timer=0;
- second++;
- }
- if(second==60)
- {
- second=0;
- c++;
- }
- if(c==3)
- {
- sign=0;
- key=0;
- }
- }
- show();
- }
復(fù)制代碼
|
|