查看: 81|回复: 1
打印 上一主题 下一主题

C51单片机动态显示时分秒问题

[复制链接] qrcode

562

主题

597

帖子

1764

积分

金牌会员

Rank: 6Rank: 6

积分
1764
楼主
跳转到指定楼层
发表于 2015-1-20 04:02 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;
}
}
}
回复

使用道具 举报

0

主题

79

帖子

164

积分

注册会员

Rank: 2

积分
164
沙发
发表于 2015-1-29 12:32 PM | 只看该作者
觉得用中断方式比查询方式要好。                                                                                                                                                                       
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表