单片机按键检测程序

单片机按键检测程序,第1张

P3=0xfe; //P3=0b1111 1110,令P30=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)

我想注释完应该能读懂,关键是要理解矩阵键盘的扫描原理。

设按钮状态(高/低)输入某个IO口;

找到读取这个IO口的数据地址;

程序不断读取这个地址,并比较相应位是否有变化;

(要有去抖处理,否则一次按键会产生多个变化)

设指示灯对应的IO口数据地址;

根据按键发生与否设置这个IO口相应位进行翻转。

如果要使用按键选择两个不同的程序,可以采用如下方法:

1、在80C51单片机的程序中定义两个不同的子程序,分别处理两个不同的功能。

2、在80C51单片机的程序中定义一个循环,用于监听按键的输入。

3、在循环中,通过读取按键的状态来判断用户按下了哪个按键。

4、如果用户按下了第一个按键,就调用第一个子程序;如果用户按下了第二个按键,就调用第二个子程序。

5、在子程序中实现具体的功能代码。

以上就是使用按键选择两个不同的程序的基本流程。

四个按键,定义如下:

KEY1 BIT P30

KEY2 BIT P31

KEY3 BIT P32

KEY4 BIT P33

按键处理程序:

;-----------------------------------

READ_KEY:

JB KEY1, K2

CALL DELAY

JB KEY1, K2

JNB KEY1, $

PUSH ACC

INC 75H

MOV A, 75H

CJNE A, #10, ZINT01

MOV 75H, #0

ZINT01:

POP ACC

JMP K_EXIT

;---------------

K2: JB KEY2, K3

CALL DELAY

JB KEY2, K3

JNB KEY2, $

PUSH ACC

INC 76H

MOV A, 76H

CJNE A, #10, ZINT01

MOV 76H, #0

ZINT01:

POP ACC

JMP K_EXIT

;---------------

K3: JB KEY3, K4

CALL DELAY

JB KEY3, K4

JNB KEY3, $

PUSH ACC

DEC 75H

MOV A, 75H

CJNE A, #255, ZINT03

MOV 75H, #9

ZINT03:

POP ACC

JMP K_EXIT

;---------------

K4: JB KEY4, K_EXIT

CALL DELAY

JB KEY4, K_EXIT

JNB KEY4, $

PUSH ACC

DEC 76H

MOV A, 76H

CJNE A, #255, ZINT04

MOV 76H, #9

ZINT04:

POP ACC

K_EXIT:

RET

;---------------

DELAY:

DJNZ R7, $

DJNZ R7, $

RET

;-----------------------------------

5步。分别是判断按键是否按下,延时消抖,再次判断按键是否按下,等待按键抬起,执行预定语句。

一种是普通io口,一种是中d的形式,普通io口是按下按键触发按键子程序案件,指程序经过一段时间的,比如20~50毫秒的延时再次毒案件,如果按键值还是会按下,那么就延时等待按键抬起按键,抬起后执行按键程序,然后返回中d也是一样的,按下按键之后进入中段读按键状态,是否还是为按一下是按一下等待延时再读等待,然后等待案件采取后执行相应的代码,然后退出总代。

以上就是关于单片机按键检测程序全部的内容,包括:单片机按键检测程序、单片机,按键控制一盏灯的程序、80C51单片机怎么用按键选择两个不同的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存