您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 51单片机 第八章单片机的常用接口技术
1第8章单片机的常用接口技术《单片机原理与应用系统设计》电子工业出版社,2009.72本章主要内容键盘接口显示器接口DAC接口ADC接口外部并行三总线接口大功率器件驱动接口38.1键盘接口独立式按键矩阵键盘4实现键信息输入与执行键功能。抖动时间长短与开关的机械特性有关,一般为5~10ms。为保证CPU对键的一次闭合仅作一次键输入处理,必须去除抖动影响。1.键盘的分类和工作原理2.键盘接口所要解决的问题单片机常用的键盘有全编码键盘和非编码键盘两种,本节着重介绍非编码键盘58.1.1独立式按键1.独立式按键结构VCCP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.789S5110K×86独立式按键结构的键盘是最简单的键盘电路,每个键独立接入一根输入线。这种键盘的优点是结构简单、使用十分方便,目前这种结构的键盘应用还相当普遍,这种键盘的缺点是随着键数数量的增加所占用的I/O口线也增加。独立式按键结构的键盘在没有键按下时,数据输入线均为高电平,当有键按下时,与之对应的数据线将变成低电平。因此可用位指令判别是否有键按下。7程序清单:START:MOVA,#0FFHMOVP1,A;置输入方式L1:MOVA,P1;读入键状态CJNEA,#0FFH,L3;有键按下,转L3SJMPL1;无键按下,转L13L3:LCALLDELAY;延时10msMOVA,P1;再读P1口CJNEA,#0FFH,L2;确实有键按下,转L2SJMPL1;是键抖动,返回L2:JNBACC.0,TAB0;转0号键首地址JNBACC.1,TAB1;转1号键首地址JNBACC.2,TAB2;转2号键首地址JNBACC.3,TAB3;转3号键首地址JNBACC.4,TAB4;转4号键首地址JNBACC.5,TAB5;转5号键首地址JNBACC.6,TAB6;转6号键首地址JNBACC.7,TAB7;转7号键首地址SJMPL1;再次读入键状态2.独立式按键的程序8TAB0:LJMPOPR0;转向0号键功能程序TAB1:LJMPOPR1…TAB7:LJMPOPR7…OPR0:…;0号键功能程序…LJMPSTART;0号键功能程序执行完返回…OPR7:……LJMPSTART98.1.2矩阵键盘独立式按键电路每个按键开关占用一根I/O口线,当按键数较多时,要占用较多的I/O口线。因此在按键数大于8时,通常多采用矩阵式(也称行列式)键盘电路。123456ABCD654321DCBATitleNumberRevisionSizeBDate:26-May-2009SheetofFile:E:\教材参编\第八章图\4行4列矩阵键盘电路图.DDBDrawnBy:R210kR310kR410kR110k0123456789ABCDEFVCCp10p11p12p13p14p15p16p17矩阵式按键电路10CPU先使第一行(P1.4)为“0”,其余行为“1”读输入口P1.0~P1.3的状态,若输入缓冲器的状态全部为“1”,则表示所在行无键按下;若输入缓冲器不全为“1”,说明所在行有键按下,CPU停止当前行线扫描,转入到列线扫描,列线P1.0~P1.3为“0”状态的列表示对应列有键按下。这样,行线与列数交叉键就是扫描到的按键。行线P1.4~P1.7为输出,列线P1.0~P1.3为输入行列式键盘工作原理11键扫描方式程控扫描方式:CPU从执行程序就开始了键盘的扫描,等待来是键盘的命令。定时扫描方式:在程序初始化时,先对定时/计数器进行设置,使其每10ms中断一次,每次中断,CPU将去扫描一次键盘,若两次中断扫描到有键按下(这里考虑了消抖动),CPU将对键作相应的处理。中断扫描方式:采用中断扫描方式必需有外部中断接口,当有键按下时,产生中断请请求,CPU响应中断,在中断服务程序扫描键盘,作相应处理。这是多任务应用系统常用的一种方式。12扫描方式键盘编程判断键盘上有无键按下:先对行进行扫描,当扫描到行线有键按下时,再对列线进行扫描,行线、列线均为“0”状态的键就是当前的按键。去除键的抖动:当扫描到有按键时,软件延时10ms再判该键是否仍是按键,如是则确认该键是当前的按键,若不是,则把它当成是误操作处理。取键值:根据行号、列号建立一个键值数据表,采用MOVCA,@A+DPTR查表指令。键值存于:闭合键的键码值=以(TAB(数据表首地址)+行号+列号)为地址单元中的内容。13由于P1口为双向I/O口,可以采用一种称为“线路反转”的方法识别键值,步骤如下。①P1.0~P1.3输出0,由P1.4~P1.7输入并保存数据到A中;②P1.4~P1.7输出0,由P1.0~P1.3输入并保存数据到B中;③A的高四位与B的低四位组合成为键码值;④查表求得键值。中断方式键盘编程下面以4*4键盘为例来说明键盘扫描程序的编写:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0FEDCBA987654321089S5110k4+5V&INT014线路反转键盘程序如下:ORG0000HLJMPSTARTORG0003H;外部中断入口LJMPFZH;转读键值程序ORG0030HSTART:MOVP1,#0FHMOVIE,#81H;CPU开中断,允许外部中断0的中断……ORG0080H;键盘扫描中断服务程序FZH:SETBRS0;保护第0组工作寄存器(主程序中默认用第0组)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,P1;读P1口ANLA,#0FH;屏蔽高4位,保留低4位ORLA,B;与P1.4~P1.7的值相或,形成键码MOVB,AMOVR0,#00H;置键号初值MOVDPTR,#TAB15LOOP:MOVA,R0MOVCA,@A+DPTR;查表求键值CJNEA,B,NEXT2;与按键值相比较,如果不相等,继续SJMPRR0;相等返回,键值在A中NEXT2:INCR0;键号加1CJNER0,#10H,LOOPRR0: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号按键的键值END168.2显示器接口LED数码管LED数码管的静态显示接口LED数码管的动态显示接口178.2.1LED数码管aabcdefghabcdefghbcdefghgfGNDabedGNDcdp共阳极共阴极符号与引脚LED数码管LED数码管是由发光二极管显示字段的显示器件。在微机应用系统中通常使用的是七段LED。这种显示块有共阴极与共阳极两种。188位LED数码管显示器有8根位选线和64根段选线。根据显示方式不同,位选线与段选线的连接方法不同。段选线控制字符选择,位选线控制数码管的亮、灭。123456ABCD654321DCBATitleNumberRevisionSizeBDate:14-May-2009SheetofFile:E:\教材参编\第八章图\ch8jkjs.ddbDrawnBy:D7D6D5D4D3D2D1D0位选线段选线abfcgdedpabfcgdedpabfcgdedpabfcgdedpabfcgdedpabfcgdedpabfcgdedpabfcgdedp198.2.2LED数码管的静态显示接口数码管既可直接接单片机的口线(如果是P0口的话,只能接共阳极的,接共阴的要接上拉电阻),又可通过锁存器接单片机口线。所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。通过MCU的口线的显示接口电路20静态显示的特点是:原理简单;显示亮度强,无闪烁;但占用I/O资源较多。静态显示电路abfcgde76421910abcdefg5dpdp3comLED8A1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR9U974HC164VCCabfcgde76421910abcdefg5dpdp3comLED1A1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR9U274HC164abfcgde76421910abcdefg5dpdp3comLED2A1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR9U374HC164VCCU189S51RXDTXD21LED数码管静态显示子程序如下。DISP:PUSHACC;保护现场PUSHDPHPUSHDPLMOVSCON,#00H;初始化串行口为工作方式0MOVR1,#08H;显示8个数据MOVR0,#67H;显示缓冲区首地址送R0MOVDPTR,#SEGTAB;字形码表的入口地址LOOP:MOVA,@R0;取一个待显示数据MOVCA,@A+DPTR;查表获取字形码MOVSBUF,A;送串行口输出DELAY:JNBTI,DELAY;等待发送完毕CLRTI;清“0”发送标志DECR0;指针下移一位,准备取下一个待显示数据DJNZR1,LOOP;直到8个数据全显示完22POPDPL;恢复现场POPDPHPOPACCRETSEGTAB:DB0C0H,0F9H,0A4H,0B0H,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,暗238.2.3LED数码管的动态显示接口abcdefgh+5VVCCaedfchgbdfgahcbeP0+5VVCCP1.0P1.1单片机动态显示扫描电路动态扫描显示接口电路。接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。24LED数码管动态显示接口电路PA6PA5PA4PA3PA2PA1PB0PB1PB2PB3PB4PB5AD7AD0ALERDWRIO/MCE8155P0.7P0.0ALERDWRP2.0P2.189S51PA08abfcgdedpabfcgdedpabfcgdedpabfcgdedpabfcgdedpabfcgdedp+5VR774LS072&&754523&&&&Intel25程序清单如下:DISPLAY:MOVR0,#30H;显示缓冲器首地址送R0MOVR2,#20H;位选码指向P0.5DISPLAY1:MOVA,@R0;取出要显示的数MOVDPTR,#SEGTAB;指向字型表首地址MOVCA,@A+DPTR;取出显示码MOVDPTR,#0FD01H;PA口地址送DPTRMOVX@DPTR,A;输出显示码到8155A口MOVA,R2;位选码送AINCDPTR;8155PB口寄存器地址MOVX@DPTR,A;从8155B口输出位选码LCALLDELL;延时1msMOVA,R2JNBACC.0,DISPLAY2;6位全显示完了吗?未完,则继续RET26DISPLAY2:INCR0;计算下一位要显示的数的地址MOVA,R2;求下一个位选码RRA;没有到,右移一位MOVR2,AAJMPDISPLAY1DELL:MOVR3,#7DHDELL1:NOPNOPDJNZR3,DELL1RETSEGTAB:DB3FH,06H,5BH,4FH,66H;字符0,1,2,3,4的字形码DB6DH,7DH,07H,7FH,6FH;字符5,6,7,8,9的字形码278.3DAC接口DAC0832与单片机的接口TLC5618与单片机的接口28DAC芯片有多种类型:按DAC的性能分,有通用、高速和高精度等转换器;按内部结构分,有不包含数据寄存
本文标题:51单片机 第八章单片机的常用接口技术
链接地址:https://www.777doc.com/doc-3553883 .html