您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 述职报告 > 第8章 接口技术 将汇编程序改为c程序 原理图部分需要更改
第8章接口技术教学目的:了解80C51系列单片机与键盘、显示器、模/数、数/模转换器等外设连接的技术。教学重点:1.键盘接口的工作原理及应用;2.LED显示器接口的工作原理及应用。3.并行A/D、D/A的工作原理及应用。教学难点:1.液晶显示器的原理及应用2.键盘接口的工作原理。8.1键盘接口键盘电路的设计应使CPU不仅能识别是否有键按下,还要能识别是哪一个键按下,而且能把此键所代表的信息翻译成计算机所能接收的形式。在单片机应用系统中多采用非编码键盘,其分为独立式键盘和矩阵式键盘,硬件上此类键盘只提供通、断两种状态,其它工作都靠软件来完成。8.1.1键盘工作原理1.键输入原理2.键输入接口与软件应解决的问题(l)键开关状态的可靠输入通常去抖动影响的方法有硬、软件两种。图8-1键闭合及断开时的电压波动(2)对按键进行编码以给定键值或直接给出键号①监测有无键按下;②有键按下后,在无硬件去抖动电路时,应用软件延时方法除去抖动影响;③有可靠的逻辑处理办法;④输出确定的键号以满足散转指令要求。8.1.2独立式按键1.独立式按键结构在此电路中,按键输入都设置为低电平有效,上拉电阻保证了按键断开时,I/O口线有确定的高电平。89C51I/OVCC图8-2独立式按键电路2.独立式按键的软件编制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号键首地址JNBACC.2,TAB2;为2转2号键首地址JNBACC.3,TAB3;为3转3号键首地址JNBACC.4,TAB4;为4转4号键首地址JNBACC.5,TAB5;为5转5号键首地址JNBACC.6,TAB6;为6转6号键首地址JNBACC.7,TAB7;为7转7号键首地址SJMPL1;再次读入键状态TAB0:LJMPOPR0;转向0号键功能程序TAB1:LJMPOPR1……..TAB7:LJMPOPR7……..OPR0:……..;0号键功能程序LJMPSTART;0号键程序执行完返回……0PR7:……..;7号键功能程序…….LJMPSTART;7号键程序执行完返回8.1.3行列式键盘1.行列式键盘电路的结构及原理VCC01234567891011121314151617181920212223242526272829303110K×4P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0P2.0P2.1P2.2P2.389S51图8-3单片机I/O口组成的行列式键盘2.键盘的工作方式(l)循环扫描方式键盘扫描程序一般应具备下述几个功能:判断键盘上有无键按下;去除键的抖动影响;扫描键盘,得到按下键的键号;判别闭合的键是否释放。图8-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行线P2.0~P2.3处于输入状态,列线P1.0~P1.7为输出状态。按键设置在行、列线交点上,当某个键闭合时,则对应的行线和列线短路,行线输入即为列线输出。获取这32个键值时,P1口和P2口输出与输入的相应值为如下分布:012345670FE×EFD×EFB×EF7×EEF×EDF×EBF×E7F×E8FE×DFD×DFB×DF7×DEF×DDF×DBF×D7F×D10FE×BFD×BFB×BF7×BEF×BDF×BBF×B7F×B18FE×7FD×7FB×7F7×7EF×7DF×7BF×77F×7由以上分布可以总结出:闭合键的键码值=行首键号+列号例如,当P1口的输出为F7H(11110111B),即其第3列有输出,读出P2口低4位的值为0DH(1101B),说明是第1行与第3列相交的键闭合,则键号=8+3=11。读键盘程序如下:KEY:LCALLKS;调用KS判别有键按下吗?JNZK1;有键按下转移LCALLDELAY;无键按下,调延时子程序LJMPKEYK1:LCALLDELAY;加长延时时间,消除键抖动LCALLDELAYLCALLKS;调用KS子程序再次判别有无键闭合JNZK2;键按下,转逐列扫描LJMPKEY;误读键,返回K2:MOVR2,#0FEH;首列扫描字送R2MOVR4,#00H;首列号送R4K3:MOVA,R2MOVP1,A;列扫描字送P1口MOVA,P2;读取行扫描值JBACC.0,L1;第0行无键按下,转查第1行MOVA,#00H;第0行有键按下,该行的行首键号#0H送ALJMPLK;转求键号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,R2JNBACC.7,KEY;第7位为0,已扫描完最高列转KEYRLA;未扫描完,扫描字左移一位,变为下列扫描字MOVR2,A;扫描字暂存R2LJMPK3;转下列扫描KS:MOVA,#0MOVP1,A;全扫描字#00H送P1口MOVA,P2;读入P2口行状态CPLA;变正逻辑,以高电平表示有键按下ANLA,#0FH;屏蔽高4位RET;出口状态:A0时有键按下(2)中断工作方式采用中断扫描工作方式可提高CPU的工作效率。一种简易键盘接口如图8-5所示。0123456789ABCDEF89C51INT0P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.010K×4+5V图8-5中断方式键盘电路由于P1口为双向I/O口,可以采用“线路反转”法识别键值。步骤如下:(1)P1.0~P1.3输出0,由P1.4~P1.7输入并保存数据到A中;(2)P1.4~P1.7输出0,由P1.0~P1.3输入并保存数据到B中;(3)A的高四位与B的低四位相或成为键码值;(4)查表求得键号。线路反转程序如下:ORG0000HLJMPSTARTORG0003LJMPFZH;转读键值程序ORG0030HSTART:MOVSP,#50HMOVP1,#0FHMOVIE,#81H;CPU和外部中断0开中断…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的键码值8.2显示器接口8.2.1LED显示器的结构与原理图8-6“8”字型数码管8.2.2LED静态显示方式74HC164DQ7Q1Q0...74HC164DQ7Q1Q0...74HC164DQ7Q1Q0...89C51TXD(0)(1)(7)...............(0)(1)(7)+5VRXD图8-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,暗8.2.3LED动态显示方式图8-8扫描式显示电路abcdefgDp74LS244ULN2803C0C3C1C4C58255PA0PA1PA2PA3PA4PA5PA6PA7PC5PC0PC4PC3PC2PC1C222468111315171191816141297531A1A1A1A2A2A2A2A13443211Y1Y1Y1Y2Y2Y2Y2Y11223344123456181716151413I1I2I3I4I5I6O1O2O3O4O5O6这种工作方式是分时轮流选通数码管的公共端,使得各个数码管轮流导通,即各数码管是由脉冲电流导电的(循环扫描一次的时间一般为10ms)。当所有数码管依次显示一遍后,软件控制循环,使每位显示器分时点亮。例如,如果要显示“123DEF”时,位选码、段选码扫描一遍的相应显示状态如表8-2所示。本段程序中,设CWR为8255控制口地址,POA为A口地址,POC为C口地址。DIS0~DIS5是片外显示缓冲区,共6个单元对应6个数码管。程序清单如下:MOD:PUSHACC;保护现场PUSHDPHPUSHDPLMOVR0,#CWR;指向8255控制口MOVA,#82H;设置8255工作方式字MOVX@R0,A;设A口、C口为基本输出方式DIR:MOVR0,#DIS5;指向显示缓冲区首单元MOVR6,#20H;选中最左数码管MOVR7,#00H;设定显示时间MOVDPTR,#TAB;指向字形表首地址DIR1:MOVA,#00HMOVR1,#POC;指向8255C口(位选口)MOVX@R1,A;关断显示MOVXA,@R0;取
本文标题:第8章 接口技术 将汇编程序改为c程序 原理图部分需要更改
链接地址:https://www.777doc.com/doc-1915591 .html