安徽工程科技学院电气系单片机原理8.1.4显示方式:静态与动态(视频)1.静态显示:各数码管在显示过程中持续得到送 显信号,与各数码管接口的I/O口线是专用的.无闪烁,使用的元器件较多,占I/O线多,无须扫描,节省CPU时间,编程简单. 连接 :所有LED的位选均共同连接到+Vcc或GND,每个LED的8根段选线分别连接一个8位并行I/O口,从该I/O口送出相应的字型码显 示字型. 特点:原理简单,显示亮度强,无闪烁,占用I/O资源较多控制系统中的LED显示电路,除了要完成把字符转换成对 应的段选码的译码功能以外,还要具有数据锁存与驱动的功能.其中,译码功能可以通过硬件译码器完成,也可通过软件编程实现;而数 据锁存与驱动只有依赖硬件电路来实现.静态显示方式的关键是多个LED需与多个I/O并行口相连,一般的并行I/O口如8255A或锁存器 只具备锁存功能,还要有硬件驱动电路,再配以软件译码程序. 目前广泛使用一种集锁存、译码、驱动功能为一体的集成电路芯片,以此构成静 态显示硬件译码接口电路.如美国RCA公司的CD4511是4位BCD码─7段十进制锁存译码驱动器,美国MOTOROLA公司的MC14 495是4位BCD码─7段十六进制锁存译码驱动器.例1:4个LED组合的静态显示电路如下图所示分析:说明4个共阴极LED静态 显示3456数字的工作过程.看图8-3,当所有COM端连接在一起并接地时,首先由I/O口(1)送出数字3的段选码4 FH,即数据01001111到左边第一个LED的段选线上,阳极接受到高电平“1”的发光管g、d、c、b、a段因为有电流流过则被点亮 ,则结果为左边第一个LED显示3;接着由I/O口(2)送出数字4的段选码66H,即数据01100110到左边第二个LED的 段选线上,阳极接受到高电平“1”的共阴极发光管g、f、c、b段则被点亮,则结果为左边第二个LED显示4;同理,由I/O口( 3)送出数字5的段选码6DH,即01101101到左边第三个LED的段选线上,由I/O口(4)送出数字6的段选码7DH,即 01111101到左边第四个LED的段选线上,则第三、四个LED分别显示5、6.2.动态显示(常用,有特色):各数码 管在显示过程中轮流得到送显信号,与各数码管接口的I/O口线是共用的.有闪烁,使用的元器件较少,占I/O线少,必须扫描,花费CPU时 间,编程复杂.(有多个LED时尤为突出)分析:说明4位共阴极LED动态显示3456数字的工作过程 看图8-4,首先由I/O口 (1)送出数字3的段码4FH(01001111),即数据01001111到4个LED共同的段选线上, 接着由I/O口(2) 送出位码××××0111到位选线上,其中数据的高4位为无效的×,唯有D3的COM端为低电平“0”,因此只有该LED的发光管因阳极接 收到高电平“1”的g、d、c、b、a段有电流流过而被点亮,也就是显示出数字3,而其余3个LED因其COM端均为高电平“1”而无法点 亮; 显示一定时间后,再由I/O口(1)送出数字4的段选码66H,即01100110到段选线上,接着由I/O口(2)送出点亮D 2的位选码××××1011到位选线上,此时只有该LED的发光管因阳极接受到高电平“1”的g、f、c、b段有电流流过因而被点亮,也就 是显示出数字4,而其余3位LED不亮; 如此再依次送出第三个LED、第四个LED的段选与位选的扫描代码,就能一一分别点亮各个L ED,使4个LED从左至右依次显示3、4、5、6.总结:动态显示程序流程图采用动态扫描方式依次循环点亮各位数码管,构成 多位动态数码管显示电路.1.键盘工作方式:(1)定时扫描方式(2)中断扫描方式8.2.1按键的特点及输入原理1.按键的 分类:触点式:机械 无触点式:电气(SSR固态继电器)2.键输入原理:通过按键的接通与断开, 产生两种相反的逻辑状态 低电平“0”与高电平“1”.3.键功能的实现:对于一组键或一个键盘,需通过接口电路与单片机相 连.可采用查询或中断方式测试有无键按下,再确定是哪一个键按下,将该键号送入累加器ACC,然后判断是数字键还是功能键:若是数字键, 则将键号对应的数字送入相关输入缓冲区;若是功能键,则通过跳转指令转入执行该键的功能程序,执行完后再返回主程序.(计算器)键盘接 口需要解决的问题 由于机械触点的弹性振动,按键在按下时不会马上稳定地接通而在弹起时也不能一下子完全地断开,因而在按键闭合 和断开的瞬间均会出现一连串的抖动,这称为按键的抖动干扰,其产生的波形如下图所示,当按键按下时会产生前沿抖动,当按键弹起时会产生后沿 抖动.这是所有机械触点式按键在状态输出时的共性问题,抖动的时间长短取决于按键的机械特性与操作状态,一般为10~100ms,此为键处 理设计时要考虑的一个重要参数.8.2.2抖动干扰的消除按键的抖动会造成按一次键产生的开关状态被CPU误读几次.为 了使CPU能正确地读取按键状态,必须在按键闭合或断开时,消除产生的前沿或后沿抖动,去抖动的方法有硬件方法和软件方法两种.1.硬 件方法(了解)硬件方法是设计一个滤波延时电路或单稳态电路等硬件电路来避开按键的抖动时间.2.软件方法(常用) 软件方法是指编制一段延时时间为10ms(important)的延时程序,在第一次检测到有键按下时,执行这段延时子程序, 使键的前沿抖动消失后再检测该键状态,如果该键仍保持闭合状态电平,则确认为该键已稳定按下,否则无键按下,从而消除了抖动的影响.同理, 在检测到按键释放后,也同样要延迟一段时间,以消除后沿抖动,然后转入对该按键的处理.8.2.3独立式按键OR G0000HKB:MOVP1,#0FFH ;P1口作为输入状态MOVA ,P1 ;读P1口状态 按键按下=0,按键没有按下=1CPLA ;取反A NLA,#07H ;取低4位00000111JZKB ;A=0,上一句A= 00000000,CPL前11111111没有键按下LCALLD10MS ;延时10ms(重要, 记忆!!!)分析,看懂MOVA,P1CPL AANLA,#07HJZKB ;再判断一次 CJNEA,#01H,KB01 ;00000001进入的条件是A不等于0LC ALLPGM1 ;A=01H,调用键1的功能子程序(分析,看懂)SJMPKBKB01:CJN EA,#02H,KB02;00000010LCALLPGM2 ;调用键2的功能子程序 SJMPKBKB02:CJNEA,#04H,KB ;00000100LC ALLPGM3 ;调用键3的功能子程序SJMPKBEND8.2.4 矩阵式按键键按下/释放判断按键识别——(1)扫描法例5:键盘扫描程序SERCH: MOVR2,#0EFH MOVR3,#00HLINE0: MOVA,R2 MOVP1,A MOV A,P1 JBACC.3,LINE1 MOVA,#00H AJMP TRYKLINE1: JBACC.2,LINE2 MOVA,#04H AJMPTR YK LINE2: JBACC.1,LINE3 MOVA,#08H AJMPTRYK LINE3:JBACC.3,LINE4 MOVA,#0CH AJMPTRY KLINE4:INCR3 MOVA,R2 RLA JNBACC.3,BACK MOVR2,A AJMPLINE0 TRYK:ADDA,R3BACK:RET 开始显示缓冲区首地址送R0显示位数送R2 起始显示位送R3禁止所有位(关显示)从缓冲区取要显示的数查表得段码指向段选口,送段码指向位选口,送位码延时1ms指 向显示缓冲区下一个单元位码左移结束11扫描完一遍吗?YN ORG0000h视频 MOV6Ah,#08H M OV6Bh,#07H MOV6Ch,#06H MOV6Dh,#05H MOV6Eh,#04H MOV6Fh,#0 3H MOV70h,#02H MOV71h,#01H ;给缓冲区赋初值 MOVDPTR,#tab ;段码表首址送 DPTRLD3: MOVR0,#6AH ;待显缓冲区首地址 MOVR3,#0FEH ;个位的位选信号 11111110LD1: MOVA,@R0 ;通过R0间接寻址 MOVCA,@A+DPTR MOVP0,A ;P0段码 MOVP2,R3 ;P2位码 LC ALLDELAY ;调延时1ms子程序 INCR0 ;R0指向下 一字节7BH MOVA,R3 JNBACC.7,LD3 ;判是否发完8个数? RL A ;R1指向下一个位11111101 MOVR3,A ;位选信号存回R1 LD2: SJMPLD1 Delay:MOVR6,#02;02(0.001s) 稳定显示, ;20(0.0109s)过大闪烁, ;100(0.0545s)太大轮 流显示DL2:MOVR5,#250DL3:DJNZR5,DL3DJNZR6,D L2RET ;延时时间过大,就闪烁,时间过小,不应该亮的段也有显示END 8.2键盘(Keyboard)及接口技术按键的特点及输入原理独立式按键矩阵式按键2.编写键盘程序四步(1)判断是否有 键闭合(2)去抖动(3)求键值(4)等待按键的释放Protel99MiscellaneousDevices.ddb-- -SW-PB按键识别:是否有键按下,求键号键抖动及消除:机械按键抖动时间在5ms~10ms之间消除方法:2.硬件 方案——双稳态去抖电路(淘汰)开关和继电器触点等在闭合和断开时常存在抖动问题,解决这一问题的方法很多,图所示就是一个.该 电路主要由两个R-S触发器构成,当开关K处于常闭位置时,a端为低电平,输出端Q则为高电平;此时b端均为高电平,输出端R则为低电平, 2端被锁定.这样,开关触头即使在常闭端产生振颤,但只要不和常开端连接,B端(2端)电位不变,则输出端Q始终处于高电平.同理,开关处 于常开位置时也是如此.因此,该电路在开关闭合或断开时只产生一个脉冲,触点抖动现象被消除.1.软件方案—延时10ms~20ms 后再次判断(常用)前沿抖动后沿抖动键按下闭合稳定键释放特点:一线一键,按键识别(编程)简单;但占用较多口线,适合8键以 下使用.例4:用P1口检测三个按键的状态并完成相应的功能解:资源分配用P1口的低3位(P1.2-P1.0)检测3个按键的输入 0:表示相应按键被按下1:表示按键没有按下流程图:编程:按三个按键中的任一键都对应一个特定功能.关键:如何判断键号?3 210476511109815141312+5VP1.4P1.3P1.0MCS-51P1 .7P1.6P1.5P1.2P1.1特点:按键识别应采用扫描法或线路反转法编程较为复杂,节省口资源,8键以 上使用键盘扫描子程序一般包括以下内容:1.判别有无按键按下;2.扫描获取闭合键的行、列值;3.用计算法或查表法得到键值; 4.判断闭合键释放否,如没释放则继续等待;5.保存闭合键号.KS: MOVP1,#0FH;00001111 MOVA,P1;读入P1口状态 CPLA ;变正逻辑,高电平表 示有键按下 ANLA,#0FH;取低4位 RET ;返回,A≠0表示有键按下 原理:在某一时刻只让一条列线处于低电平,其余列线均处于高电平,则当这一列有键按下时,该键所在的行电平将会由高电平变为低电平 ,可判定该列相应的行有键按下.流程:当第0列处于低电平时,逐行查找是否有行线变低,若有,则第0列与该行的交叉点按键按下;若 无,则表示第0列无键按下,再让下一列处在低电平,依此循环,这种方式称为键盘扫描.键号=行首键号(0、4、8、12)+列号( 0、1、2、3)第8章LED数码管显示及键盘接口技术本讲重点:1.LED显示接口(动态与静态、硬件译码与软件译码、电路、编 程)2.键盘及其接口技术8.1LED数码管 8.1.1概述 8.1.2结构:共阳与共阴 8.1.3译码: 8 .1.4显示方式:静态与动态8.2键盘及接口技术 8.2.1按键的特点及输入原理 8.2.2抖动干扰的消除8. 3键盘/显示器接口芯片8279(了解)电磁炉台达变频器VFD-LLED发光二极管(LightEmittin gDiode)显示器有多种结构形式,单段的圆形或方形LED常用来显示设备的运行状态,8段LED可以显示各种数字和字符,所以也称为 LED数码管,其外形如图8-1所示. LED的伏安特性类似于普通二极管,正常工作电流Ig为5-20mA,压降 Vg为1.5-2.0V左右. 8段LED在控制系统中应用最为广泛,其接口电路也具有普遍借鉴性.利用PN结把电能转换成光能的固 体发光器件,根据制造材料的不同可以发出红、黄、绿、白等不同色彩的可见光来.8.1.1概述8.1LED数码管88点阵LE D单联LED数码管comcom双联LED数码管四联LED数码管在使用发光二极管时,限流电阻的选择尤为重要,阻值过 大或过小二极管都将不能正常发光,甚至烧毁器件.限流电阻Rx应满足如下条件:Rx=(Vcc一Vg)/I g其中:Vcc—电压;Vg—发光二极管工作时的管压降电压值(1.5-2.0V)Ig—发光二极管工作电流 范围(5mA-20mA)这样,在5V电源电压下,限流电阻Rg的取值范围是:(5.0V一2.0V)/20mA 距离.比外型高度小.通常用英寸来表示.范围一般为0.25-20英寸.1英寸=2.54cm=1000mil100mil=2. 54mm8.1.2结构:共阳与共阴共阳极hgfedcbaabcdgefh共阴极hgf edcbaabcdgefhhgf……ahgf… …a高电平点亮低电平点亮接高电平接地单片机系统扩展LED数码管时多用共阳LED(记忆):共阳数码管每个段笔画是用 低电平(“0”)点亮的,要求驱动功率很小;共阴数码管段笔画是用高电平(“0”)点亮的,要求驱动功率较大.通常每个段码 要串一个数百欧姆(390)的限流电阻.8.1.3译码:共阴LEDabcdgefhgfedcbaDCBA P1.3P1.2P1.1P1.0CD4511AT89C51一、硬件译码(了解)CD4511/74LS48是“BCD码→七 段共阴译码/驱动”IC;74LS47是“BCD码→七段共阳译码/驱动”IC硬件译码特点:采用专用的译码/ 驱动器件,驱动功率较大;增加了硬件的开销;软件编程简单;字型固定(比如:只有七段,只可译数字,字型不好…).二、软件译码( 常用)+5VAT89C51共阳LEDabcdgefhP1.0P1.1P1.2P1.3P1.4P1.5P1. 6P1.7软件译码特点:1.不用专用的译码/驱动器件,驱动功率较小;2.不增加硬件的开销;3.软件编程较复杂;4 .字型灵活(比如:有八段,只可译多种字符,字型好看……).八段LED数码管段码表(分析,理解)自学:自己推导一下,“3”的共阳 极段码为什么是0B0?000FF黑6F7F077D6D664F5B063F共阴90800F88 292990B00A40F90C0共阳9876543210字形TAB:DB0C0H,0 F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;0-9共阳段码表TAB1:DB3FH,06H, 5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;0-9共阴段码表(常用)hgfedcba 图8-3LED静态显示方式ABCLKhgfedcbaCLRABCLKCLRABCLK CLR+5VVCCP3.1(TxD)P3.0(RxD)89C51单片机74LS16474LS16474LS1 64hgfedcbahgfedcba+5V共阳LED数码管例2:LED数码管静态显示举例2( 用到串行通信知识了)要求:根据上图编写通过串行口和74LS164驱动共阳LED数码管查表显示的子程序.条件:系统 有6个LED数码管,待显数据(00H—09H)已放在内部RAM35H—30H单元中(分别对应十万位→个位)有几个LED就要 几个74LS164串入并出的芯片,但只要数据不变,送一次就保持住了,且不闪烁,编程十分简单.DSPLY:MOVDPTR, #TABLE ;共阳LED数码管译码表首址 MOVR0,#30H ;待显数据缓冲区的个位地 址REDO:MOVA,@R0 ;通过R0实现寄存器间接寻址 MOVCA,@A+ DPTR ;查表 MOVSBUF,A ;经串行口发送到74LS164 JNBTI,$ ;查询送完一个字节的第8位? CLRTI ;为下一字节发送作准备(分析,看懂) INCR0 ;R0指向下一个数据缓冲单元 CJNER0,#36H,REDO ;判断是否发完6个数? RET ;发完6个数就返回TABLE:DB0C0H,0F9H,0A4H,0B0H,99H;0-9共阳LED 译码表DB92H,82H,0F8H,80H,90H回顾:串行口设定在工作方式0(SM0 SM1=00)下进行工作串行口作为同步移位寄存器使用,数据传输波特率固定为fosc/12,串行数据由RxD(P3.0)输 入输出,同步移位脉冲由TxD(P3.1)输出,数据的发送和接受以8位为一帧数据,低位在前,高位在后,无起始位、奇偶位和停止位,在 移位时钟的作用下,串行口发送缓冲器SBUF中的数据一位一位移入74LS164中.例4:LED动态显示电路如下图所示:图8- 4LED动态显示方式电路的接法决定了必须采用逐位扫描显示方式.即从段选口(段控)送出某位LED的字型码,然后选通该位LE D(位控),并保持一段延时时间(1ms记忆).然后选通下一位,直到所有位扫描完.要注意的两个问题:1.字型码通常通过查表 指令MOVC来求得.2.换位显示时通常要加一些软件代码使所有的LED全灭.(鬼影)硬件连接:所有LED的段控线共同连接在 一起共用一个8位I/O口,而每个LED的位控线分别由一根相应的I/O口线控制.因此必须采用动态扫描显示方式,每一个时刻只选通其中一 个数码管,同时在段选口送出该位LED的字型码.高电平点亮01001111共阴极hgfedcba abcdgefhhgf……aCOM例3:动态显示举例工作原理:从P0口 送段代码,P1口送位选信号.段码虽同时到达6个LED,但一次仅一个LED被选中.利用“视觉暂留”,每送一个字符并选中相应位线,延时 一会儿,再送/选下一个……循环扫描即可.P1.5P1.4P1.3P1.2P1.2P1.0P0.7P0.6P0.5P0. 4P0.3P0.2P0.1P0.07406OC门X3上拉电阻×14+5VAT89C51共阴数 码管位码段码共阴极hgfedcbaabcdgefhhgf……a COM视觉的暂留效应原理:什麽场面被人看了一眼,这场面都会在人的眼里停留0.1秒,电影在1秒中拍摄24张照片,所以在播 放时,里面的事物总是移动的.要求:此处为共阴数码管,P0口送段码,P1口送位选信号.通过查表实现动态显示.条件:待显 数据00H~09H已放在7AH~7FH(数据缓冲区/显示缓冲区)单元中(分别对应十万位~个位)说明:由于用了反相驱动器7 406,要用共阳译码表.DIR: MOVDPTR,#DSEG ;数码管段码表首址 MOVR0,#7AH ;待显缓冲区首地址 MOVR3,#01H ;个位的位选信号00000001LD1:MOVA,@R0 ;通过R0间接寻址 MOVCA,@A+DPTR ;查表 MOVP0,A ;段码送到P0口 MOVP1,R3 ;位码送到P1口 LCALLDELAY ;调延时1ms(记忆)子程序 ;延时时间过大,就闪烁,时间过小,不应该亮的段也有显示 INCR0 ;R0指向下一字节7BH MOVA,R3 JBACC.5,LD2 ;判是否发完6个数? RLA ;R1指向下一个位00000010 MOVR3,A ;位选信号存回R1 SJMPLD1 ;跳去再显示下一个数LD2:RET ;发完6个数就返回DSEG:DB0C0H,0F9H,0A4H,0B0H,99H ;共阳段码表,7406反相DB92H,82H,0F8H,80H,90H典型程序 |
|