51单片机八位共阴数码管动态扫描显示时间

/**********************************************************
程序设计:51单片机八位共阴数码管动态扫描显示时间
要求:
**********************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED0=P1^0;
sbit LED1=P1^1;
sbit LATCHDUAN=P2^0;
sbit LATCHWEI=P2^1;
void Delay(uint t);
uint overflow_count=0;
uchar code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char h1=0,h2=0,m1=0,m2=0,s1=0,s2=0;
//主程序
void main()
{
LED0=0;
LED1=0;
TMOD=0x01;
TH0=0xD8;
TL0=0xF0;
//启动定时器,开中断
TR0=1;
ET0=1;
EA=1;

while(1)
{
//hour
P0=duan[h1];
LATCHDUAN=1;
LATCHDUAN=0;
P0=wei[0];
LATCHWEI=1;
LATCHWEI=0;
Delay(200);
P0=duan[h2];
LATCHDUAN=1;
LATCHDUAN=0;
P0=wei[1];
LATCHWEI=1;
LATCHWEI=0;
Delay(200);
//-
P0=0x40;
LATCHDUAN=1;
LATCHDUAN=0;
P0=wei[2];
LATCHWEI=1;
LATCHWEI=0;
Delay(200);
//minute
P0=duan[m1];
LATCHDUAN=1;
LATCHDUAN=0;
P0=wei[3];
LATCHWEI=1;
LATCHWEI=0;
Delay(200);
P0=duan[m2];
LATCHDUAN=1;
LATCHDUAN=0;
P0=wei[4];
LATCHWEI=1;
LATCHWEI=0;
Delay(200);
//-
P0=0x40;
LATCHDUAN=1;
LATCHDUAN=0;
P0=wei[5];
LATCHWEI=1;
LATCHWEI=0;
Delay(200);
//second
P0=duan[s1];
LATCHDUAN=1;
LATCHDUAN=0;
P0=wei[6];
LATCHWEI=1;
LATCHWEI=0;
Delay(200);
LATCHWEI=1;
P0=wei[7];
LATCHWEI=0;
LATCHDUAN=1;
P0=duan[s2];
Delay(200);
LATCHDUAN=0;
//一秒
if(overflow_count==100)
{
if(s2<9){s2=s2+1;}
else s2=0;
LED0=!LED0;
overflow_count=0;
}
}
}
//延时函数
void Delay(unsigned int t)
{
while(--t);
}

//定时器0中断服务子程序
void timer0_ISR(void) interrupt 1 using 1
{
//定时器初始重载
TH0=0xD8;
TL0=0xF0;
overflow_count++;
}

1.为什么第八位一直都是0,而不是像电子时钟一样?
2.但是我去掉任意一位后第八位工作就可以像时钟一样,这是为什么?

主循环那一大圈执行的时间大于10ms。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-08-22
最后一位 段码 与 位码 反了,并且有点乱。
第2个回答  推荐于2017-08-22
你控制顺序写错了,应该先写位码,再写段码。你写反了。本回答被网友采纳
第3个回答  2017-08-11
是做实物,还是仿真,这仿真的话,程序是有区别 的。
另外,图太小,看不清楚,那个芯片是74HC573吗?

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网