第9章MCS-51与键盘、显示器、拨盘、打印机的接口设计ppt课件.ppt
单片机原理及应用单片机原理及应用光华学院光华学院信息工程系信息工程系PC机除了主机以外还需要哪些部分呢?单片机电路有时候也需要键盘、显示等外设。9.1 键盘接口键盘接口q按键的特点及输入原理q独立式按键q矩阵式按键按键的特点及输入原理n按键的分类: 触点式:机械;无触点式:电气n键输入原理: 通过按键的接通与断开,产生两种相反的逻辑状态 低电平“0”与高电平“1”。 n键功能的实现: 对于一组键或一个键盘,需通过接口电路与单片机相连。可采用查询或中断方式测试有无键按下,再确定是哪一个键按下,将该键号送入累加器A,然后判断是数字键还是功能键,若是数字键,则将键号对应的数字送入相关输入缓冲区;若是功能键,则通过跳转指令转入执行该键的功能程序,执行完后再返回主程序。 键盘接口需要解决的问题是否有键按下是否有键按下按键识别:按键识别:键抖动及消除:键抖动及消除:机械按键抖动时间在机械按键抖动时间在5 5msms10ms10ms之之间间硬件方案硬件方案双稳态去抖电路双稳态去抖电路软件方案软件方案延时延时10ms10ms20ms20ms后再次判断后再次判断消除方法消除方法:求键号求键号独立式按键独立式按键8 0 3 1P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7Vc c接口电路:例例1 1:用:用P1P1口检测三个按键的状态并完成相应的功能口检测三个按键的状态并完成相应的功能解:资源分配:用P1口的低3位检测3个按键的输入,为1则表示按键没有按下,为0则表示相应按键被按下。流程图: ORG 0000HKB: MOV P1,#0FFH ;想从想从P1口取数时要先口取数时要先 ;将初始值;将初始值FF装入装入P1,再准备去取数!,再准备去取数! MOV A,P1 ;读出读出P1口内容到口内容到A中中 CPL A ;将将A取反取反 ANL A,#07H ;将将A的内容与的内容与07相与相与 JZ KB ;判断判断A是否是是否是0,是,是0无键按下无键按下 ;跳转到;跳转到KB LCALL D10MS ;由按键按下延时由按键按下延时10ms MOV A,P1 ;读出读出P1口内容到口内容到A中中 CPL A ;将将A取反取反 ANL A,#07H ;将将A的内容与的内容与07相与相与 JZ KB ;判断判断A是否是是否是0,是,是0无键按下无键按下 ;跳转到;跳转到KB CJNE A,#01H,KB01;是是1按键按下吗?按键按下吗? ;不是跳转到不是跳转到KB01 LCALL PGM1 ;是,则调用是,则调用PGM1 SJMP KB ;返回返回KBKB01:CJNE A,#02H,KB02;是是2按键按下吗?按键按下吗? ;不是跳转到不是跳转到KB02 LCALL PGM2 ;是,则调用是,则调用PGM2 SJMP KB ;返回返回KBKB02:CJNE A,#04H,KB ;是是1按键按下吗?按键按下吗? ;不是跳转到;不是跳转到KB01 LCALL PGM3 ;是,则调用是,则调用PGM3 SJMP KB ;返回返回KB END编程:按三个按键中的任一键都对应一个特定功能。若判断键释放应如何修改?矩矩阵阵式式按按键键关键:如何关键:如何判断键号?判断键号?3210476511109815141312+5VP1.4P1.3P1.0MCS-51P1.7P1.6P1.5P1.2P1.1接口电路:键盘扫描子程序一般包括以下内容: 1.判别有无键按下; 2.扫描获取闭合键的行、列值; 3.用计算法或查表法得到键值; 4.判断闭合键释放否,如没释放则继续等待; 5.保存闭合键号。键按下键按下/ /释放判断释放判断 KS: MOV A,#00H ; 将00放入A中 MOV P1,A ;全扫描字#00H送P1口 MOV P1,#0FH ; 为保证取P1口低4位,先应将其置高电平 MOV A,P1 ;读入P1口状态 CPL A ;变正逻辑,高电平表示有键按下 ANL A,#0FH ;取低4位 RET ;返回,A0表示有键按下 MAIN: LCALL KS JNZ xxx如果按下“2”号键,那么P1.0-P1.7的值从原来的0000,1111(0F)变化为0000,0111(0E),因此,A的值变为0000,0111(0E)。取反,1111 1000(F8)再与0000,1111(0F)相与,则为0000,1000(08)不为0,有按键按下。有按下情况的进一步处理程序按键识别扫描法 流程: 当第0列处于低电平时,逐行查找是否有行线变低,若有,则第0列与该行的交叉点按键按下;若无,则表示第0列无键按下,再让下一列处在低电平,依此循环,这种方式称为键盘扫描。 键号=行首键号(0、4、8、12)+列号(0、1、2、3) 原理: 在某一时刻只让一条列线处于低电平,其余列线均处于高电平,则当这一列有键按下时,该键所在的行电平将会由高电平变为低电平,可判定该列相应的行有键按下。例2:键盘扫描程序SERCH: MOV R2,#0EFH ;扫描初值1110 1111 MOV R3,#00H ;列号为0 LINE0: MOV A,R2 ;将R2,1110 1111送入A MOV P1,A ;将A,1110 1111送入P1 MOV A,P1 ;读P1口内容到A JB ACC.3,LINE1;判断0行选中? MOV A,#00H ;行首号送累加器A=00 AJMP TRYK ;跳转到TRYKLINE1: JB ACC.2,LINE2;判断1行选中? MOV A,#04H ;行首号送累加器A=04 AJMP TRYK ;跳转到TRYKLINE2: JB ACC.1,LINE3 ;判断2行选中? MOV A,#08H ;行首号送累加器A=08 AJMP TRYK ;跳转到TRYKLINE3: JB ACC.0,LINE4 ;判断3行选中? MOV A,#0CH ;行首号送累加器A=12 AJMP TRYK ;跳转到TRYKLINE4: INC R3 ;R3列号加1 MOV A,R2 ;将R2,1110 1111送入A RL A ;循环左移1位1101 1111 JNB ACC.0,BACK ;4列都没查到,应该重新开始 MOV R2,A ;赋扫描初值 AJMP LINE0 ;跳转到LINE0TRYK: ADD A,R3 ;列号+行号=键号BACK: RET例2:键盘扫描程序定时扫描方式 定时扫描方式就是每隔一段时间对键盘扫描一次,它利用单片机内部的定时器产生一定时间(例如10 ms)的定时,当定时时间到就产生定时器溢出中断。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的结构和显示原理静态显示方式动态显示方式动态显示的实现动态显示方式问题引入:问题引入: LEDLED显示器如何显示出指定数字显示器如何显示出指定数字/ /字符?字符?为使LED显示不同的符号或数字,要为LED提供段码(或称字型码)。提供给LED显示器的段码(字型码)正好是一个字节(8段)。各段与字节中各位对应关系如下:表1只列出了部分段码,可根据实际情况选用。另外,段码是相对的,它由各字段在字节中所处的位决定。例如表中8段LED段码是按格式:而形成的,“0”的段码为3FH(共阴)。8段LED的段码如表所示:显示字符共阴极段码共阳极段码显示字符共阴极段码共阳极段码03FHC0Hc39HC6H106HF9Hd5EHA1H25BHA4HE79H86H34FHB0HF71H8EH466H99HP73H8CH56DH92HU3EHC1H67DH82HT31HCEH707HF8Hy6EH91H87FH80HH76H89H96FH90HL38HC7HA77FH88H“灭”00HFFHb7CH83HMCS-51单片机abfcgdeDPY1234567abcdefg8dpdp P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7 P3.3 5V5108例:模拟产品计数显示电路例:模拟产品计数显示电路要想显示要想显示“2”,怎么办?怎么办?编程 ORG1000HSTAR:MOVTMOD,#60H ;T1计数方式2模式 MOVTH1,#00H ;T1置初值00 MOVTL1,#00HMAIN:MOVP1,#0C0H ;数码管显示0 DISP:JB P3.3,DISP ;监测按键信号 ACALLDELAY ;消抖延时 JB P3.3,DISP ;确认低电平信号DISP1:JNB P3.3,DISP1 ;监测按键信号松手? ACALL DELAY ;消抖延时 JNBP3.3,DISP1 ;确认高电平信号 SETB TR1 ;启动计数器DISP2:MOV A,TL1 ;TL1值放入A中 MOVC A,A+DPTR ;查表获取数码管显示值 MOVP1,A ;数码管显示计数值 CJNE A,#8E,DISP2 ;显示的数到没到F LJMPSTAR ;跳转到ATAR TAB:0C0H,0F9H,0A4H ;表 DELAY:MOV R2,#14H ;延时DELAY1:MOV R3,#10H ;延时 DJNZ R3,$ DJNZ R2,DELAY1 RET END静态显示方式q连接 所有LED的位选均共同连接到+VCC或GND,每个LED的8根段选线分别连接一个8位并行I/O口,从该I/O口送出相应的字型码显示字型。 q特点 原理简单;显示亮度强,无闪烁;占用I/O资源较多。动态显示方式q连接 所有LED的段选线共同连接在一起共用一个 8位I/O口,而每个LED的位选分别由一根相应的I/O口线控制。因此必须采用动态扫描显示方式,每一个时刻只选通其中一个LED,同时在段选口送出该位LED的字型码。 动态显示基本原理AD012PA021AD113PA122AD214PA223AD315PA324AD416PA425AD517PA526AD618PA627AD719PA728PB 029C E8PB 130R D9PB 231W R10PB 332IO/M7PB 433AL E11PB 534PB 635PB 736T M R OUT6PC 037PC 138T M R IN3PC 239PC 31PC 42R E SE T4PC 558155edcdpbafg70123456PB0PB7PA 0PA 72008动态显示程序流程图 采用动态扫描方式依次循环点亮各位数码管,构成多位动态数码管显示电路。开 始显示缓冲区首地址送R0显示位数送R2起始显示位送R3禁止所有位(关显示)从缓冲区取要显示的数查表得字型码指向段选口,送字型码指向位选口,送位选码延时指向显示缓冲区下一个单元位选码左移结束11扫描完一遍吗?YN 单片机与LCD 接 口 设 计任务1:如何在LCD的指定位置显示出 指定的字符。2行16列Ab任务2:如何在LCD的指定位置显示字 符串。2行16列guanghua xueyuan基本内容v LCD接口程序设计程序设计*v 字符型LCD模块的使用方法 v 单片机与字符型LCD模块接口电路接口电路NOTICENOTICELCD: Liquid Crystal Display一、字符型LCD模块guanghua xueyuanvLCD实验模块的连接管脚1 2 3 4 5 6 7 8 910111213141516 12345678910111213141516VSS VDD VORS R/WEDB0 DB1ADB3DB2DB5DB4DB7DB6KLCD模块模块Vss: +5V电源管脚(Vcc)VDD: 地管脚(GND)Vo: 液晶显示驱动电源(0V5V) 12345678910111213141516VSS VDD VORS R/WEDB0 DB1ADB3DB2DB5DB4DB7DB6KLCD模块DB0DB7:数据线,可以用8位连接,也可以只用高4位连接,节约单片机资源,一般采用的是八位连接方法。 12345678910111213141516VSS VDD VORS R/WEDB0 DB1ADB3DB2DB5DB4DB7DB6KLCD模块A:背光控制正电源K:背光控制地 12345678910111213141516VSS VDD VORS R/WEDB0 DB1ADB3DB2DB5DB4DB7DB6KLCD模块单片机与LCD模块之间有四种基本操作: 写命令写命令 读状态读状态 写显示数据写显示数据 读显示数据读显示数据 12345678910111213141516VSS VDD VORS R/WEDB0 DB1ADB3DB2DB5DB4DB7DB6KLCD模块RSR/W操作操作00写命令写命令操作(初始化、光标定操作(初始化、光标定位等)位等)01读状态读状态操作(读忙标志)操作(读忙标志)10写数据写数据操作(要显示内容)操作(要显示内容)11读数据读数据操作(可以把显示存储操作(可以把显示存储区中的数据反读出来)区中的数据反读出来)数据命令选择端读写控制端 12345678910111213141516VSS VDD VORS R/WEDB0 DB1ADB3DB2DB5DB4DB7DB6KLCD模块RS:数据和指令选择控制端,RS=0:命令/状态;RS=1:数据R/W:读写控制线,R/W=0:写操作;R/W=1:读操作E:数据读写操作控制位,E线向LCD模块发送一个脉冲,LCD模块与单片机之间将进行一次数据交换二、单片机与字符型LCD模块接口数据线:数据线:DB7DB0接接单片机的单片机的P1.7 P1.0控制端:控制端: RS P3.0 R/W P3.1 E P3.2 单片机与LCD模块硬件连接v 实验模块:1602,51单片机v 连线表: 动手做动手做 单片机单片机1602液晶液晶连接1+5V/GND+5V/GND连接2P1.0-P1.7DB0-DB7连接3P3.0RS连接4P3.1RW连接5P3.2E三、LCD接口程序设计v 程序设计程序设计 功能设置 写命令写命令子程序子程序 LCD初始化:初始化:按一定顺序写命令字 如:写清屏命令字、写DDRAM光标定位地址命令字 显示数据 写数据写数据子程序子程序 读入状态字读状态读状态子程序子程序 1. 读状态字RSR/W操作操作00写命令操作(初始化、光标定位等)01读状态操作(读忙标志)读状态操作(读忙标志)10写数据操作(要显示的内容)11读数据操作(可以把显示存储区中的数据反读出来)v E (P3.2):v RS (P3.0)=0; v R/W(P3.1) =1;RSEQUP3.0RWEQUP3.1EEQUP3.2vE(P3.2):vR/W(P3.1)=1; vRS(P3.0)=0; SETB RW ;RW=1NOP ;3条CLR RS ;RS=0NOP ;3条SETB E ;E=1NOP ;3条MOV A,P1 ;读入状态字读入状态字 NOP ;3条CLR E ;E=0NOP ;3条 CLR RW ;RW=0STAT:RETRSR/W操作操作00写命令写命令操作(初始化、操作(初始化、光标定位等)光标定位等)01读状态读状态操作(读忙标操作(读忙标志)志)10写数据写数据操作(要显示操作(要显示内容)内容)11读数据读数据操作(可以把操作(可以把显示存储区中的数据显示存储区中的数据反读出来)反读出来)2. 写命令字RSR/W操作操作00写命令操作(初始化、光标写命令操作(初始化、光标定位等)定位等)01读状态操作(读忙标志)读状态操作(读忙标志)10写数据操作(要显示的内容)11读数据操作(可以把显示存储区中的数据反读出来)v E:v RS=0; R/W=0;v 采用查询方式:读入状态字读入状态字,再判断忙标志ACC.7。RW=0RS=1E=1命令字A,A P1E=0RS=0返回写数据读入状态字AACC.7=0?不忙吗?延时YN动手做动手做假定显示数据已存放到内部RAM的 21H单元3. 命令字指令名称指令名称控制信号控制信号控制代码控制代码RS RWD7 D6 D5 D4 D3 D2 D1 D0清屏清屏0 00 0 0 0 0 0 0 1归归home位位0 00 0 0 0 0 0 1 *输入方式设置输入方式设置0 00 0 0 0 0 1 I/D S显示状态设置显示状态设置0 00 0 0 0 1 D C B光标画面滚动光标画面滚动0 00 0 0 1 S/C R/L * *功能设置功能设置0 00 0 1 DL N F * *CGRAM地址设置地址设置0 00 1 A5 A4 A3 A2 A1 A0DDRAM地址设置地址设置0 01 A6 A5 A4 A3 A2 A1 A0读读BF和和AC0 1BF AC6 AC5 AC4 AC3 AC2 AC1 AC0写数据写数据1 0数数 据据读数据读数据1 1数数 据据清除屏幕,置AC为零01H指令名称指令名称控制信号控制信号控制代码控制代码RS RWD7 D6 D5 D4 D3 D2 D1 D0清屏清屏0 00 0 0 0 0 0 0 1归归home位位0 00 0 0 0 0 0 1 *输入方式设置输入方式设置0 00 0 0 0 0 1 I/D S显示状态设置显示状态设置0 00 0 0 0 1 D C B光标画面滚动光标画面滚动0 00 0 0 1 S/C R/L * *功能设置功能设置0 00 0 1 DL N F * *CGRAM地址设置地址设置0 00 1 A5 A4 A3 A2 A1 A0DDRAM地址设置地址设置0 01 A6 A5 A4 A3 A2 A1 A0读读BF和和AC0 1BF AC6 AC5 AC4 AC3 AC2 AC1 AC0写数据写数据1 0数数 据据读数据读数据1 1数数 据据设光标移动方向并指定整体显示是否移动。I/D=1:增量方式I/D=0:减量方式S=1:移位S=0:不移位0000011006H设整体显示开关(D),光标显示开关(C),光标位的字符闪耀(B)D=1;C=0;B=0000011000cH指令名称指令名称控制信号控制信号控制代码控制代码RS RWD7 D6 D5 D4 D3 D2 D1 D0清屏清屏0 00 0 0 0 0 0 0 1归归home位位0 00 0 0 0 0 0 1 *输入方式设置输入方式设置0 00 0 0 0 0 1 I/D S显示开关控制显示开关控制0 00 0 0 0 1 D C B光标画面滚动光标画面滚动0 00 0 0 1 S/C R/L * *功能设置功能设置0 00 0 1 DL N F * *CGRAM地址设置地址设置0 00 1 A5 A4 A3 A2 A1 A0DDRAM地址设置地址设置0 01 A6 A5 A4 A3 A2 A1 A0读读BF和和AC0 1BF AC6 AC5 AC4 AC3 AC2 AC1 AC0写数据写数据1 0数数 据据读数据读数据1 1数数 据据设接口数据位数(DL),显示行数(L),及字型(F)DL=1,8位 =0: 4位N=1:2行 =0:1行F=1:510 =0: 570011100038H指令名称指令名称控制信号控制信号控制代码控制代码RS RWD7 D6 D5 D4 D3 D2 D1 D0清屏清屏0 00 0 0 0 0 0 0 1归归home位位0 00 0 0 0 0 0 1 *输入方式设置输入方式设置0 00 0 0 0 0 1 I/D S显示开关控制显示开关控制0 00 0 0 0 1 D C B光标画面滚动光标画面滚动0 00 0 0 1 S/C R/L * *功能设置功能设置0 00 0 1 DL N F * *CGRAM地址设置地址设置0 00 1 A5 A4 A3 A2 A1 A0DDRAM地址设置地址设置0 01 A6 A5 A4 A3 A2 A1 A0读读BF和和AC0 1BF AC6 AC5 AC4 AC3 AC2 AC1 AC0写数据写数据1 0数数 据据读数据读数据1 1数数 据据设置DDRAM地址,为显示定位4. 初始化LCD上电延时20ms功能设置延时37us显示状态设置延时37us清屏延时1.52ms输入方式设置初始化结束动手做动手做5. 定位光标位置把显示数据显示在某个位置,就是把显示数据写在相应的DDRAM地址中,DDRAM地址占7位。Set DDRAM address命令如下: row12345141516line100H01H02H03H04H0dH0eH0fHline240H41H42H43H44H4dH4eH4fHNOTICENOTICEv光标定位,写入一个显示字符后,DDRAM地址会自动加自动加1或减或减1,加或减由输入方式字设置;v 第1行DDRAM地址与第2行DDRAM地址并不连续并不连续。80H81H82H83H84H8dH8eH8fH0c0H0c1H0c2H0c3H0c4H0cdH0ceH0cfH6. LCD显示程序设计mainLCD初始化光标定位显示字符动手做动手做SJMP $7. 显示数据对于常用数字、字母等显示数据为其ASCII码 END