资源描述:
《情境五 应用矩阵键盘》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、单片机学习领域情景6应用矩阵键盘请分组单步执行数码控制程序从每组中请一个同学回答数码控制程序中所用指令的作用通过程序执行过程进一步讲解子程序调用和堆栈的概念重点堆栈的操作过程单片机与键盘接口单片机与键盘接口按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。按键按照接口原理可分为编码键盘与非编码键盘两类。这两类键盘的主要区别是识别键符及给出相应键码的方法。编码键盘主要是用硬件来实现对按键的识别,硬件结构复杂;非编码键
2、盘主要是由软件来实现按键的定义与识别,硬件结构简单,软件编程量大。这里将要介绍的独立式按键和矩阵式键盘都是非编码键盘。单片机与键盘接口分类:一、独立式按键独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。单片机与键盘接口二、矩阵式按键通常,矩阵式键盘的列线由单片机输出口控制,行线连接单片机的输入口。单片机与键盘接口按键的去抖机械式按键在按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来,抖动时间一般为510
3、ms,在触点抖动期间检测按键的通与断状态,可能导致判断出错。键盘输入中要解决的问题:一、按键的确认:即判断按键是否闭合。通过检测电平的高低状态,就能确认是否有键按下。二、按键抖动的消除按键较多时,常采用软件方法消除抖动。即在第一次检测到有按键被按下时,执行一段延时12-15ms的子程序后,再确认该键电平是否仍保持闭合状态电平,如保持为闭合状态电平就可确认真正有键按下,从而消除抖动的影响。单片机与键盘接口按键的去抖(a)检测按键(b)释放按键按键去抖流程图单片机与键盘接口矩阵式按键键盘编程扫描法识别按键一般应包括以
4、下内容:(1)判别有无键按下。(2)键盘扫描取得闭合键的行、列位置。(3)用计算法或查表法得到键值。(4)判断闭合键是否释放,如没释放则继续等待。(5)将闭合键的键值保存,同时转去执行该闭合键的功能。开发板按键矩阵由4行4列组成4行:R1、R2、R3、R4,接P3.0、P3.1、P3.2、P3.3。4列:C1、C2、C3、C4,接P3.4、P3.5、P3.6、P3.7。按键的识别:识别按键的方法很多,最常见的方法是扫描法。由列线送入全“0”扫描字、行线读入行线状态来判断的。其方法是:给列线的所有I/O线均置成低电平,然后
5、将行线电平状态读入累加器A中。如果有键按下,总会有一根行线电平被拉至低电平,从而使行输入不全为1。键盘中哪一个键按下是由列线逐列置低电平后,检查行输入状态。其方法是:依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下之键不在此列。如果不全为1,则所按下的键必在此列。而且是在与电平为“0”的行线相交点上的那个键。程序设计流程图如下:列线输出0,行线写1输入行线数据行线数据数据不全为“1”延时去抖列线输出0,行线写1输入行线数据行线数据数据不全为“1”转键处理程序判断是否有键按下程序设置列扫描次数首列号送R6DPT
6、R指向列扫描码表查表求列扫描码输出列扫描码输入行线状态0行有键按下1行有键按下2行有键按下3行有键按下计算0行键值计算1行键值计算2行键值计算3行键值列号加14列扫描结束否键值存于A结束键处理程序NOYESYESNONONONONONOYESYESYESYESYES参考程序Org0000hMain:movwdtcn,#0deh;关看门狗movwdtcn,#0adhmovprt3cf,#0f0h;列线推挽输出方式movxbr2,#40h;交叉开关允许Key:lcallpressyn;判断是否有键按下lcallwhich;判
7、断键号ljmpkeyPressyn:movP3,#0FH;使列线输出0,行线写1movA,P3;输入行线上的数据cjneA,#0fh,press;不相等,有键按下sjmppressyn;没键按下,重新查询Press:lcalldelay;有键按下,延时去抖movP3,#0fh;再次使列线输出0行线写1movA,P3;输入行线上的数据cjneA,#0FH,presst;确有键按下转键处理sjmppressynPresst:retWhich:movR7,#04H;设置列扫描次数movR6,#00H;首列号0送R6movDPT
8、R,#TABS;指向列扫描码表Getscode:movA,R6movcA,@A+DPTR;查表求列扫描码movP3,A;输出列扫描码第一列输出0movA,P3;输入行线状态jnb0E0,L0;0行有按下,转L0jnb0E1,L1;1行有按下,转L1jnb0E2,L2;2行有按下,转L2jnb0E3,L0;3行有按下,