就是一个24小时的时钟,我编的代码
#include<reg52.h>
#include<intrins.h>
unsigned char code smg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay();
//int zhongduan() interrupt 1;
int a=0,b=0,c=0,d=0,e=0,f=0,t=0 ;
void delay()
{
int g,h;
for(g=100;g>0;g--)
for(h=110;h>0;h--);
}
void main()
{
TMOD=0X01;
TR0=1;
TH0=0X3C;
TL0=0XB0;
EA=1;
ET0=1;
while(1)
{P2=0x01;
P1=smg[a];
delay();
P1=0;
P2=0x02;
P1=smg[b];
delay();
P1=0;
P2=0x04;
P1=smg[c];
delay();
P1=0;
P2=0x08;
P1=smg[d];
delay();
P1=0;
P2=0x10;
P1=smg[e];
delay();
P1=0;
P2=0x20;
P1=smg[e];
delay();
P1=0;
}
}
void zhongduan() interrupt 1
{
TH0=0X3C;
TL0=0XB0;
t=t+1;
if(t>21)
{f=f+1;
if(f>9)
{f=0;
e=e+1;
{if(e>5)
e=0;
d=d+1;
{if(d>9)
d=0;
c=c+1;
{if(c>5)
c=0;
b=b+1;
{if(b>4)
b=0;
a=a+1;
{if(a>2)
a=0;}}}}}}}}
还有
电路图,就是P1脚控制数字,P2脚控制用哪个数码管,P2引脚连着数码管的共阳,通过控制共阳达到目的,
不过用KEIL
仿真的时候,数字钟的数字乱跳,加快数码管切换的速度就不亮了。
每个数码管的该显示的极限数字都很正常,比如24小时的就最高显示2和4,
我可以调延时,但是显示效果还是不完整,再低,就直接不显示了。
我现在把后面的IF语句全部都拆开后,套上过括号就调试好计时部分了,不过动态扫描的显示还是很烂,是proteus的问题吗?延时我调到10ms还是没法做到完整显示
一周热门 更多>