用定时器T1,工作方式1(16位),来定时50ms20次(12兆为1s),每一秒改变数码管上的显示(第零位为0,第一位为1,第二位为2……第七为7),每一秒只显示一位。
代码为
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code led[]={~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x6f};
uchar code duan[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char n=0,m=1;
/*void delayms(uint i)
{
uchar j;
while(i--)
for(j=0;j<125;j++);
}*/
void main()
{
TMOD=0x10;
TH1=(65535-46083)/256;
TL1=(65535-46083)%256;
TR1=1;
EA=1;
ET1=1;
while(1)
{
uchar i;
for(i=0;i<8;i++)
{
m=1;
P2=duan[i];
P0=led[i];
//delayms(120);
while(m);
}}}
void Timer1() interrupt 3
{
TH1=(65535-46083)/256;
TL1=(65535-46083)%256;
n++;
if(n==20)
{
n=0;
m=0;
}
}
用定时器来代替延时,使定时1s更准确。
请确认数码管为P几口。
代码为笔者学习公共资源,自我调试后完成,请勿搬运,如有侵权,请联系笔者删除。