1、键盘接口电路
单片机的键盘接口电路有多种形式,最常用的是键盘扫描电路,如图8-17所示。图8-17中的键盘扫描电路是由3根行线与8根列线组成。3根行线的左边接8155的pc口的3个引脚pc.0、pc.1、pc.2,右边通过5k电阻接5v电源。8根列线通过反相器接8155b口(即位选口,地址为ff22h)。在行线与列线的交叉处设置一个按键,因此该单片机的键盘由3×8=24个按键组成。倒数第一、二行共16个数字键(0~f),第三行为8个功能键。从8155b口输出8位低电平给8根列线d0~d7,若某行有键按下,则该行与列线接通为低电平。若某行无键按下,则该行保持高电平。由此可见,测试pc.0、pc.1、pc.2的状态就可以知道有无键按下,此外通过扫描方式可取出按键的键值。按键键值:0~f为数字键键值,10h~17h为功能键键值。
2、键盘扫描程序
(1)入口地址:key-scan,
(2)作用:判有无键按下
(3)出口状态:(a)=0表示无键按下,
(a)≠0表示有键按下。
(4)源程序
3、取键值程序
(1)名称与入口地址:key-get。
(2)作用:取按键键值。
(3)使用寄存器:a、r2、r4。
(4)出口状态:(a)=按键键值,0~f为数字键,10h~17h为功能键。
(5)程序设计基本思想
①调用键盘扫描程序判有无键按下,若无键按下则继续判断,若有键按下则取按键键值。在介绍取按键键值的方法之前先介绍列扫描码的概念。
②列扫描码
列扫描码共8位,其中有1位为0,其它各位为1,初始值为11111110,该初始值存放在r2中,如图8-27所示,0所在列的列号j存放在r4中,当第j列有键按下时,按键所在行为低电平0,通过查行值是否为0,可确定按键的行号与列号,并据此算出按键键值。因此列扫描码的作用是确定第几列有键按下。
③送列扫描码
列扫描码由r2通过累加器a传送给8155b口,并由8155b口输出给键盘电路的8根列线。8根列线中,第j列为0,其余各列为1。
④取行值
从pc口的pc.0~pc.2读行信号,若读出的行值均为1,说明第j列无键按下,将r2中的扫描码左移1位,并将列号j存储寄存器r4加1,转③重新送扫描码,查下一列有无键按下。若读出第i行的行值中为0,说明在第i行与第j列处有键按下,应计算键值。
⑤计算键值
若读出第i行为0,则说明第i行与第j列处有键按下,由扫描码中0所在列号j与行值为0的行号i可计算出按键键值:
键值=i×8+j。(式中i=0~2,j=0~7)
例如:第0列与第0行处的按键按下,键值=0×8+0=0,即数字0键。
第0列与第1行处的按键按下,键值=1×8+0=8,即数字8键。
第0列与第2行处的按键按下,键值=2×8+0=10h。
由图8-27可看出,上述计算公式是完全正确的。
因为所取键值存放在累加器a中,列号j存放r4中,第i行为0可通过pc.i=0进行判断,所以按键键值计算公式可改为
(6)流程图:如图8-29所示。
(7)源程序
注意:在调用键盘程序的主程序中,必须将8155初始化为a、b口基本i/o输出方式,c口为基本输入方式。然后才能调用上面取键值程序。
思考题:如何使0~7键与8~f键的键值互换,即按0键时显示8,按8键时显示0等?提示:将取键程序key_get中的指令①与②互换即可。
首份《数据基础设施安全研究报告》发布 存储安全被高度重视
基于DSP的高压电源设计
ARM mbed平台再添助力 催化物联网发展
SwitchLite正式发布 售价约合人民币1262元
中国面板厂持续扩产 OLED面板迎来发展良机
单片机键盘接口技术的基础知识
三星TFPRO64G存储卡评测 有着顶级的速度表现但是价格略显昂贵
全项目土壤肥料养分速测仪有哪些功能特点
一文了解推动自动驾驶汽车发展的四项技术趋势
小米MIX2S评测 值不值得买
微机总线的种类
NAS网络存储器的网络协议
FPGA排序-冒泡排序(Verilog版)介绍
详解业界首个Wi-Fi性能测试标准
过程质量保证工程师的工作范围是什么
新唐科技W584A042剑姬
华为成为全球电信设备制造领域的老大
LoRa节点设备如何上电并入网到阿里云物联网平台
过采样4:提高ADC分辨率实例(终篇)
负反馈种类及其优点