Proteus 数码管显示不稳定,help。。。
[复制链接]
#define uc unsigned char #define ui unsigned int uc code num[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09}; //字符编码 uc code tab[3]={0xf6,0xed,0xdb}; //数码管选择编码,分别表示时分秒的位选码 static uc hour=23; //时 static uc minute=58; //分 static uc second=0; //秒 uc counter=0; uc i,j; uc high,low=0; uc segCode; uc ms;
void display(uc time,uc bitCode) //数码管显示 { high=time/10; low=time%10; segCode=num[high]; //计算将要送出的高低位数字 segCode=segCode<<4; segCode+=num[low]; P0=segCode; //P0口输出段码 P1=bitCode; //P1口选择点亮数码管 return; }
void delay_ms(uc ms) { while(ms--) { for(j=124;j>0;j--); } return; } void main() { TMOD=0x01; EA=1; ET0=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; P1=0xff; do { display(hour,tab[0]); //时 delay_ms(50);//延时 P1=0xff; display(minute,tab[1]); //分 delay_ms(50); P1=0xff; display(second,tab[2]); //秒 delay_ms(50); P1=0xff; }while(1); }
void timer1s(void) interrupt 1 { TH0=(65536-50000)/256; //装初值,定时50MS TL0=(65536-50000)%256; counter++; if(counter!=20) //计算定时中断次数20,即总计时1S return; else { counter=0; //1S时间到,中断计数重新置零 if(second<59) { second++; return; } else { second=0; if(minute<59) { minute++; return; } else { minute=0; if(hour<23) { hour++; return; } else { hour=0; return; } } } } }
我用的是7.5版的,不知道为什么不能动态显示,如果把延时改小了就不正常了!!!
|