发现目前大部分的学生写程序都过分依赖Delay去延时处理,说实话这是中国教育的悲哀,误人子弟啊,写下这篇帖子希望对即将毕业的你们有点点的帮助。
出来工作之后你会发现很多时候根本不允许使用Delay,特别是延时几mS的。
下面是一个不使用Delay的数码管显示函数
uchar date[8];
void main(void)
{
uchar temp=15;
init(); //初始化
while(1)
{
if(flag)
{
flag=0;
display(); //显示函数
read_key();
}
}
}
void display(void)
{
static uchar i;
uchartemp=0xff;
code uchar Duan_CODE[] ={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
code uchar SEG_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
P2&=0xf0; //低四位清零 ,灯全灭,防止残影
P1=SEG_CODE[date[i]];
temp&=Duan_CODE[i];
P2|=temp;
i++;
if(i>7)i=0;
}
void Time0(void) interrupt 1 // using 0
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
flag=1;
}
void init(void)
{
P0=0xff; //关所有灯
P1=0xff;
P2=0xff;
TMOD=0x01; //定时/计数器0工作于方式1
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
ET0=1; //允许定时/计数器0 中断
TR0=1; //启动定时/计数器0 中断
EA=1; //开总中断
}
没有使用任何Delay轻松实现8个数码管动态扫描
只需要修改date数组里面的数,就能显示不同的数了。
|