您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 第五章单片机的输入输出设备接口
第五章单片机的输入/输出设备接口第一节键盘接口编码键盘:硬件方式产生编码非编码键盘:软件方式产生编码非编码键盘:结构简单、成本低廉键按行列构成矩阵,每一个交叉点对应一个键,实际是一个机械开关。非编码键盘的接口技术的主要内容是如何确定被按键的行列位置。一、键盘接口概述1.单片机实现键盘接口的常用方法独立式键盘:由一组相互独立的按键组成,每个按键与一位I/O口相连,接口简单,但是占用I/O口较多。矩阵式按键:键按行列组成矩阵,行和列相交处安放一个按键,每条行线或列线与一位I/O相连,节省I/O资源。2.键盘输入接口解决的任务⑴键盘扫描和去抖动按键开关在电路中的连接图按键未按下时,A点的电平位+5V;按下时,A点的电平位低电平;由于按键是机械的弹性开关,在按下和断开时,触点在闭合和断开时,会引起A点电位的不稳定,一般有5~10ms的抖动,导致误信号,使CPU产生错误的处理。硬件去抖动方法:R-S触发器消抖电路+5V闭合断开滤波消抖电路软件去抖方法:采用延迟躲过抖动,待信号稳定后,再进行键扫描。延迟时间10~20ms。⑵键值或键号的计算当确定有键按下时,需进一步根据行线和列线的状态确定按下键的值或键号,以实现键功能的程序。⑶等待键释放获得键值后在以延时或查询的方法等待键释放,以保证键的一次闭合只进行一次键功能的实现。⑷确定键盘的监控方法•中断方式执行。当有键被按下时,向单片机发出中断请求,中断响应后执行键盘扫描工作。•定时方式执行。利用内部定时计数器完成一段时间的重复定时,每次定时完成执行一次键盘扫描工作。二、独立式按键独立式按键:每个按键单独占有一根I/O资源,当按键较多时,I/O资源占用较多。其优点是程序设计简单。eg、三个按键与8031的连接电路,试编制按键扫描子程序。KEY:MOVP1,#07HMOVA,P1CPLAANLA,#07HJZGRETJBACC.0,KEY1JBACC.1,KEY2JBACC.2,KEY3GRET:RETKEY1:LCALLWORK1KEY2:LCALLWORK2KEY3:LCALLWORK3RET三、矩阵式按键1.矩阵式键盘的工作原理X0~X3为键盘的行线,通过电阻接+5V;Y0~Y3为键盘的列线,由单片机控制其输入信号。每条行线和列线处有一个按键结构,当所有键未被按下时,行线与列线断开,每条行线都呈现高电平。当有键被按下时,按键所在行线与列线短路,此时行线的电平由列线的电位所决定。2.矩阵式键盘接口4×8键盘、6位显示器和803l的接口逻辑。图中8031外接一片8155,8155的RAM地址为7E00~7EFFH,I/O口地址为7F00~7F05H,8155的PA口为输出口,控制键盘的列线Y0~Y7的电位作为键扫描口,同时又是6位显示器的扫描口,PB口作为显示器的段数据口,8155的C口作为输入口,PC0~PC3接行线Y0~Y3,称为键输入口。3.键盘扫描程序键输入程序的功能:(1)判别键盘上有无键闭合:其方法为扫描口PA0~PA7输出全“0”,读PC口的状态,若PC0~PC3,为全“1”(键盘上行线全为高电平),则键盘上没有闭合键;若PC0~PC3不为全“1”,则有键处于闭合状态。(2)去除键的机械抖动:其方法为判别到键盘上有键闭合后,延迟一段时间再判别键盘的状态,若仍有键闭合,则认为键盘上有一个键处于稳定的闭合期,否则,认为是键的抖动。(3)判别闭合键的键号:方法为对键盘的列线进行扫描,扫描口PA0~PA7依次输出:PA7PA6PA5PA4PA3PA2PA1PA01111111011111101:01111111相应地顺次读出PC口的状态,若PC0~PC3为全“1”,则列线输出为“0”的这一列上没有键闭合;否则,这一列上有键闭合。闭合键的键号等于为低电平的列号加上为低电平的行的首键号。eg、PA口的输出为11111101时,读出PC0~PC3为1101,则1行1列相交的键处于闭合状态,第一行的首键号为8,列号为1,闭合键的键号为:N:行首键号+列号=8+1=9(4)使CPU对键的一次闭合仅作一次处理:采用的方法为等待闭合键释放以后再作处理。程序中把显示子程序作为去抖动延时子程序,这可使得进入键输入子程序后,显示器始终是亮的。该程序返回后输入键的键号在A。键输入子程序的框图:键盘扫描程序如下:KEY1:ACALLKS1;调用判别有无键闭合子程序JNZLK1ACALLDIR;调用显示子程序,延迟6msAJMPKEY1LK1:ACALLDIRACALLDIRACALLKS1;调用判别有无闭合键子程序JNZLK2ACALLDIRAJMPKEY1LK2:MOVR2,#0FEH;扫描初值送R2MOVR4,#00H;扫描列号送R4LK4:MOVDPTR,#7F01H;指向A口MOVA,R2MOVX@DPTR,A;扫描初值送A口INCDPTRINCDPTRMOVXA,@DPTR;读8155C口JBACC.0,LONE;ACC.0=1,第0行无键按下,转LONEMOVA,#00H;装第0行行值AJMPLKP;转去计算键值LONE:JBACC.1,LTWO;ACC.1=1,第1行无键按下,转TWOMOVA,#08H;装第1行行值AJMPLKP;转去计算键值LTWO:JBACC.2,LTHR;ACC.2=1,第2行无键按下,转THRMOVA,#10H;装第2行行值AJMPLKP;转去计算键值LTHR:JBACC.3,NEXT;ACC.3=1,第3行无键按下,转NEXTMOVA,#18H;装第3行值LKP:ADDA,R4;计算键值PUSHACC;保护键值LK3:ACALLDIR;延时6msACALLKS1;查键是否继续闭合,若闭合再延时JNZLK3POPACC;若键起,则键码送ARETNEXT:INCR4MOVA,R2JNBACC.7,KNDRLAMOVR2,AAJMPLK4KND:AJMPKEY1KS1:MOVDPTR,#7F01H;指向A口MOVA,#00HMOVX@DPTR,A;全“0”扫描INCDPTRINCDPTR;指向C口MOVXA,@DPTR;读键入状态CPLAANLA,#0FH;屏蔽高位RETDIR:┅;显示子程序,延迟6ms第二节LED显示器接口一、显示器的结构管脚配置及外形图共阴极共阳极七段LED显示器的显示码(段选码)876543210字型H80H8FH82H92H99H0BH4AH9FH0C共阳极代码FH7H07DH7DH6H66FH4BH5H06FH3共阴极代码灭字型FEDCBA9FFHH84H86H1AH6CH83H88H90共阳极代码H00H71H79EH5H39CH7H77FH6共阳极代码二、显示方式1.LED静态显示方式静态显示方式:当显示器显示某一个字符时,相应的发光二极管恒定地导通或截止。优点:显示稳定,节省CPU时间。缺点:I/O口线多。利用串行口扩展两片静态显示电路设显示缓冲区为30H、31H,由R1作显示缓冲区的地址指针,74LS164的清零端CLR由P1.0控制,低电平有效。程序设计如下:DISP:MOVR6,#02H;显示位数MOVR1,#30H;设显示区指针MOVSCON,#00H;设串行口控制寄存器,方式0LOOP:MOVA,@R1MOVDPTR,#TABMOVCA,@A+DPTR;查表,获得显示码MOVSBUF,A;送去显示JNBTI,$;等待发送完毕CLRTIINCR1;取下一个数DJNZR6,LOOPRETTAB:DBC0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H2.LED动态显示方式动态显示方式:一位一位地轮流点亮各位显示器(扫描)。LED动态接口电路显示缓冲区在RAM中设置,用于存放要显示的数字或字符。5LED4LED3LED2LED1LED0LEDH79AH7BH7CH7DH7EH7位控口地址0FF20H(PA口),段控口地址0FF21H(PB口),控制口地址0FF23H。数码管为共阴极,驱动74LS240为反相器,段码取用“共阳极段选码”;位驱动75451为同相。字位表20H10H08H04H02H01HORG2000HDISUP:MOVP2,#0FFHMOVA,#081H;定义8155工作方式MOVDPTR,#0FF23HMOVX@DPTR,AMOVR0,#79H;显示缓冲区首地址MOVR3,#01H;位选码MOVA,R3DISUP1:CPLAMOVR1,#20H;指向A口MOVX@R1,AINCR1;指向B口MOVA,@R0;取显示数据MOVDPTR,#2100HMOVCA,@A+DPTR;查表取段数据MOVX@R1,ALCALLDL1;延时1msINCR0MOVA,R3JBACC.5,DISUPRLAMOVR3,ASJMPDISUP1ORG2100HDB0C0H,0F9H,0A4H,0B0H,99H92H,82H,0F8H,80H,90HORG2200HDL1:MOVR7,#02HDL:MOVR6,#0FFHDL6:DJNZR6,DL6DJNZR7,DLRET电脑时钟(定时、中断、显示综合实验)以秒、分、时为单位实现时钟计时。1.实现时钟计时的基本方法(1)计数初值计算•定时器的定时时间定为125ms,计数溢出8次即得到时钟计时的最小单位秒,而8次计数用软件方法实现。•T0,方式1,fosc=6MHz,计数初值为X,则:(216-X)×2=125000X=6070,二进制表示为1011110110110,十六进制表示为17B6H。(2)采用中断方式进行溢出次数的累计。计满8次即得到秒计时。(3)从秒到分和从分到时的计时是通过累加和数值比较实现。(4)时钟显示及显示缓冲区2.程序流程及程序清单(1)主程序(MAIN)主程序的主要功能是进行定时器/计数器的初始化编程,然后通过反复调用显示子程序的方法,等待125ms定时中断的到来。(2)显示子程序(DISUP)ORG0000HSTART:LJMPMAINORG000BHLJMPPITOORG1000H;主程序MAIN:MOVSP,#60H;定义堆栈MOVR0,#79H;显示单元清0MOVR7,#06HML1:MOV@R0,#00HINCR0DJNZR7,ML1MOVTMOD,#01HMOVTL0,#B6HMOVTH0,#17HSETBTR0SETBEASETBET0MOV30H,#08H;设置循环次数ML0:LCALLDISUP;调用显示子程序SJMPML0(3)中断服务程序(PITO)中断服务程序的主要功能是进行计时操作。程序开始先判断计数溢出是否满了8次,不满8次表明还没达到最小计时单位秒,中断返回;如满8次则表明已达到最小计时单位秒,程序继续向下执行,进行计时操作。ORG1200H;中断服务程序PITO:PUSHPSW;现场保护PUSHACCSETBPSW.3MOVTL0,#0B6H;置定时器初值MOVTH0,#17HMOVA,30HDECAMOV30H,AJNZRET0MOV30H,#08HMOVR0,#7AHACALLDAADl;秒+1MOVA,R2XRLA,#60HJNZRET0ACALLCLR0;秒单元清0MOVR0,#7CHACALLDAAD1;分+1MOVA,R2XRLA,#60HJNZRET0ACALLCLR0;分单元清0MOVR0,#7EHACALLDAAD1;时+1MOVA,R2XRLA,#24HJNZRT0ACALLCLR0;时单元清0RET0:POPACCPOPPSWRETI(4)加1子程序(DAAD1)加1子程序用于完成对秒、分和时的加1操作。中断服务程序中在秒、分、时加1时共有三处调用此子程序。ORG1400H;加1子程序DAAD1:MOVA,@R0DECR0SWAPAORLA,@R0ADDA,#01HDAAMOVR2,AANLA,#0FHMOV@R0,AMOVA,R2INCR0ANLA,#0F0HSWAPAMOV@R0,ARET(5)显示单元清0子程序(CLR0)ORG1500HCLR0:CLRAMOV@R0,ADE
本文标题:第五章单片机的输入输出设备接口
链接地址:https://www.777doc.com/doc-1314654 .html