工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->光电电路图->其他光电实用电路图->单片机电路中输入键的扩展

单片机电路中输入键的扩展

作者:dolphin时间:2016-09-08

笔者在实际制作中采用另外一种结构的按键输入方式,可使键的数量增加不少。例如同样使用8数据位总线可以将键增加到28个,最多可达36个,读键程序比矩阵式还简单,不知其他读者是否也用过类似形式的键盘电路。所以本文就电路原理和相关程序作些简述,目的是与读者共同探讨电路的实用性。

电路如图所示,这里假设硬件使用的是MCS-51系列的P1口。读键程序流程图如图所示,读入键值前先向P1口写数据,即扫描值,使该端口始终有一位清0,其它位均为1,然后将P1 口数据读入累加器A。如果无键按下则读入的数据扫描值相等,即八位二进制数中仅有一位为0,此时标志寄存器的奇偶位P为1,程序按无键按下处理。如果有键按下则读入的数据必然有两位为0。此时奇偶位P为0,程序将键值临时存入B寄存器中,经延时去抖动后再读P1口数据,A与B寄存器比较是否相等,是则按有键闭合处理,否则按无键闭合处理。每完成一次键扫描无论有无键按下扫描值都左环移一位再写入P1口,循环判断所有的输入键。按键闭合确认后键值仍保存在A中,主程序进入判断转向程序寻找与键值对应的目标。

为了便于程序阅读和少出差错。编程时使用与按键排列一致的二进制数。程序中的Q1至Q28表示的是要执行的程序,根据设计者的需要可用转移、调用指令。但执行完子程序后必须能够返回原处或主程序入口处。

本电路用于AT89C2051芯片时应注意P1.0和P1.1内部无上拉电阻,需在外面分别对正电源连接10K左右的电阻,否程序无法正常工作。

如果需要更多的按键可用GND分别对P1口每个I/O端连接一个按键,这样总共是36个键,主程序在判断 完上述的28个键后将P1口全部置位,逐位判断是否为零即可,程序简单,这里不再赘述,读者可自己编写,键扫描程序如下。

IN EQU P1

STORE EQU R5

TEMPl EQU R6

TEMP2 EQU R7

ORG 0000H

AJMP SETUP

ORG 0020H

SETUP:MOV STORE.#11111110B:

:键扫描主程序

MAINl:MOV lN,STORE:扫描值送定义的端口

MOV A,IN:端口数据读入A

JB P,MAIN2:奇偶标志是否为1

MOV B,A :否则键值送B暂存

ACALL DELAY:延时去抖动

MOV A.1N :再读端口数据送A

CJNE A,B,MAIN2:键值是否与第一次相等

AJMP LOOKl:是则确定有键闭合

MAIN2:MOV A,sTORE;当前扫描值送A

RL A:A左环移1位

MOV STORE,A:送回扫描值存储器

AJMP MAIN1 :转主程序入口

:键值判断执行程序

LOOKl:CJNE A.#11111100B.LOOK2

LCALL Q1

AJMP MAIN2

LOOK2:CJNE A.#11111010B.LOOK3

LCALL Q2

AJMP MAIN2

LOOK26:CJNE A.#10011111B.LOOK27

LCAI—L Q26

AJMP MAIN2

LOOK27:CJNE A.#01011111B.LOOK28

LCALL Q27

AJMP MAIN2

LOOK28:CJNE A.#00111111B.LOOK29

LCALL Q28

LOOK29:AJMP MAIN2

:延时程序

DELAY: MOV TEMPl.#01FH

DELAYl:MOV TEMP2.#0FFH

DINZ R7.$

DJNZ R6,DELAYl

RET

END





评论

技术专区