按键检测程序谁了解?
答案:3 悬赏:70
解决时间 2021-10-13 05:59
- 提问者网友:城市野鹿
- 2021-10-12 06:14
按键检测程序谁了解?
最佳答案
- 二级知识专家网友:不甚了了
- 2021-10-12 07:33
你好,按键检测程序:while(key)num++;假设有按键的时候num加加根据按下的次数确定当前应该显示哪个花样然后检测完之后用switch-case根据num执行某个花样的流水灯所有的都加在一个while(1)的死循环里面while(1){ char num=0;while(key)这个是你定义的按键端口 num++; switch(num) { case 0:花样1; case 1:花样2; }}我觉得这样写就行了原理一样吧先检测在执行因为程序每次只能执行一个地方
全部回答
- 1楼网友:独行浪子会拥风
- 2021-10-12 08:41
按键检测程序:
P3=0xfe; //P3=0b1111 1110,令P3.0=0,同时令高四位为高电平,作好读端口准备(51IO特点)
temp=P3; //读回P3口的状态
temp=temp&0xf0; //temp&1111 0000,0与任何数结果为0,把temp变量的低四位屏蔽了,高四位因为任何数与1等于它本身,所以把高四位对应的端口状态读进来。
while(temp!=0xf0) //上步处理后,高四为不全为1,说明有按键按下(结合矩阵键盘的电路结构才能理解,这里不方便上图)
{
delay(5);
temp=P3;
temp=temp&0xf0;//这三句跟上面重复,功能是软件消抖
while(temp!=0xf0) //延时一段时间后判断还有按键按下,说明是真有按键按下,进入按键扫描与键值的判断,否则可能是意外抖动引起的,就不进行按键扫描。
{
temp=P3;
switch(temp).....
我想注释完应该能读懂,关键是要理解矩阵键盘的扫描原理。
- 2楼网友:鱼芗
- 2021-10-12 07:39
应该是BIOS的16H中断的1号功能,调用该中断是不等待的,它是读键盘缓冲区中的内容的.使用方法如下:
mov ah,1
int 16h
返回码如下:
ZF=1时:键盘缓冲区为空,即以前没有输入;
ZF=0时:键盘缓冲区中有内容,并返回当前键盘指针所指的输入值:
AL=字符码(ASCII)
AH=扫描码.
返回该AX值后,键盘指针没有移到下续单元.下次再调用时还是返回这一个输入值.所以必须与INT 21H配合使用.下面提供一个子程序:
;==========================================
kbtest proc near
mov ah,1
int 16h
jnz kbtest_1
mov ax,0ffh
stc
ret ;没有内容自动返回
kbtest_1:
mov ah,7
int 21h
mov ah,0
cmp al,0
jnz kbtest_2 ;输入的是ASCII码(AL)
mov ah,7
int 21h ;取扩展ASCII码(非字符码的功能键)
mov ah,1
clc
kbtest_2:
ret
kbtest endp
;==================================
子程序的返回值如下:
CF=1时:无输入;
CF=0且AH=0时:AL=输入的ASCII码(字符码);
CF=0且AH=1时:AL=输入的扩展ASCII码(功能键)
如果你想使用扫描码的话,只要将该子程序改一下就可以了.但一般情况下使用扩展ASCII,因为通用性强.
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯