第10章接口(王鑫国)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第10章接口技术教学目的:了解80C51系列单片机与键盘、显示器、模/数、数/模转换器等外设连接的技术。教学重点:1.键盘接口的工作原理及应用;2.LED显示器接口的工作原理及应用。教学难点:1.液晶显示器的原理及应用2.串行A/D、D/A的工作原理及应用。10.1键盘接口键盘电路的设计应使CPU不仅能识别是否有键按下,还要能识别是哪一个键按下,而且能把此键所代表的信息翻译成计算机所能接收的形式。在单片机应用系统中多采用非编码键盘,其分为独立式键盘和矩阵式键盘,硬件上此类键盘只提供通、断两种状态,其它工作都靠软件来完成。10.1.1键盘工作原理1.键输入原理2.键输入接口与软件应解决的问题(l)键开关状态的可靠输入图10-1键闭合及断开时的电压波动通常去抖动影响的方法有硬、软件两种。(2)对按键进行编码以给定键值或直接给出键号①监测有无键按下;②有键按下后,在无硬件去抖动电路时,应用软件延时方法除去抖动影响;③有可靠的逻辑处理办法;④输出确定的键号以满足散转指令要求。10.1.2独立式按键1.独立式按键结构GNDVCCGNDVCC或(b)8051(a)INT08051P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.72.独立式按键的软件编制这段程序的作用是当检测到相应的键按下时转向每个按键的功能程序。START:MOVA,#0FFH;置输入方式MOVP1,AL1:MOVA,P1;输入键状态CJNEA,#0FFH,L3;有键按下转L3LCALLDELAY;延时5mS,省略SJMPL1L3:LCALLDELLAY;延时5mSLCALLDELLAY;延时5mSMOVA,P1;再读P1口CJNEA,#0FFH,L2;确实有键按下转L2SJMPL1;误读键,返回L2:JNBACC.0,TAB0;为0转0号键首地址JNBACC.1,TAB1;为1转1号键首地址……..SJMPL1;再次读入键状态TAB0:LJMPOPR0;转向0号键功能程序TAB1:LJMPOPR110.1.3行列式键盘1.行列式键盘电路的结构及原理VCC01234567891011121314151617181920212223242526272829303110K×4P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0P2.0P2.1P2.2P2.389S51图10-3单片机I/O口组成的行列式键盘2.键盘的工作方式(l)循环扫描方式循环扫描的原理:键盘扫描程序一般应具备下述几个功能:判断键盘上有无键按下;去除键的抖动影响;扫描键盘,得到按下键的键号;判别闭合的键是否释放。图10-3中32个键的键值从左上角的数字“0”键开始对应为如下分布:00H,01H,02H,03H,04H,05H,06H,07H08H,09H,0AH,0BH,0CH,0DH,0EH,0FH10H,11H,12H,13H,14H,15H,16H,17H18H,19H,1AH,1BH,1CH,1DH,1EH,1FH由以上分布可以总结出:闭合键的键码值=行首键号+列号例如,当P1口的输出为F7H(11110111B),即其第3列有输出,读出P2口低4位的值为0DH(1101B),说明是第1行与第3列相交的键闭合,则键号=8+3=11。读键盘程序如下:KEY:LCALLKS;调用KS判别有键按下吗?JNZK1;有键按下转移LCALLDELAY;无键按下,调延时子程序LJMPKEYK1:LCALLDELAY;加长延时时间,消除键抖动LCALLDELAYLCALLKS;调用KS子程序再次判别有无键闭合JNZK2;键按下,转逐列扫描LJMPKEY;误读键,返回K2:MOVR2,#0FEH;首列扫描字送R2MOVR4,#00H;首列号送R4K3:MOVA,R2MOVP1,A;列扫描字送P1口MOVA,P2;读取行扫描值JBACC.0,L1;第0行无键按下,转查第1行MOVA,#00H;第0行有键按下,该行的行首键号#0H送ALJMPLK;转求键号L1:JBACC.1,L2;第1行无键按下,转查第2行MOVA,#08H;第1行有键按下,该行行首键号#08H送ALJMPLK;转求键号L2:JBACC.2,L3;第2行无键按下,转查第3行MOVA,#l0H;第2行有键按下,该行的行首键号#l0H送ALJMPLK;转求键号L3:JBACC.3,NEXT;第3行无键按下,改查下一列MOVA,#18H;第3行有键按下,该行的行首键号;#l8H送ALK:ADDA,R4;形成键码送入APUSHACC;键码入栈保护K4:LCALLDELAYLCALLKS;等待键释放JNZK4;未释放,等待POPACC;键释放,弹栈送ACCRET;键扫描结束,返回NEXT:INCR4;修改列号,指向下一列MOVA,R2JNBACC.7,KEY;第7位为0,已扫描完最高列转KEYRLA;未扫描完,扫描字左移一位,变为下列扫描字MOVR2,A;扫描字暂存R2LJMPK3;转下列扫描KS:MOVA,#0MOVP1,A;全扫描字#00H送P1口MOVA,P2;读入P2口行状态CPLA;变正逻辑,以高电平表示有键按下ANLA,#0FH;屏蔽高4位RET;出口状态:A0时有键按下(2)中断工作方式采用中断扫描工作方式可提高CPU的工作效率。一种简易键盘接口如图10-5所示。0123456789ABCDEF89C51INT0P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.010K×4+5V图10-5中断方式键盘电路线路反转程序如下:ORG0000HLJMPSTARTORG0003LJMPFZH;转读键值程序ORG0030HSTART:MOVSP,#50HMOVP1,#0FHMOVIE,#81H;CPU和T0开中断…SJMP$ORG0080H;读键值中断程序FZH:SETBRS0;选择第1组工作寄存器MOVP1,#0F0H;设P1.0~P1.3输出0MOVA,P1;读P1口ANLA,#0F0H;屏蔽低4位,保留高4位MOVB,A;P1.4~P1.7的值存BMOVP1,#0FH;反转设置,设P1.4~P1.7输出0MOVA,P1ANLA,#0FH;屏蔽高4位,保留低4位ORLA,B;与P1.4~P1.7的值相或,形成键码MOVB,AMOVR0,#00H;置键号初值MOVDPTR,#TAB;LOOP:MOVA,R0MOVCA,@A+DPTR;取键码值CJNEA,B,NEXT2;与按键值相比较,不相等,继续SJMPRR0;相等返回,键码值在A中NEXT2:INCR0;键值加1CJNER0,#10H,LOOP;是否到最后一个键RR0:CLRRS0;恢复第0组工作寄存器RETITAB:DB0EEH,0EDH,0EBH,0E7H;0,1,2,3的键码值DB0DEH,0DDH,0DBH,0D7H;4,5,6,7的键码值DB0BEH,0BDH,0BBH,0B7H;8,9,10,11的键码值DB07EH,07DH,07BH,077H;12,13,14,15的键码值10.2显示器接口10.2.1LED显示器的结构与原理图10-6“8”字型数码管10.2.2LED静态显示方式74HC164DQ7Q1Q0...74HC164DQ7Q1Q0...74HC164DQ7Q1Q0...89C51TXD(0)(1)(7)...............(0)(1)(7)+5VRXD图10-7静态显示电路显示子程序如下:功能:把数据从显示缓冲区送到数码管。入口:要显示的数放在以DIS0为首的8个单元中。出口:把预置的数输出以更新原有的显示。DIR:SETBRS0;保护第0组工作寄存器PUSHACC;保护现场PUSHDPHPUSHDPLMOVR2,#08H;显示8个数码管MOVR0,#DIS7;显示缓冲区末地址送入R0DL0:MOVA,@R0;取要显示的数作查表偏移量MOVDPTR,#TAB;指向字形表首MOVCA,@A+DPTR;查表得字形码MOVSBUF,A;发送显示DL1:JNBTI,DL1;等待发送完一帧CLRTI;清中断标志,准备继续发送DECRO;更新显示单元DJNZR2,DL0;重复显示所有数码管CLRRS0;恢复使用第0组工作寄存器POPDPL;恢复现场POPDPHPOPACCRETTAB:DB0COH,0F9H,0A4H,0BOH,99H;0,1,2,3,4DB92H,82H,0F8H,80H,90H;5,6,7,8,9DB88H,83H,0C6H,0A1H,86H;A,B,C,D,EDB8EH,0BFH,8CH,0FFH;F,-,P,暗10.2.3LED动态显示方式图10-8扫描式显示电路abcdefgDp74LS244ULN2803C0C3C1C4C58255PA0PA1PA2PA3PA4PA5PA6PA7PC5PC0PC4PC3PC2PC1C222468111315171191816141297531A1A1A1A2A2A2A2A13443211Y1Y1Y1Y2Y2Y2Y2Y11223344123456181716151413I1I2I3I4I5I6O1O2O3O4O5O61.动态显示的特点动态扫描方法是用其接口电路把所有数码管的8个笔划段a~g和dp同名端连在一起,而每一个数码管的公共极COM各自独立地受I/O线控制。CPU向字段输出口送出字形码时,所有数码管接收到相同的字形码。但究竟是哪个数码管亮,则取决于COM端,COM端与单片机的I/O口相连接,由单片机输出位码到I/O控制何时哪一位数码管亮。动态扫描用分时的方法轮流控制各个数码管的COM端,使各个数码管轮流点亮。在轮流点亮数码管的扫描过程中,每位数码管的点亮时间极为短暂。但由于人的视觉暂留现象及发光二极管的余辉,给人的印象就是一组稳定的显示数据。1.动态显示的特点优点:当显示位数较多时,采用动态显示方式比较节省I/O口,硬件电路也较静态显示简单。缺点:其稳定度不如静态显示方式。而且在显示位数较多时CPU要轮番扫描,占用CPU较多的时间。这种工作方式是分时轮流选通数码管的公共端,使得各个数码管轮流导通,即各数码管是由脉冲电流导电的(循环扫描一次的时间一般为10ms)。当所有数码管依次显示一遍后,软件控制循环,使每位显示器分时点亮。例如,如果要显示“123DEF”时,位选码、段选码扫描一遍的相应显示状态如表10-2所示。本段程序中,设CWR为8255控制口地址,POA为A口地址,POC为C口地址。DIS0~DIS5是片外显示缓冲区,共6个单元对应6个数码管。程序清单如下:MOD:PUSHACC;保护现场PUSHDPHPUSHDPLMOVR0,#CWR;指向8255控制口MOVA,#82H;设置8255工作方式字MOVX@R0,A;设A口、C口为基本输出方式DIR:MOVR0,#DIS5;指向显示缓冲区首单元MOVR6,#20H;选中最左数码管MOVR7,#00H;设定显示时间MOVDPTR,#TAB;指向字形表首地址DIR1:MOVA,#00HMOVR1,#POC;指向8255C口(位选口)MOVX@R1,A;关断显示MOVXA,@R0;取要显示的数MOVCA,@A+DPTR;查表得字形码。MOVR1,#POA;指向8255A口(字形口)MOVX@R1,A;送字形码MOVA,R6;取位选字MOVR1,#POC;指向位选口MOV@R1,A;送位选字HERE:DJNZR7,HERE;延时INCR0;更新显示缓冲单元CLRCMOVA,R6RRCA;位选字右移MOVR6,AJNCDIR1;未扫描完继续循环POPDPL;恢复现场POPDPHPOPACCRETTAB:DB3FH,06,5BH,4FH,66H,6DH,7DH,07;0~7DB7FH,6FH,77

1 / 76
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功