- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线反转法扫描键盘的程序如下:
KEY:
ORG 0200H MOV P1,#0FH ;从P1高4位输出0000 MOV A,P1 ANL A,#0FH MOV 20H,A ;取P1口低4位存入20H MOV P1,#0F0H ;从P1低4位输出0000 MOV A,P1 ANL A,#0F0H ;取P1口高4位存入A ORL A,20H;合成特征码 CJNE A,#0FFH,KEY1 ;无键按下则返回 RET
译键 行设为输出,且输出低电平;列设为输入,读入 列线状态。 列设为输出,且输出低电平;行设为输入。读入 行线状态。 根据两次读数,合成一个代码,即特征码(特征 码中隐含着按键的位置),建立键码与特征码关 系。
将第一步中I/O口线的传送方向反过来,即原来作 为输出的P1.7~P1.4口线作为输入线,原来作为输出 的P1.3~P1.0口线作为输出线。
下图为由4*8矩阵键盘与单片机的接口电路。8155的端口 PC工作于输出方式,用于行扫描。端口PA工作于输入方式, 用来读入列值。
采用程序扫描工作方式,扫描法步骤如下:
扫描法处理步骤
识键 消抖 译键 等待释放
PC输出00H,读PA状态。若PA口全为1,则 无键闭合;若有口线为0,则有键闭合。
有键闭合时,软件延时10~20ms,重新识键, 有键闭合时,执行下一步,否则退出。 从PC口依次使键盘的一根行线为0(该行线 所在行即为行号),输出不同的扫描字,然后 读取PA值,若PA口全为1,则无键闭合,否则, 为0的口线,其所在的列线,即为列号。
3.键值分析程序
任务 对键盘的操作做出识别并调用相应 的功能程序模块完成预定的任务。 一键一义,CPU只需根据键码执行相 应的程序,主要适用于功能比较简单的 仪器系统. 一键具有两个或两个以上的含义, 需做键语分析,按照规定的键语语法, 把由键序组合成的输入序列的含义译 出后执行相应的键盘处理程序。
(2) 多义键的键值分析程序设计
1)双义键键值分析程序 双义键
为了节省命令键的数量,经常采用双功能键。
双义键键值分 析程序流程图
2)多义键键值分析程序 一键多义时,一个完整的命令难 按键序列 以由一次按键操作完成,而需要按两 次以上的键,且这几个键的操作要遵 守一定的顺序。 在组成一个命令的按键序列中,除了取决于以前 按了什么键,还取决于当前按了什么键,因此对于多 义键的键盘管理程序,首先要判断一个按键序列(而 不是一次按键)是否已构成一个合法命令,若已构成 合法命令,则执行命令,否则等待新的按键键入。
为了保证键闭合一次,CPU仅做一次处理,在程序中需要等 到待闭合键释放后再执行相应的键处理程序。
键扫描子程序流程 图
线反转法
扫描法要逐行 扫描查询,当按下 的键是在最后一行 时,则要经过多次 扫描才能获得键值; 而如果采用线反转 法,则只要经过两 个步骤即可。线反 转法的原理如图 4.11 所示,反转法 的两个步骤如下:
功能
按键序列
[回路号]、 启动1~7路中的一路 [运行] 运行 停止当前回路的运行 [停止] [回路号] 回路号+1 [回路号]、[参 参数号+1,执行CiPi 数号] 对应的子程序
[回路号]、[参 数号] 、[加1] 当前回路的P参数+1
[回路号]、[参 数号] 、[减1]
当前回路的P参数-1
表4.4 本次按键 R(运行) S(停止) C(回路号)
值。通常第一个被按下或最后一个松开的键产生键码 。
2. 键盘工作原理与接口电路
独立式键盘、非编 码矩阵式键盘 通常采用软件的方法,逐 行逐列检查键盘状态,当发现 有键按下时,用计算或查表的 方式获得该键的键值。
内部设有键盘编码器,被按下
编码式键盘 键的键值由编码器直接给出,同时 具有防抖和解决连击的功能,具有 速度快的特点。
;停止当前回路运行子程序
;若C≠8,则转INC1
;若P≠1,则转INC2
;当前回路的P参数+1
;与INCR类似,略
CHAL:MOV MOV ADD MOV ANL CJNE SETB CLR CHA1:RET PARA:JB MOV MOV ADD JB MOV AJMP
R0,#20H A,@R0 A,#10H ;通道号+1 @R0,A A,#0F0H A,#90H,CHA1 ;判断C是否大于8 04H ;若C>8,置C=1 07H
第四章 智能仪器人机交互接口
本章内容
4.1 4.2 4.3 键盘与接口 4.4 4.5 4.6 LCD显示及接口 触摸屏 打印记录技术
LED显示与接口
键盘/显示器接口设计
重点: 1. 键盘接口电路和键值分析程序
2. 键盘/显示器接口设计 3. 笔段式、点阵式LCD显示器接口
4.1 键盘与接口
L1:
RUN: RET RUN1: RET STOP: RET INCR:JNB RET INC1:MOV MOV ANL CJNE RET INC2: …… RET DECR:
JNB
……
07H,RUN1
;若C≠8,则转RUN1
;运行子程序
……
07H,INC1 R0,#20H A,@R0 A,#0FH A,#01H,INC2
07H,C8 R0,#20H A,@R0 A,#01H 03H,PAR1 @R0,A PAR2 ;若C=8,则转C8
;参数号+1 ;若P>7,则转PAR1
PAR1: CLR PAR2: MOV ADD JNC INC KI2: JMP TAB: AJMP …… AJMP AJMP …… AJMP …… AJMP C8: …… FH: RET
中断, CPU 响应中断后对
键盘进行扫描,并在有键
闭合时转入该键的功能处 理程序。如图 4.6 所示为 一种定时扫描程序流程图, 图中,KM为去抖动标志,
KP为处理标志。
图4.6 独立式键盘定时扫描方式流程图
3)中断扫描方式
前两种方式下,CPU可能 空扫描或不能及时响应键输
入。 有键按下时,产生中断
使输出口线输出 0000 ,然后读入输入 口涎的数据(如图中1 键按下,则P1.7~ P1.4 为 1101 ),将该 数 据 存入 内 存某 一 单 元N+1中,最后将N+1 单元中的数和N单元中 的 数 拼接 起 来, 就 是 按下键的特征码。
表4.1 键特征码
特征码 行线 列线
0111 77H
信号给 CPU , CPU 响应中断, 执行中断扫描并进行按键
处理。
图4.7 中断扫描方式下的键盘接口电路
(2) 非编码矩阵式键盘
4*4矩阵式键盘结构
键盘由行线和列线组成
每条列线接上拉电阻
无键按下时,行线与列线 不相连 当某个键按下时,该按键 所在的行、列相连
图4.8 4行4列矩阵式键盘
扫描法
1011 7BH
1101 7DH
1110 7EH
0011
1011
1101 1110
B7H
D7H E7H
BBH
DBH EBH
BDH
DDH EDH
BEH
DEH EEH
由于各特征码离散性很大,不便于编程处理,故 可以对按键按顺序编号,得到顺序码。编程时可以 通过按下键的特征码查出对应的顺序码,以便于反 转处理。
例: 以一8回路温控仪为例说明多义键的键盘管理 程序设计过程。
6个按键定义 C P 回路号1~8,第8路为环境温度补偿信号,其余 为温控点的温度信号。 参数号,对应设定值、实测值、PID参数值、上 下限报警值、输出控制值等8个参数。 加 1。 减 1。 R S 运行。 停止。
△ ▽
表4.3
温控仪按键序列定义
KEY1:
MOV 20H,A ;特征码送到20H MOV DPTR,#KEYTAB MOV R3,#0FFH ;顺序码初始化 KEY2: INC R3 MOV A,R3 MOVC A,@A+DPTR CJNE A,20H,KEY3 ;未找到特征码,继续查找 MOV A,R3 ;顺序码存入A RET KEY3: CJNE A,#0FFH,KEY2;特征码表没查完,查下一个值 MOV A,#0FFH ;无键按下处理,赋A值 RET KEYTAB: DB 0EEH,0DEH,0BEH,07EH,0EDH,0DDH, DB 0BDH,07DH, 0EBH,0DBH,0BBH,07BH DB 0E7H,0D7H,0B7H,077H, 0FFH ;空键特征码
单义键
多义键
(1)单义键的键值分析程序设计
单义键 根据当前按键的键值,把控制程序转到相应 处理程序的入口,而无须知道在此之前的按 键情况。
优点
简明直观,程序处理方便。 单义键键值分析流程图
例:累加器A中为按键键值,当按键键值小于0AH 时为数字键,大于或等于0AH时为命令键。
CLR C SUBB A,#0AH ;判断是数字键还是命令键 JC DIGIT ;是数字键则转数字处理子程序 MOV DPTR,#TAB ;键处理入口地址表首地址 ADD A,A ;键值×2 JNC NADD INC DPH ;大于255时,DPH+1 NADD:JMP @A+DPTR ;转至键处理子程序入口地址 TAB: AJMP PROG ;键处理子程序入口地址表 AJMP PROG2 …… AJMP PROGn DIGIT:…… ;数字键处理,送显示缓冲区
图4.11
线反转法原理图
识键 向所有行线输出低电平 输入各列线状态
列线状态全为高电平,则无键按下; 列线状态中有低电平,则有键按下。
将P1.7~ P1.4 作为输出线, 将 P1.3 ~ P1.0 作为输入线, ,并 使P1口输出为0FH(即P1.7~ P1.4 全为 0000 )。若无键按下, 则输入口线 P1.3 ~ P1.0 为 1111 ; 若有键按下,则输入口线 P1.3~P1.0上的数据不全为 1( 若 图中 1 键按下 , 则 P1 .3 ~ P1.0 为 1110 ),将该数据存入 内存某个单元N 中。