烽火社区

标题: C51单片机动态显示时分秒问题 [打印本页]

作者: lcyacp    时间: 2015-1-20 04:02 AM
标题: C51单片机动态显示时分秒问题
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;
}
}
}
作者: klyzh2003    时间: 2015-1-29 12:32 PM
觉得用中断方式比查询方式要好。                                                                                                                                                                       




欢迎光临 烽火社区 (http://bbs.cnecport.com/) Powered by Discuz! X3.2