您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 单片机原理及应用 第12章MCS-51的键盘显示
第12章MCS-51的键盘显示接口2主要内容:LED显示原理及接口电路设计键盘原理及接口电路设计键盘显示接口电路设计MCS-51单片机与BCD码拨盘的接口设计312.1.1LED显示器原理及显示码LED显示器(数码管)分类–常用的数码管可分为7段和“米”字段两种–从电气特性上可分为“共阴极”和“共阳极”两种LED结构及外形图abcdefg12.1LED显示电路设计4为使LED显示不同的符号或数字,要为LED提供段码(或称字型码)。提供给LED显示器的段码(字型码)正好是一个字节(8段)。各段与字节中各位对应关系如下:按上述格式,8段LED的段码如下表所示。5显示字符共阴极段码共阳极段码显示字符共阴极段码共阳极段码03FHC0Hc39HC6H106HF9Hd5EHA1H25BHA4HE79H86H34FHB0HF71H8EH466H99HP73H8CH56DH92HU3EHC1H67DH82HT31HCEH707HF8Hy6EH91H87FH80HH76H89H96FH90HL38HC7HA77FH88H“灭”00HFFHb7CH83H………LED段码表(8段)6则“0”的段码为7EH(共阴)。字型及段码由设计者自行设定,习惯上还是以“a”段对应段码的最低位。注意:段码是相对的,它由各字段在字节中所处的位决定。例如前面表中8段LED段码是按格式:而形成的,“0”的段码为3FH(共阴)。反之,如将格式改为下列格式:712.1.2LED的静态显示基本原理–多个数码管显示时,同时点亮显示,每一位数码管恒定的显示,不闪烁。–显示程序简单,但是要求较多的I/O口线–驱动电流较小8LED的静态显示简单的静态显示共阳极数码管静态显示示意图912.1.3LED的动态显示基本原理:–多个数码管显示时,依次循环点亮每一个数码管,利用人的视觉暂留看到整个显示内容,只有循环速度足够快,才不闪烁。–显示程序较复杂,但是节省I/O口线–驱动电流较大LED显示器动态显示示意图1012.2键盘接口的设计键盘的分类编码式:由专门的硬件(8279等)识别按下的键码。非编码式:依靠软件实现键码的识别。非编码键盘的结构–独立式键盘–矩阵式键盘软件实现按键识别的方法–扫描法键盘使用中的注意事项–键盘的抖动要点:1112.2.1键盘接口的工作原理独立式键盘接口和矩阵式键盘接口。1.独立式键盘接口各键相互独立,每个按键各接一根输入线,通过检测输入线的电平状态可很容易判断那个键被按下。此种接口适于键数较少或操作速度较高的场合。12独立式键盘的检测方式13键盘的抖动问题键盘的抖动–抖动时间一般为5~10ms。–为了保证CPU对键的闭合作一次,而且是仅作一次处理,必须消除抖动–可采用软、硬件方法消除抖动。**软件消抖原理1)判断是否有键按下;2)若有键按下,调用延时程序(延时时间大于10ms);3)再次判断是否有键按下,并读入相应的键值.键盘工作时输出的电压波形1412.2.2独立式键盘编程1)每个按键占用一根口线2)电路配置灵活,软件结构简单。3)适用于按键较少的场合。特点:可直接判断哪个键按下;----------------------------------------------------------------------------------------------------------;独立式键盘的处理程序(实际应用时要加延时消除抖动);----------------------------------------------------------------------------------------------------------LOOP:MOVA,P1;读P1口电平状态ANLA,#0FH;取P1口低4位CJNEA,#0FH,KEY;判断是否有键按下SJMPLOOP;如没有键按下,重新扫描KEY:CJNEA,#0EH,NEXT1;判断是否为一号键按下ACALLKEY1;调用一号键处理子程序SJMPLOOPNEXT1:CJNEA,#0DH,NEXT2;判断是否为2号键按下ACALLKEY2…158255A扩展I/O口的独立式按键接口电路PA0PA1PA2PA3PA4PA5PA6PA7*8255A工作于基本输入输出方式*PA口地址7FFCH16用三态缓冲器扩展的按键接口电路三态缓冲器的地址:BFFFH17对上图独立式键盘编程,软件消抖,查询方式检测键的状态。仅有一键按下时处理(不处理多键同时按下)。KEYIN:MOVDPTR,#0BFFFH;键盘端口地址BFFFHMOVXA,@DPTR;读键盘状态ANLA,#1FH;屏蔽高三位MOVR3,A;保存键盘状态值LCALLDELAY10;延时10ms去键盘抖动MOVXA,@DPTR;再读键盘状态ANLA,#1FH;屏蔽高三位CJNEA,R3,OUT;两次不同,返回CJNEA,#1EH,KEY2;相等,有键按下,;判断是否是S1?不是转KEY218LJMPPKEY1;是K1键按下,转K1键处理;子程序PKEY1KEY2:CJNEA,#1DH,KEY3;S2键未按下,转KEY3LJMPPKEY2;S2键按下,转PKEY2处理KEY3:CJNEA,#1BH,KEY4;S3未按下,转KEY4LJMPPKEY3;S3按下,转PKEY3处理KEY4:CJNEA,#17H,KEY5;S4键未按下,转KEY5LJMPPKEY4;S4按下,转PKEY4处理KEY5:CJNEA,#0FH,OUT;S5未按下,转OUTLJMPPKEY5;S5按下,转PKEY5处理OUT:RET;重键或无键按下,从子程序返回**是一段常用的程序,识别和编程简单,用在按键数较少的场合。1912.2.3矩阵式(行列式)键盘接口用于按键数目较多的场合,由行线和列线组成,按键位于行、列的交叉点上,如下图。**在需要按键数目较多的场合,矩阵式键盘与独立式键盘相比,要节省较多的I/O口线。20矩阵式键盘的一种接线方式矩阵式键盘示意图21矩阵式键盘的工作过程¾键没有按下时行线和列线是分开的,键按下将相应的行线列线短接。¾连接行线的管脚作为输入口,没有键按下时,被外电路拉高为“1”¾连接列线的管脚作为输出口,需要扫描键盘时,逐次输出低电平,若此时有键按下,则与其交叉的行线回读值为“0”,否则为“1”。¾根据当前的扫描列线和回读电平为“0”的行线可确定按下的键值。22矩阵式键盘键码的判别¾对于一个规则编码的矩阵式键盘,可以通过对键盘的列线依次进行扫描(输出低电平),然后回读行线,如果哪一行的电平为低,说明该行、该列的键被按下。该键的键码为:键码=该行首键码+该列号0行1行2行3行0列1列2列3列23矩阵式按键的识别方法(扫描法)扫描法–依次置低键盘的列扫描线–回读键盘的行线–根据键盘的行、列线状态来计算按下键的键号矩阵式键盘示意图24键盘的扫描方式程序控制扫描方式–当单片机空闲时,才调用键盘扫描程序定时扫描方式–每隔一定时间对键盘扫描一次,通常采用单片机内定时器确定键盘扫描时间间隔中断扫描方式–利用按键操作产生的中断来扫描键盘,优点是及时响应键盘操作,节省CPU时间2512.3键盘显示接口电路设计例18155PA口地址7F01H8155PB口地址7F02H8155PC口地址7F03H12.3.18155扩展键盘显示26显示程序设计软件任务–假设在79H~7EH已经存放了用于显示的6位数据–要求设计显示子程序,实现6个数码管的动态显示–显示字符码可采用共阴极字符码程序流程显示子程序流程27显示子程序;---------------------------------------------------------------------------------------------------;显示子程序,完成显示缓冲区79H~7EH中6位数据的显示工作;主程序中应设好8155的工作方式;PA方式0输出,PB方式0输出;PC方式0输入;---------------------------------------------------------------------------------------------------DIR:MOVR0,#79H;置缓冲器指针初值MOVR3,#01H;显示位数MOVA,R3LD0:MOVDPTR,#7F01H;指向8155的PA口MOVX@DPTR,A;置相应数码管位选择MOVDPTR,#tab1;指向字符码表格头地址MOVA,@R0;取待显示数据MOVCA,@A+DPTR;取待显示数据的字符码DIR1:MOVDPTR,#7F02H;指向8155的PB口MOVX@DPTR,A;送出段数据ACALLDL11;延迟1msINCR0MOVA,R3CJNEA,#00100000B,LD1RETLD1:RLAMOVR3,AAJMPLD028显示子程序;---------------------------------------------------------------------;延时子程序;---------------------------------------------------------------------DL11:MOVR7,#02HMOVR6,#0FFHDL6:DJNZR6,DL6DJNZR7,DL6RET;---------------------------------------------------------------------;显示字符码表格(共阴极LED段数据表格,对应显示0~F);---------------------------------------------------------------------tab1:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB7FH,6FH,77H,7CH,39H,5EH,79H,71H29键盘程序设计设计要求–判别键盘上有无键闭合–去除键盘的机械抖动–判别闭合键的键号–使处理器对键的一次闭合仅作一次处理程序流程键盘处理子程序流程30键盘处理子程序;---------------------------------------------------------------------;键盘输入子程序,调用结束后累加器A中为键号;---------------------------------------------------------------------KEYI:ACALLKS1;调用判有无键闭合子程序,若累加器A不为0,;则有键按下JNZLK1;有键按下,程序转NI:ACALLDIR;调显示子程序,延迟6msAJMPKEYILK1:ACALLDIRACALLDIR;调显示子程序,延迟12msACALLKS1JNZLK2;若有键按下,则开始辨别键号AJMPNILK2:MOVR2,#0FEH;R2存放列扫描数据(第0列)MOVR4,#00H;列号LK4:MOVDPTR,#7F01H;指向PA口MOVA,R2;送出列扫描数据MOVX@DPTR,A;置相应列线为低电平INCDPTRINCDPTR;指向PC口MOVXA,@DPTR;读取行线(PC口)状态ANLA,#0FHCJNEA,#0EH,LONE;依次判断各行有无键按下31键盘处理子程序MOVA,#00HAJMPLKPLONE:CJNEA,#0DH,LTW0MOVA,#08HAJMPLKPLTW0:CJNEA,#0BH,LTHRMOVA,#10HAJMPLKPLTHR:CJNEA,#07H,NEXTMOVA,#18HLKP:ADDA,R4;计算键号并压栈PUSHALK3:ACALLDIRACALLKS1JNZLK3;若键未释放则等待POPA;键号出栈RETNEXT:INCR4;下一列的列号MOVA,R2CJNEA,#7FH,KNDAJMPKEYI32KND:RLAMOVR2,AAJMPLK4;--------
本文标题:单片机原理及应用 第12章MCS-51的键盘显示
链接地址:https://www.777doc.com/doc-5833598 .html