51单片机,定时中断与键盘扫描的问题。

51单片机,定时中断与键盘扫描的问题。,第1张

-----------------------------------------------------------

从上面的这段代码来看,你在主函数里调用了扫描函数扫描按键,软件置TF0=1产生定时中断,而事实上,T0已在处理在定时中断的当中,然而中断函数使用了下面的语句:

while(keybuf!='E')

{

move(0x00);//移动LCD光标

getkey();

wrdata(keybuf);//向LCD当前位置写入键盘值,此处scan()无效

}

这些语句很容易让程序处在中断当中而无法退出,建议你在中断当中用if语句适合。

同时,我建议你在编写程序时注意程序的结构,尽量模块化,一个函数在中断外部调用了,就不要在中断外部再调用,中断当中注意使用while语句,防止处在中断当中退不出来或不确定状态。

------------------------------------------------

米德电子-Mide

Technology研发中心

>

这个我知道有个类似的,

你的意思就是按1下,执行函数1;按第2下,执行函数2

你在检测按键按下的时候。设置个变量sum=0;按1次就sum++

然后就可以区分按下两次的不同了。

void keyscan()

{

if(s==0)

{

delay(5);

if(s==0)

{

while(!s);

snum++;

}

}

if(snum==1)

{

TR0=0;

ET0=0;

}

if(snum==2)

{

TR0=1;

ET0=1;

snum=0;

}

}

比如,我写的一个暂停的函数,按1下,执行一个函数1,暂停;

再按1下,执行另一函数2,开始工作。

不懂的QQ358357912说吧 ,另外你发问题不给分,这个态度是不对滴^-^

定义一个按键缓冲区

用普通的按键扫描程序,当扫描到有按键按下的时候。按键键的值写入缓冲区。继续扫描直到完成。

然后返回缓冲区地址就可以得到多个按键的数据了。

这样只要定义16字节的缓冲区全部按键都能检测到。(一般不需要那么多6个足够)

还有一种方式 是 如果只返回2个按键的话。

可以这样

常规按键扫描 返回范围在0-15也就是0-F

读取到一个值后把这个值左移4位

再继续读取。当读取到第二个值的时候与上第一个值。就能获取2个按键的值了。

本人是学C的,但还看得懂汇编语言。

MOV P2,A 是把扫描码赋给P2口,其实是赋给P2口的低四位,进行扫描;

MOV A,P2 是读取P2口的值,后面一句把低四位屏蔽了,最终还是读取了高四位

以上就是关于51单片机,定时中断与键盘扫描的问题。全部的内容,包括:51单片机,定时中断与键盘扫描的问题。、51单片机按键键盘抖动的实现以及如何设置键盘中的复合键、51单片机矩阵键盘程序问题求解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10139548.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存