|
C51单片机动态显示时分秒问题 定时器为20ms,溢出50次为1s,实际很快不准,几乎全部段都点亮,请大侠帮忙用试验板试下,实在没折了,谢谢: #include unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};//0-10数字 unsigned char code p1[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位选号,从P1.5---P1.0 unsigned char second,minute,hour,temp,flag; unsigned int minisecond; unsigned char buffer[]={0,0,0,0,0,0};//时间缓存 sbit P30=P3^0; sbit P31=P3^1; sbit P32=P3^2;
void main() { TMOD="0x01"; TH0=(65536-20000)/256;// TL0=(65536-20000)%256;//定时20ms TR0=1; P0=0xf9; while(1) {if(TF0==1) { minisecond++; if(minisecond==50) {minisecond=0; second++; if(second==60) {second=0; minute++; if(minute==60) {minute=0; hour++; if(hour==24) {hour=0; } } } } flag++; if(flag==6) {flag=0;} P1=p1[flag];//循环点亮从P1.5到P1.0 temp++; if(temp==6) {temp=0;} P0=table[buffer[temp]];//循环送秒,分,时到P0口。 buffer[0]=second%10; buffer[1]=second/10; buffer[2]=minute%10; buffer[4]=minute/10; buffer[4]=hour%10; buffer[5]=hour/10; } } } |
|