您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 第9章MCS-51与键盘、显示器、拨盘、打印机的接口设计
单片机原理及应用第9章MCS-51与键盘、显示器的接口设计光华学院信息工程系王超PC机除了主机以外还需要哪些部分呢?单片机电路有时候也需要键盘、显示等外设。9.1键盘接口按键的特点及输入原理独立式按键矩阵式按键按键的特点及输入原理按键的分类:触点式:机械;无触点式:电气键输入原理:通过按键的接通与断开,产生两种相反的逻辑状态低电平“0”与高电平“1”。键功能的实现:对于一组键或一个键盘,需通过接口电路与单片机相连。可采用查询或中断方式测试有无键按下,再确定是哪一个键按下,将该键号送入累加器A,然后判断是数字键还是功能键,若是数字键,则将键号对应的数字送入相关输入缓冲区;若是功能键,则通过跳转指令转入执行该键的功能程序,执行完后再返回主程序。键盘接口需要解决的问题是否有键按下按键识别:键抖动及消除:机械按键抖动时间在5ms~10ms之间硬件方案——双稳态去抖电路软件方案——延时10ms~20ms后再次判断消除方法:求键号独立式按键接口电路:特点:一线一键,按键识别(编程)简单;但占用较多口线,适合8键以下使用。例1:用P1口检测三个按键的状态并完成相应的功能解:资源分配:用P1口的低3位检测3个按键的输入,为1则表示按键没有按下,为0则表示相应按键被按下。流程图:ORG0000HKB:MOVP1,#0FFH;想从P1口取数时要先;将初始值FF装入P1,再准备去取数!MOVA,P1;读出P1口内容到A中CPLA;将A取反ANLA,#07H;将A的内容与07相与JZKB;判断A是否是0,是0无键按下;跳转到KBLCALLD10MS;由按键按下延时10msMOVA,P1;读出P1口内容到A中CPLA;将A取反ANLA,#07H;将A的内容与07相与JZKB;判断A是否是0,是0无键按下;跳转到KBCJNEA,#01H,KB01;是1按键按下吗?;不是跳转到KB01LCALLPGM1;是,则调用PGM1SJMPKB;返回KBKB01:CJNEA,#02H,KB02;是2按键按下吗?;不是跳转到KB02LCALLPGM2;是,则调用PGM2SJMPKB;返回KBKB02:CJNEA,#04H,KB;是1按键按下吗?;不是跳转到KB01LCALLPGM3;是,则调用PGM3SJMPKB;返回KBEND编程:按三个按键中的任一键都对应一个特定功能。若判断键释放应如何修改?矩阵式按键关键:如何判断键号?3210476511109815141312+5VP1.4P1.3P1.0MCS-51P1.7P1.6P1.5P1.2P1.1接口电路:特点:按键识别应采用扫描法或线路反转法编程较为复杂,节省口资源,8键以上使用键盘扫描子程序一般包括以下内容:1.判别有无键按下;2.扫描获取闭合键的行、列值;3.用计算法或查表法得到键值;4.判断闭合键释放否,如没释放则继续等待;5.保存闭合键号。键按下/释放判断KS:MOVA,#00H;将00放入A中MOVP1,A;全扫描字#00H送P1口MOVP1,#0FH;为保证取P1口低4位,先应将其置高电平MOVA,P1;读入P1口状态CPLA;变正逻辑,高电平表示有键按下ANLA,#0FH;取低4位RET;返回,A≠0表示有键按下MAIN:LCALLKSJNZxxx如果按下“2”号键,那么P1.0-P1.7的值从原来的0000,1111(0F)变化为0000,0111(0E),因此,A的值变为0000,0111(0E)。取反,11111000(F8)再与0000,1111(0F)相与,则为0000,1000(08)不为0,有按键按下。有按下情况的进一步处理程序按键识别——扫描法流程:当第0列处于低电平时,逐行查找是否有行线变低,若有,则第0列与该行的交叉点按键按下;若无,则表示第0列无键按下,再让下一列处在低电平,依此循环,这种方式称为键盘扫描。键号=行首键号(0、4、8、12)+列号(0、1、2、3)原理:在某一时刻只让一条列线处于低电平,其余列线均处于高电平,则当这一列有键按下时,该键所在的行电平将会由高电平变为低电平,可判定该列相应的行有键按下。例2:键盘扫描程序SERCH:MOVR2,#0EFH;扫描初值11101111MOVR3,#00H;列号为0LINE0:MOVA,R2;将R2,11101111送入AMOVP1,A;将A,11101111送入P1MOVA,P1;读P1口内容到AJBACC.3,LINE1;判断0行选中?MOVA,#00H;行首号送累加器A=00AJMPTRYK;跳转到TRYKLINE1:JBACC.2,LINE2;判断1行选中?MOVA,#04H;行首号送累加器A=04AJMPTRYK;跳转到TRYKLINE2:JBACC.1,LINE3;判断2行选中?MOVA,#08H;行首号送累加器A=08AJMPTRYK;跳转到TRYKLINE3:JBACC.0,LINE4;判断3行选中?MOVA,#0CH;行首号送累加器A=12AJMPTRYK;跳转到TRYKLINE4:INCR3;R3列号加1MOVA,R2;将R2,11101111送入ARLA;循环左移1位11011111JNBACC.0,BACK;4列都没查到,应该重新开始MOVR2,A;赋扫描初值AJMPLINE0;跳转到LINE0TRYK:ADDA,R3;列号+行号=键号BACK:RET例2:键盘扫描程序定时扫描方式定时扫描方式就是每隔一段时间对键盘扫描一次,它利用单片机内部的定时器产生一定时间(例如10ms)的定时,当定时时间到就产生定时器溢出中断。CPU响应中断后对键盘进行扫描,并在有键按下时识别出该键,再执行该键的功能程序。;将100放入R1;定时器1方式2,;装入初值,定时100us;启动定时器;判断TF1位是否为1,;直到1跳转到TM1;R1减1不等0,则跳转到LK;调用KEY测试,出口为A;判断A是否为0?跳转到TM;延时10MS;调用KEY测试,出口为A;判断A是否为0?跳转到TM;调用按键搜索程序;开全局中断,开定时器1中断;设置定时中断循环次数为100;设置定时器1工作方式2;计算并装入初值;启动定时器;等待;R1减1不等于0,则跳转到TM1;关全局中断,关定时器1中断;调用KEY测试,出口为A;判断A是否为0?跳转到TM1;延时10MS;调用KEY测试,出口为A;判断A是否为0?跳转到TM1;调用按键搜索程序MCS-51的中断系统结构图中断标志位中断源允许总允许中断优先级中断扫描方式为提高CPU工作效率,可采用中断扫描工作方式。其工作过程如下:当无键按下时,CPU处理自己的工作,当有键按下时,产生中断请求,CPU转去执行键盘扫描子程序,并识别键号。P1.0P1.1P1.3P1.2P1.4P1.5P1.6P1.7INT08031&;向P1口写入F0;开全局中断,开外部中断0中断;等待;调用KEY测试,出口为A;判断A是否为0?跳转到TM1;延时10MS;调用KEY测试,出口为A;判断A是否为0?跳转到TM1;调用按键搜索程序P1.0P1.1P1.3P1.2P1.4P1.5P1.6P1.7INT08031&1H9.2显示器接口技术LED的结构和显示原理静态显示方式动态显示方式动态显示的实现动态显示方式问题引入:LED显示器如何显示出指定数字/字符?为使LED显示不同的符号或数字,要为LED提供段码(或称字型码)。提供给LED显示器的段码(字型码)正好是一个字节(8段)。各段与字节中各位对应关系如下:表1只列出了部分段码,可根据实际情况选用。另外,段码是相对的,它由各字段在字节中所处的位决定。例如表中8段LED段码是按格式:而形成的,“0”的段码为3FH(共阴)。8段LED的段码如表所示:显示字符共阴极段码共阳极段码显示字符共阴极段码共阳极段码03FHC0Hc39HC6H106HF9Hd5EHA1H25BHA4HE79H86H34FHB0HF71H8EH466H99HP73H8CH56DH92HU3EHC1H67DH82HT31HCEH707HF8Hy6EH91H87FH80HH76H89H96FH90HL38HC7HA77FH88H“灭”00HFFHb7CH83H………例:模拟产品计数显示电路要想显示“2”,怎么办?编程ORG1000HSTAR:MOVTMOD,#60H;T1计数方式2模式MOVTH1,#00H;T1置初值00MOVTL1,#00HMAIN:MOVP1,#0C0H;数码管显示0DISP:JBP3.3,DISP;监测按键信号ACALLDELAY;消抖延时JBP3.3,DISP;确认低电平信号DISP1:JNBP3.3,DISP1;监测按键信号松手?ACALLDELAY;消抖延时JNBP3.3,DISP1;确认高电平信号SETBTR1;启动计数器DISP2:MOVA,TL1;TL1值放入A中MOVCA,@A+DPTR;查表获取数码管显示值MOVP1,A;数码管显示计数值CJNEA,#8E,DISP2;显示的数到没到FLJMPSTAR;跳转到ATARTAB:0C0H,0F9H,0A4H……;表DELAY:MOVR2,#14H;延时DELAY1:MOVR3,#10H;延时DJNZR3,$DJNZR2,DELAY1RETEND静态显示方式连接所有LED的位选均共同连接到+VCC或GND,每个LED的8根段选线分别连接一个8位并行I/O口,从该I/O口送出相应的字型码显示字型。特点原理简单;显示亮度强,无闪烁;占用I/O资源较多。动态显示方式连接所有LED的段选线共同连接在一起共用一个8位I/O口,而每个LED的位选分别由一根相应的I/O口线控制。因此必须采用动态扫描显示方式,每一个时刻只选通其中一个LED,同时在段选口送出该位LED的字型码。动态显示基本原理电路的接法决定了必须采用逐位扫描显示方式。即从段选口送出某位LED的字型码,然后选通该位LED,并保持一段延时时间。然后选通下一位,直到所有位扫描完。要注意的两个问题:1.字型码通常通过查表指令MOVC来求得.2.换位显示时通常要加一段程序使所有的LED全灭.AD012PA021AD113PA122AD214PA223AD315PA324AD416PA425AD517PA526AD618PA627AD719PA728PB029CE8PB130RD9PB231WR10PB332IO/M7PB433ALE11PB534PB635PB736TMROUT6PC037PC138TMRIN3PC239PC31PC42RESET4PC558155edcdpbafg70123456PB0~PB7PA0~PA7200Ω×8动态显示程序流程图采用动态扫描方式依次循环点亮各位数码管,构成多位动态数码管显示电路。开始显示缓冲区首地址送R0显示位数送R2起始显示位送R3禁止所有位(关显示)从缓冲区取要显示的数查表得字型码指向段选口,送字型码指向位选口,送位选码延时指向显示缓冲区下一个单元位选码左移结束11扫描完一遍吗?YN单片机与LCD接口设计任务1:如何在LCD的指定位置显示出指定的字符。2行×16列Ab任务2:如何在LCD的指定位置显示字符串。2行×16列guanghuaxueyuan基本内容LCD接口程序设计**字符型LCD模块的使用方法单片机与字符型LCD模块接口电路≈≈≈≈NOTICE≈≈≈≈LCD:LiquidCrystalDisplay一、字符型LCD模块guanghuaxueyuanLCD实验模块的连接管脚1234567891011121314151612345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块Vss:+5V电源管脚(Vcc)VDD:地管脚(GND)Vo:液晶显示驱动电源(0V~5V)12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块DB0~DB7:数据
本文标题:第9章MCS-51与键盘、显示器、拨盘、打印机的接口设计
链接地址:https://www.777doc.com/doc-5245309 .html