您的位置 首页 模拟

单片机中按键“一次”处理的优化办法

以前做单片机的时候总会遇到一个问题就是:在单片机的键盘输入的键盘一次处理时,原来的做法通常是通过延时等待键盘的松开,所以单片机就会

曾经做单片机的时分总会遇到一个问题便是:在单片机的键盘输入的键盘一次处理时,本来的做法通常是经过“延时”等候键盘的松开,所以单片机就会停留在此处,其他的程序进行不下去。会呈现显现不正常、无呼应等过错。

曾经的程序如下:

其间p10为P10端口做键盘输入,p10= =0为按下,调用的delay程序为

void delay(unsigned int cnt)

{

unsigned char i;

while(cnt–!=0)

for(i=100;i!=0;i–);

}

键盘扫描子程序如下:

void scankey()//扫描按键

{

if(p10==0)//p10口按键及处理程序

{

delay(100);//键盘防颤动

if(p10==0)

{

do delay(10);//假如键盘一向按下则一向“延时”等候松开

while(p10==0);

TR0=!TR0;//松开时相应

}

}

}

所以从以上程序看假如程序一向按下则单片机一向会在延时程序等候,占用了整个单片机

我想经过flag能够很好的处理这个问题

bit flag=0;界说标志

以下是键盘处理程序:

void scankey()//扫描按键

{

if(p10= =0&&flag= =0)//p10口按键及处理程序,其间flag假如为1就不必再扫描

{

delay(100);

flag=1;

delay(5);

}

if(p10= =1&&flag= =1)//假如p10为1,flag为1阐明现已被按下并抬起

{

TR0=!TR0;//松开时相应

flag=0;//标志清零,为下次按键做准备(其实为一次处理)

}

}

程序现已仿真,没改正的之前,长按按键数码管只要最终一个亮。

改正后长按按键,数码管显现正常。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/moni/255486.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部