查看: 2461|回复: 0
打印 上一主题 下一主题

关于Delay的用法,小心使用Delay

[复制链接]
跳转到指定楼层
沙发
发表于 2015-9-24 16:12:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
发现目前大部分的学生写程序都过分依赖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数组里面的数,就能显示不同的数了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

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