单片机常用外围设备接口电路课件

上传人:494895****12427 文档编号:252923169 上传时间:2024-11-24 格式:PPT 页数:84 大小:650.24KB
返回 下载 相关 举报
单片机常用外围设备接口电路课件_第1页
第1页 / 共84页
单片机常用外围设备接口电路课件_第2页
第2页 / 共84页
单片机常用外围设备接口电路课件_第3页
第3页 / 共84页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第9章 常用外围设备接口电路,本章要点:,LED数码管及编码方式,静态显示方式及其典型应用电路,动态显示方式及其典型应用电路,虚拟I,2,C总线串行显示电路,键盘去抖动和连接、控制方式,独立式按键及其接口电路,矩阵式键盘及其接口电路,并行A/D ADC0809及其接口电路,串行A/D ADC0832及其接口电路,I,2,C串行A/D典型应用电路,DAC0832及其接口电路,I,2,C串行D/A典型应用电路,开关量驱动输出接口电路,第9章 常用外围设备接口电路本章要点:LED数码管及编码方式,1,9-1 LED数码管显示接口,一、,LED数码管,9-1 LED数码管显示接口一、LED数码管,2,LED显示器的扩展(结构),LED数码管的,结构,:,共阳与共阴,单片机系统扩展LED数码管时,多用,共阳LED,:,共阳数码管每个段笔画是用低电平(“0”)点亮的,要求驱动功率很小;而共阴数码管段笔画是用高电平(“0”)点亮的,要求驱动功率较大。,通常每个段笔画要串一个数百欧姆的,降压电阻,。,公共,阳,极,h g f e d c b a,a,b,c,d,g,e,f,h,公共,阴,极,h g f e d c b a,a,b,c,d,g,e,f,h,h g f a,h g f a,高电平点亮,低电平点亮,接高电平,接地,LED显示器的扩展(结构) LED数码管的结构:,3,LED数码管的软件译码,八段LED数码管,段代码编码表,(连线不同可有多种表):,公共阳极,h g f e d c b a,a,b,c,d,g,e,f,h,公共阴极,h g f e d c b a,a,b,c,d,g,e,f,h,h g f a,h g f a,高电平点亮,低电平点亮,接高电平,接地,字形,0,1,2,3,4,5,6,7,8,9,黑,共阳,0C0,0F9,0A4,0B0,99,92,82,0F8,80,90,0FF,共阴,3F,06,5B,4F,66,6D,7D,07,7F,6F,00,LED数码管的软件译码八段LED数码管段代码编码表(连线不同,4,LED数码管分类:,按,其内部结构可分为,共阴型,和,共阳型,;,按,其外形尺寸有多种形式,使用较多的是,0.5,和,0.8,;,按,显示颜色也有多种形式,主要有,红色,和,绿色,;,正向压降一般为,1.52V,,额定电流为,10mA,,最大电流为,40mA,。,静态显示,时取10mA为宜,,动态扫描显示,,可加大脉冲电流,但一般不超过40mA。,按,亮度强弱可分为,超亮,、,高亮,和,普亮,。,LED数码管分类:按其内部结构可分为共阴型和共阳型; 按其,5,二、,LED数码管编码方式,表9-1 共阴和共阳LED数码管几种八段编码表,显示,数字,共阴顺序小数点暗,共阴逆序小数点暗,共阳顺序,小数点亮,共阳顺序,小数点暗,Dp g f e d c b a,16进制,a b c d e f g Dp,16进制,0,0 0 1 1 1 1 1 1,3FH,1 1 1 1 1 1 0 0,FCH,40H,C0H,1,0 0 0 0 0 1 1 0,06H,0 1 1 0 0 0 0 0,60H,79H,F9H,2,0 1 0 1 1 0 1 1,5BH,1 1 0 1 1 0 1 0,DAH,24H,A4H,3,0 1 0 0 1 1 1 1,4FH,1 1 1 1 0 0 1 0,F2H,30H,B0H,4,0 1 1 0 0 1 1 0,66H,0 1 1 0 0 1 1 0,66H,19H,99H,5,0 1 1 0 1 1 0 1,6DH,1 0 1 1 0 1 1 0,B6H,12H,92H,6,0 1 1 1 1 1 0 1,7DH,1 0 1 1 1 1 1 0,BEH,02H,82H,7,0 0 0 0 0 1 1 1,07H,1 1 1 0 0 0 0 0,E0H,78H,F8H,8,0 1 1 1 1 1 1 1,7FH,1 1 1 1 1 1 1 0,FEH,00H,80H,9,0 1 1 0 1 1 1 1,6FH,1 1 1 1 0 1 1 0,F6H,10H,90H,二、LED数码管编码方式 表9-1 共阴和共阳LED数码管,6,【例9-1】已知显示数存在内RAM 30H(高位)、31H中,试将其转换为5位共阴字段码(顺序),存在以30H(高位)为首址的内RAM中。, 从显示数中分离出显示的每一位数字,方法是将显示数除以十进制的权,显示数,转换,为显示字段码的,步骤,:, 将分离出的显示数字转换为显示字段,码,方法是查表,【例9-1】已知显示数存在内RAM 30H(高位)、31H中,7,SPRT: MOV R0,#30H,;置万位BCD码间址,MOV A,30H,;置被除数,MOV B,31H,;,MOV R6,#27H,;置除数10000 = 2710H,MOV R5,#10H,;,LCALL SUM,;除以10000,万位商存30H,余数存A、B,MOV R6,#03H,;置除数1000 = 03E8H,MOV R5,#0E8H ;,INC R0,;指向千位商间址(31H),LCALL SUM,;除以1000,千位商存31H,余数存A、B,MOV R6,#0,;置除数100,MOV R5,#100,;,INC R0,;指向百位商间址(32H),LCALL SUM,;除以100,百位商存32H,余数存A(B=0),MOV B,#10,;置除数10,DIV AB,;除以10,INC R0,;指向十位商间址(33H),MOV R0,A,;十位商存33H,XCH A,B,;读个位数,INC R0,;指向个位间址(34H),MOV R0,A,;个位存34H,RET,;,解:连续调用下列二个子程序即可。, 分离显示数字子程序,说明,:SUM是16位除以16位子程序:(A、B)(R6、R5)=商R0,余数(A、B)。(参阅例4-9),SPRT: MOV R0,#30H ;置,8, 转换显示字段码子程序,CHAG: MOV DPTR,#TAB,;置共阴字段码表首址,MOV R0,#30H,;置显示数据区首址,CGLP: MOV A,R0,;取显示数字,MOVC A,A+DPTR,;读相应显示字段码,MOV R0,A,;存显示字段码,INC R0,;指向下一显示数字,CJNE R0,#35H,CGLP,;判5个显示数字转换完否?未完继续,RET,;转换完毕,结束,TAB: DB 3FH,06H,5BH,4FH,66H,;共阴字段码表,DB 6DH,7DH,07H,7FH,6FH,;, 转换显示字段码子程序CHAG: MOV DPTR,9,三、,静态显示方式及其典型应用电路,动态显示方式,,在某一瞬时显示一位,依次循环扫描,轮流显示,由于人的视觉滞留效应,人们看到的是多位同时稳定显示。,特点,:占用I/O端线少,电路较简单,编程较复杂,CPU要定时扫描刷新显示。一般适用于显示位数较多的场合。,LED数码管显示分类:静态显示方式和动态显示方式。,静态显示方式,,每一位字段码分别从I/O控制口输出,保持不变直至CPU刷新。,特点,:编程较简单,但占用I/O口线多,一般适用于显示位数较少的场合。,三、静态显示方式及其典型应用电路 动态显示方式,在某一瞬时,10,LED显示器的扩展(显示方式),LED数码管的,显示方式,:,静态与动态,动态显示特点:,有闪烁,,用,元器件少,,,占I/O线少,,,必须扫描,,,花费CPU时间,,,编程复杂。,(有多个LED时尤为突出),静态显示特点:,无闪烁,,用,元器件多,,,占I/O线多,,,无须扫描,,,节省CPU时间,,,编程简单。,静态显示:,各数码管在显示过程中,持续,得到送显信号,与各数码管接口的,I/O口线,是,专用,的。,动态显示:,各数码管在显示过程中,轮流,得到送显信号,与各数码管接口的,I/O口线,是,共用,的。,LED显示器的扩展(显示方式) LED数码管的显示方式:,11,1、,并行扩展静态显示电路,1、并行扩展静态显示电路,12,【例9-2】按图9-3编制显示子程序,显示数(255)存在内RAM 30H中。解:,DIR1: MOV A,30H,;读显示数,MOV B,#100,;置除数,DIV AB,;产生百位显示数字,MOVC A,A+DPTR,;读百位显示符,MOV DPTR,#0DFFFH,;置74377(百位)地址,MOVX DPTR,A,;输出百位显示符,MOV A,B,;读余数,MOV B,#10,;置除数,DIV AB,;产生十位显示数字,MOV DPTR,#TAB,;置共阳字段码表首址,MOVC A,A+DPTR,;读十位显示符,MOV DPTR,#0BFFFH,;置74377(十位)地址,MOVX DPTR,A,;输出十位显示符,MOV A,B,;读个位显示数字,MOV DPTR,#TAB,;置共阳字段码表首址,MOVC A,A+DPTR,;读个位显示符,MOV DPTR,#7FFFH,;置74377(个位)地址,MOVX DPTR,A,;输出个位显示符,RET,;,TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,;共阳字段码表,DB 92H,82H,0F8H,80H,90H;,【例9-2】按图9-3编制显示子程序,显示数(255)存在,13,2、,串行,扩展静态显示电路,2、串行扩展静态显示电路,14,DIR2: MOV SCON,#00H,;置串口方式0,CLR ES,;串口禁中,SETB P1.0,;“与”门开,允许TXD发移位脉冲,MOV SBUF,30H,;串行输出个位显示字段码,JNB TI,$,;等待串行发送完毕,CLR TI,;清串行中断标志,MOV SBUF,31H,;串行输出十位显示字段码,JNB TI,$,;等待串行发送完毕,CLR TI,;清串行中断标志,MOV SBUF,32H,;串行输出百位显示字段码,JNB TI,$,;等待串行发送完毕,CLR TI,;清串行中断标志,CLR P1.0,;“与”门关,禁止TXD发移位脉冲,RET,;,【,例9-3】按图9-4编制显示子程序,显示字段码已分别存在32H30H内RAM中。,解:,DIR2: MOV SCON,#00H ;置,15,要求:,根据上图编写通过串行口和74LS164驱动,共,阳LED数码管,查表显示的子程序。,条件:,系统有6个LED数码管,待显数据(00H09H)已放在,35H30H,单元中(分别对应,十万位,个位,),,DSPLY,:MOV DPTR, #TABLE,;共阳LED数码管译码,表首址,MOV R0,#30H,;待显数据缓冲区的,个位,地址,REDO:MOV A, R0,;通过R0实现寄存器,间接寻址,MOVC A, A+DPTR,;,查表,MOV SBUF, A,;经串行口,发送,到74LS164,JNB TI, $,;,查询,送完一个字节的第8位?,CLR TI,;为下一字节发送,作准备,INC R0,;R0,指向下一个,数据缓冲单元,CJNE R0,#36H,REDO,;判断,是否发完,6个数?,RET,;发完6个数就,返回,TABLE,:DB 0C0H,0F9H,0A4H,0B0H,99H,;共阳LED译码表,DB 92H, 82H, 0F8H, 80H,90H,要求:根据上图编写通过串行口和74LS164驱动共DSPLY,16,3、,BCD码输出静态显示电路,CD4511是“,BCD码七段共阴译码/驱动,”IC;,4511是4线-7段锁存/译码/驱动电路,能将BCD码译成7段显示符输出。图中:4511 ABCD为09二进制数输入端(A是低位),,abcdefg为显示段码输出端,LE为输入信号锁存控制(低电平有效),数码管为共阴数码管。,3、BCD码输出静态显示电路 CD4511是“BCD码七段,17,利用4511实现静态显示与一般静态显示电路不同,,一是,节省I0端线,段码输出只需4根;,二是,不需专用驱动电路,可直接输出;,三是,不需译码,直接输出二进制数,编程简单;,缺点是,只能显示数字,不能显示各种符号。,利用4511实现静态显示与一般静态显示电路不同,一是,18,解:编程如下:,DIR3: MOV P1,#111,0,0000B,;选通个位,ORL P1,30H,;输出个位显示数,MOV P1,#11,0,10000B,;选通十位,ORL P1,31H,;输出十位显示数,MOV P1,#1,0,110000B,;选通百位,ORL P1,32H,;输出百位显示数,RET,;,【例9-4】按图9-5试编制显示子程序(小数点固定在第二位),已知显示数存在内RAM 30H32H中。,解:编程如下:【例9-4】按图9-5试编制显示子程序(小数点,19,动态显示电路,连结形式:,显示各位的所有,相同字段线连在一起,,共8段,由一个8位,I/O口控制;,每一位的公共端,(共阳或共阴COM),由另一个I/O口控制。,四、,动态显示方式,及其典型应用电路,动态显示电路四、动态显示方式,20,LED数码管,动态,显示举例,P1.5 P1.4P1.3P1.2P1.2P1.0,P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0,7406 OC门 X 3,上拉电阻14,+5V,AT89C51,工作原理,:,从,P0口送段代码,P1口送位选信号,。段码虽同时到达 6个LED,但,一次仅一个LED被选中,。利用,“视觉暂留”,,每送一个字符并选中相应位线,延时一会儿,再送/选下一个,循环扫描,即可。,共阴 数码管,位选线,段代码,LED数码管动态显示举例P1.5 P1.4P1.3P1.2P,21,P1.5 P1.4P1.3P1.2P1.2P1.0,P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0,7406 OC门 X 3,+5V,AT89C51,位选线,段代码,要求,:,此处为共阴数码管,P0口送段代码,P1口送位选信号。通过查表实现动态显示。,条件,:,待显数据(00H09H)已放在:,7FH7AH,单元中(分别对应,十万位,个位,),说明,:,由于用了,反相驱动器7406,,要用共阳译码表。,共阴 数码管,上拉电阻14,P1.5 P1.4P1.3P1.2P1.2P1.0P0.7,22,7406 OC门 X 3,+5V,(7FH) (7EH) (7DH) (7CH) (7BH) (7AH),十万 万位 千位 百位 十位 个位,数据缓冲区 / 显示缓冲区,P0口,送段代码,,P1口,送位选信号。,待显数据,已经放在:,7FH7AH,单元(分别对应,十万位,个位,),使用共阳译码表,。,7406 OC门 X 3+5V(7FH) (7EH),23,DIR,: MOV DPTR,#DSEG,;数码管译码,表首址,MOV R0,#7AH,;待显缓冲区,个位,地址,MOV R3,#01H,;个位的,位选信号=01H,LD1,: MOV A, R0,;通过R0,间接寻址,MOVC A, A+DPTR,;,查表,MOV P0, A,;字段码送到,P0口,MOV P1,R3,;字位选择送到,P1口,LCALL DELY,;,调延时1ms子程序,INC R0,;R0,指向下一字节,MOV A,R3,JB ACC.5,,LD2,;判,是否发完,6个数?,RL A,;R1,指向下一个位,MOV R3,A,;位选信号存回R1,SJMP,LD1,;跳去再显示下一个数,LD2:,RET,;发完6个数就,返回,DSEG,:DB 0C0H,0F9H,0A4H,0B0H,99H,;共阳译码表,DB 92H, 82H, 0F8H,80H,90H,P0口,送段代码,,P1口,送位选信号。,待显数据,已经放在:,7FH7AH,单元(分别对应,十万位,个位,),使用共阳译码表,。,DIR: MOV DPTR, #DSEG ;数码管译,24,动态,显示举例,(,循环显示“8”的实验),实验箱,从P0口扩展了两个8位的简单I/O口:,一个送段代码(,字形状,),地址是,0DCH,;,一个送位选信号(,字位置,),地址是,0DDH,。,ORG 0000H MOV R0,#,0DCH,;指向,字形口,MOV A, #80H ;送“8”的字形代码,MOVX,R0,A,;输出字形代码 MOV R1,#,0DDH,;指向,字位口,MOV A,#20H ;从最高位开始LEDO:,MOVX,R1,A,;输出字位代码 ACALL DEYS ;调延时子程序 RR A ;右移一位 SJMP LEDO ;循环显示“8”,动态显示举例 (循环显示“8”的实验) ORG 0,25,1、,共阴型8位动态显示电路,1、共阴型8位动态显示电路,26,DIR4:MOV R2,#10,;置循环扫描次数,MOV DPTR,#7FFFH,;置74377口地址,DLP1:ANL P1,#11111000B,;第0位先显示,MOV R0,#30H,;置显示字段码首址,DLP2:MOV A,R0,;读显示字段码,MOVX DPTR,A,;输出显示字段码,LCALL DY2ms,;调用延时2ms子程序(参阅例4.13),INC R0,;指向下一位字段码,INC P1,;选通下一位显示,CJNE R0,#38H,DLP2,;判8位扫描显示完否?未完继续,DJNZ R2,DLP1,;8位扫描显示完毕,判10次循环完否?,CLR A,;10次循环完毕,显示暗,MOVX DPTR,A,;,RET,;子程序返回,【例9-5】按图9-7,试编制循环扫描(10次)显示子程序,已知显示字段码存在以30H(低位)为首址的8字节内RAM中。,解:编程如下:,DIR4:MOV R2,#10 ;置循环,27,2、,共阳型3位动态显示电路,2、共阳型3位动态显示电路,28,DIR5: MOV DPTR,#0BFFFH,;置74377地址,MOV R2,#100,;置循环显示次数,DIR50: SETB P1.2,;百位停显示,MOV A,40H,;取个位字段码,MOVX DPTR,A,;输出个位字段码,CLR P1.0,;个位显示,LCALL DY2ms,;调用延时2ms子程序(参阅例4.13),DIR51: SETB P1.0,;个位停显示,MOV A,41H,;取十位字段码,MOVX DPTR,A,;输出十位字段码,CLR P1.1,;十位显示,LCALL DY2ms,;延时2ms,DIR52: SETB P1.1,;十位停显示,MOV A,42H,;取百位字段码,MOVX DPTR,A,;输出百位字段码,CLR P1.2,;百位显示,LCALL DY2ms,;延时2ms,DJNZ R2,DIR50,;判循环显示结束否?未完继续,ORL P1,#00000111B,;3位灭显示,RET,;,【例9-6】根据图9-8电路,试编制3位动态扫描显示程序(循环100次),已知显示字段码存在以40H(低位)为首址的3字节内RAM中。,解:编程如下:,DIR5: MOV DPTR,#0BFFFH ;置,29,1、,SAA1064引脚功能,五、,虚拟I,2,C总线串行显示电路,V,DD,、V,EE,:电源、接地端。电源4.515V;,P1P16,:段驱动输出端。分为两个8位口:,P1P8;P9P16。P8、P16为高位。口锁存器具有反相功能,置1时,端口输出0。,MX1、MX2,:位码驱动端。静态显示驱动时,一片SAA1064可驱动二位LED数码管;动态显示驱动时,按图9-10连接方式,一片SAA1064可驱动四位LED数码管;,SDA、SCL,:I,2,C总线数据端、时钟端;,C,EXT,:时钟振荡器外接电容,典型值2700pF,ADR,:地址引脚端。SAA1064引脚地址A1、A0采用ADR模拟电压比较编址。当ADR引脚电平为0、3VDD/8,5VDD/8、VDD时,相应引脚地址A2、A1、A0 分别为000、001、010、011;,1、SAA1064引脚功能 五、虚拟I2C总线串行显示电路,30,2、,硬件电路设计,2、硬件电路设计,31,片内寄存器,符号,COM,data1,data2,data3,data4,装载内容,控制命令,显示段码1,显示段码2,显示段码3,显示段码4,片内地址,00H,01H,02H,03H,04H,3、,片内可编程功能,控制命令COM,COM,D7,D6,D5,D4,D3,D2,D1,D0,00H,C6,C5,C4,C3,C2,C1,C0,CO,: 静动态控制,C0=1,动态显示,动态显示时,data1、data2轮流从P8P1输出,data3、data4轮流从P16P9输出;,C1,: 显示位1、3亮暗选择,C1=1,选择亮;,C2,: 显示位2、4亮暗选择,C2=1,选择亮;,C3,: 测试位,C3=1,所有段亮;,C4,、,C5,、,C6,: 驱动电流控制位,C4、C5、C6分别为1时,驱动电流分别为3mA、6mA、12mA;C4、C5、C6全为1时,驱动电流最大,可达21mA。, 片内寄存器 符号COMdata1data2data3da,32, 写数据操作格式,S,SLA,W,A,SADR,A,COM,A,data1,A,data2,A,data3,A,data4,A,P,红色,部分由80C51发送,SAA1064接收;,黑色部分由SAA1064发送,80C51接收。,SLA,W,为写SAA1064寻址字节,,按图9-10所示连接电路:SAA1064(1)SLA,W,=01110000B;,SAA1064(2)SLA,W,=01110110B。,其中0111(D74)为SAA1064器件地址,,D31为A2A1A0寻址字节,,末位D0为R/W;,SADR,为片内寄存器地址;,COM,为控制命令。, 写数据操作格式 SSLAWASADRACOMAdata1,33,解:,VSAA: MOV MTD,#00H ;,置SAA1064控制命令寄存器COM片内子地址,MOV 31H,#01000111B;,置控制命令字,动态显示,驱动电流12mA,MOV NUMB,#6 ;,置发送数据数:SADR+COM+data14=6,SAA1: MOV RO,#51H ;,将51H54H显示符数据移至32H35H,LCALL MOVB ;,MOV SLA,#01110000B;,置SAA1064(1)写寻址字节SLA,W,LCALL WRNB ;,发送给SAA1064(1),SAA2: MOV R0,#55H ;,将55H58H显示符数据移至32H35H,LCALL MOVB ;,MOV SLA,#01110110B;,置SAA1064(2)寻址字节SLA,W,LCALL WRNB ;,发送给SAA1064(2),RET ;,MOVB: MOV R1,#32H ;,显示符数据移至32H35H子程序,MOVB1:MOV A,R0 ;,读出,MOV R1,A ;,存入,INC RO ;,指向下一读出单元,INC R1 ;,指向下一存入单元,CJNE R1,#36H,MOVB1 ;,判4个数据移完否?未完继续,RET ;,【,例9-7】已知8位显示符(共阴编码)已依次存入内RAM 51H58H中,试按图9-10编程将其输入SAA1064(1),(2)动态显示,驱动电流为12mA。设VIIC软件包已装入ROM,VSDA.VSCL.SLA.NUMB.MTD.MRD均已按8.3.2软件包小结中协议定义。,4、,程序设计,解:VSAA: MOV MTD,#00H ;,34,1、,按键开关去抖动问题,9-2 键盘接口,一、,键盘接口概述,键盘的抖动时间一般为510ms,,抖动现象会引起CPU对一次键操作进行多次处理,从而可能产生错误,。,1、按键开关去抖动问题 9-2 键盘接口一、键盘接口概述,35,硬件去抖动,消除抖动不良后果的方法:,其中,RC滤波电路去抖动电路简单实用,效果较好,。,软件去抖动,检测到按键按下后,执行,延时10ms子程序后再确认,该键是否确实按下,消除抖动影响。, 硬件去抖动 消除抖动不良后果的方法:其中RC滤波电路去抖,36,2、,按键连接方式,独立式按键,独立式按键是每个按键占用一根I/O端线,。 特点:,各按键相互独立,电路配置灵活;,按键数量较多时,I/O端线耗费较多,电路结构繁杂;,软件结构简单。,适用于按键数量较少的场合,。 ,矩阵式键盘,I/O端线分为行线和列线,按键跨接在行线和列线上,按键按下时,行线与列线发生短路,。,特点:,占用I/O端线较少;,软件结构教复杂。,适用于按键较多的场合,。,2、按键连接方式 独立式按键 独立式按键是每个,37,3、,键盘扫描控制方式,程序控制扫描方式,键处理程序固定在主程序的某个程序段。,特点,:对CPU工作影响小,但应考虑键盘处理程序的运行间隔周期不能太长,否则会影响对键输入响应的及时性。,定时控制扫描方式,利用定时/计数器每隔一段时间产生定时中断,CPU响应中断后对键盘进行扫描。,特点,:与程序控制扫描方式的区别是,在扫描间隔时间内,前者用CPU工作程序填充,后者用定时/计数器定时控制。定时控制扫描方式也应考虑定时时间不能太长,否则会影响对键输入响应的及时性。,中断控制方式,中断控制方式是利用外部中断源,响应键输入信号。,特点,:克服了前两种控制方式可能产生的空扫描和不能及时响应键输入的缺点,既能及时处理键输入,又能提高CPU运行效率,但要占用一个宝贵的中断资源。,3、键盘扫描控制方式,38,1、,按键直接与I/O口连接,二、,独立式按键及其接口电路,1、按键直接与I/O口连接 二、独立式按键及其接口电路,39,【例9-8】按图9-13(a)、(b),试分别编制按键扫描子程序。,解:按图9-13(a)编程如下:,KEYA:ORL P1,#07H,;置P1.0P1.2为输入态,MOV A,P1,;读键值,键闭合相应位为0,CPL A,;取反,键闭合相应位为1,ANL A,#00000111B,;屏蔽高5位,保留有键值信息的低3位,JZ GRET,;全0,无键闭合,返回,LCALL DY10ms,;非全0,有键闭合,延时10ms,软件去抖动,MOV A,P1,;重读键值,键闭合相应位为0,CPL A,;取反,键闭合相应位为1,ANL A,#00000111B,;屏蔽高5位,保留有键值信息的低3位,JZ GRET,;全0,无键闭合,返回;非全0,确认有键闭合,JB Acc.0,KA0,;转0#键功能程序,JB Acc.1,KA1,;转1#键功能程序,JB Acc.2,KA2,;转2#键功能程序,GRET:RET,KA0: LCALL WORK0,;执行0#键功能子程序,RET,KA1: LCALL WORK1,;执行1#键功能子程序,RET,KA2: LCALL WORK2,;执行2#键功能子程序,RET,【例9-8】按图9-13(a)、(b),试分别编制按键扫描子,40,按图9-13(b)编程如下,:,KEYB:ORL P1,#07H,;置P1.0P1.2为输入态,MOV A,P1,;读键值,键闭合相应位为1,ANL A,#00000111B,;屏蔽高5位,保留有键值信息的低3位,JZ GRET,;全0,无键闭合,返回,LCALL DY10ms,;非全0,有键闭合,延时10ms,软件去抖动,MOV A,P1,;重读键值,键闭合相应位为1,ANL A,#00000111B,;屏蔽高5位,保留有键值信息的低3位,JZ GRET,;全0,无键闭合,返回;非全0,确认有键闭合,JB Acc.0,KB0,;转0#键功能程序,JB Acc.1,KB1,;转1#键功能程序,JB Acc.2,KB2,;转2#键功能程序,GRET:RET,KB0: LCALL WORK0,;执行0#键功能子程序,RET,KB1: LCALL WORK1,;执行1#键功能子程序,RET,KB2: LCALL WORK2,;执行2#键功能子程序,RET,按图9-13(b)编程如下:,41,按键与并行扩展I/O口连接,2、,按键与扩展I/O口连接, 按键与并行扩展I/O口连接 2、按键与扩展I/O口连接,42,【例9-9】按图9-14,试编制按键扫描子程序,将键信号存入内RAM 30H。,解:编程如下:,KEY99: MOV DPTR,#7FFFH,;置74373口地址,MOVX A,DPTR,;输入键信号(“0”有效),MOV 30H,A,;存键信号数据,RET,;,参阅8.2.4,图8-6,【例8-2】。,按键与串行扩展I/O口连接,【例9-9】按图9-14,试编制按键扫描子程序,将键信号存入,43,三、,矩阵式键盘及其接口电路,三、矩阵式键盘及其接口电路,44,【例9-10】按图9-15及图9-16,试编制矩阵式键盘扫描程序。解:,KEY: MOV P1,#0F0H,;行线置低电平,列线置输入态,KEY0: MOV A,P1,;读列线数据,CPL A,;数据取反,“1”有效,ANL A,#0F0H,;屏蔽行线,保留列线数据,MOV R1,A,;存列线数据(R1高4位),JZ GRET,;全0,无键按下,返回,KEY1: MOV P1,#0FH,;行线置输入态,列线置低电平,MOV A, P1,;读行线数据,CPL A,;数据取反,“1”有效,ANL A, #0FH,;屏蔽列线,保留行线数据,MOV R2,A,;存行线数据(R2低4位),JZ GRET,;全0,无键按下,返回,JBC F0,WAIT,;已有消抖标志,转,SETB F0,;无消抖标志,置消抖标志,LCALL DY10ms,;调用10ms延时子程序(参阅例4.13),消抖,SJMP KEY0,;重读行线列线数据,GRET: RET,;,【例9-10】按图9-15及图9-16,试编制矩阵式键盘扫描,45,WAIT: MOV A,P1,;等待按键释放,CPL A,;,ANL A,#0FH,;,JNZ WAIT,;按键未释放,继续等待,KEY2: MOV A,R1,;取列线数据(高4位),MOV R1,#03H,;取列线编号初值,MOV R3,#03H,;置循环数,CLR C,;,KEY3: RLC A,;依次左移入C中,JC KEY4,;C=1,该列有键按下,(列线编号存R1),DEC R1,;C=0,无键按下,修正列编号,DJNZ R3,KEY3,;判循环结束否?未结束继续寻找有键按下的列线,KEY4: MOV A,R2,;取行线数据(低4位),MOV R2,#00H,;置行线编号初值,MOV R3,#03H,;置循环数,CLR C,;,KEY5: RRC A,;依次右移入C中,JC KEY6,;C=1,该行有键按下,(行线编号存R2),INC R2,;C=0,无键按下,修正行线编号,DJNZ R3,KEY5,;判循环结束否?未结束继续寻找有键按下的行线,WAIT: MOV A,P1 ;等待按键释放,46,KEY6: MOV A,R2,;取行线编号,CLR C,;,RLC A,;行编号2,RLC A,;行编号4,ADD A,R1,;行编号4+列编号=按键编号,KEY7: CLR C,;,RLC A,;按键编号2,RLC A,;按键编号4(LCALL+ RET共4字节),MOV DPTR,#TABJ,;,JMP A+DPTR,;散转,执行相应键功能子程序,TABJ: LCALL WORK0,;调用执行0#键功能子程序,RET,;,LCALL WORK1,;调用执行1#键功能子程序,RET,;, ,LCALL WORK15,;调用执行15#键功能子程序,RET,;,KEY6: MOV A,R2 ;取,47,【例9-11】按图9-17,试编制中断方式键盘扫描程序,将键盘序号存入内RAM 30H。,【例9-11】按图9-17,试编制中断方式键盘扫描程序,将键,48,ORG 0000H,;复位地址,LJMP STAT,;转初始化,ORG 0003H,;中断入口地址,LJMP PINT0,;转中断服务程序,ORG 0100H,;初始化程序首地址,STAT: MOV SP,#60H,;置堆栈指针,SETB IT0,;置为边沿触发方式,MOV IP,#00000001B,;置为高优先级中断,MOV P1,#00001111B,;置P1.0P1.3置为输入态,置P1.4P1.7输出0,SETB EA,;CPU开中,SETB EX0,;开中,LJMP MAIN,;转主程序,并等待有键按下时中断,解:,ORG 0000H ;复位,49,OGR 2000H,;中断服务程序首地址,PINT0: PUSH Acc,;保护现场,PUSH PSW,;,MOV A,P1,;读行线(P1.0P1.3)数据,CPL A,;数据取反,“1”有效,ANL A, #0FH,;屏蔽列线,保留行线数据,MOV R2,A,;存行线(P1.0P1.3)数据(R2低4位),MOV P1,#0F0H,;行线置低电平,列线置输入态,MOV A,P1,;读列线(P1.4P1.7)数据,CPL A,;数据取反,“1”有效,ANL A,#0F0H,;屏蔽行线,保留列线数据(A中高4位),MOV R1,#03H,;取列线编号初值,MOV R3,#03H,;置循环数,CLR C,;,PINT01:RLC A,;依次左移入C中,JC PINT02,;C=1,该列有键按下,(列线编号存R1),DEC R1,;C=0,无键按下,修正列编号,DJNZ R3,PINT01,;判循环结束否?未结束继续寻找有键按下列线,OGR 2000H ;中断服务程,50,PINT02:MOV A,R2,;取行线数据(低4位),MOV R2,#00H,;置行线编号初值,MOV R3,#03H,;置循环数,PINT03:RRC A,;依次右移入C中,JC PINT04,;C=1,该行有键按下,(行线编号存R2),INC R2,;C=0,无键按下,修正行线编号,DJNZ R3,PINT03,;判循环结束否?未结束继续寻找有键按下行线,PINT04:MOV A,R2,;取行线编号,CLR C,;,RLC A,;行编号2,RLC A,;行编号4,ADD A,R1,;行编号4+列编号=按键编号,MOV 30H,A,;存按键编号,POP PSW,;,POP Acc,;,RETI,;,PINT02:MOV A,R2 ;取行线数据,51,9-3 A/D转换接口电路,一、,A/D转换的基本概念,A/D转换的功能是把模拟量电压转换为N位数字量。,设D为N位二进制数字量,UA为电压模拟量,UREF为参考电压,无论A/D或D/A,其转换关系为:,U,A,= DU,REF,/ 2,N,(其中:D=D,0,2,0,+D,1,2,1,+ +D,N-1,2,N-1,),9-3 A/D转换接口电路一、A/D转换的基本概念UA,52,1、,A/D转换器的主要性能指标:,转换精度,。转换精度通常用分辨率和量化误差来描述。,分辨率,。分辨率 = U,REF,/ 2,N,表示输出数字量变化一个相邻数码所需输入模拟电压的变化量。,N为A/D转换的位数,N越大,分辨率越高,,习惯上分辨率常以A/D转换位数N表示。,量化误差,。量化误差是指零点和满度校准后,在整个转换范围内的最大误差。,转换时间,。指A/D转换器完成一次A/D转换所需时间。转换时间越短,适应输入信号快速变化能力越强。,2、,A/D转换器分类,A/D转换器分类:按,转换原理形式,可分为逐次逼近式、双积分式和V/F变换式;,按,信号传输形式,可分为并行A/D和串行A/D。,1、A/D转换器的主要性能指标:,53,二、,并行A/D,ADC0809及其接口电路,二、并行A/D,54,1、,引脚功能和典型连接电路,IN0IN7,:,8路模拟信号输入端,。,C、B、A,:,8路模拟信号转换选择端,。,与低8位地址中A0A2连接。由A0A2地址000111选择IN0IN7八路A/D通道。,CLK,:,外部时钟输入端,。,时钟频率高,A/D转换速度快。允许范围为101280KHz 。,通常由80C51 ALE端直接或分频后与0809 CLK端相连接。,D0D7,:,数字量输出端,。,OE,:,A/D转换结果输出允许控制端,。,OE=1,允许将A/D转换结果从D0D7端输出。通常由80C51的端与0809片选端(例如P2.0)通过或非门与0809 OE端相连接。,ALE,:,地址锁存允许信号输入端,。,0809 ALE信号有效时将当前转换的通道地址锁存。,START,:,启动A/D转换信号输入端,。,当START端输入一个正脉冲时,立即启动0809进行A/D转换。START端与ALE端连在一起,由80C51WR与0809片选端(例如P2.0)通过或非门相连。,EOC,:A/D转换结束信号输出端,高电平有效。,U,REF(+),、,U,REF(-),:,正负基准电压输入端,。,Vcc,:,正电源电压,(+5V)。,GND,:,接地端,。,1、引脚功能和典型连接电路,55,2、,ADC 0809应用实例,中断方式,【例9-12】 按图9-20,用中断方式对8路模拟信号依次A/D转换一次,并把结果存入以30H为首址的内RAM中,试编制程序。,解:,ORG 0000H,;复位地址,LJMP STAT,;转初始化程序,ORG 0013H,;中断服务子程序入口地址,LJMP PINT1,;中断,转中断服务子程序;,ORG 0100H,;初始化程序首地址,STAT: MOV R1,#30H,;置数据区首址,MOV R7,#8,;置通道数,SETB IT1,;置边沿触发方式,SETB EX1,;开中,SETB EA,;CPU开中,MOV DPTR,#0FEF8H,;置0809通道0地址,MOVX DPTR,A,;启动0通道A/D,LJMP MAIN,;转主程序,并等待A/D中断,2、ADC 0809应用实例 中断方式【例9-12】,56,ORG 0200H,;中断服务子程序首地址,PINT1: PUSH Acc,;保护现场,PUSH PSW,;,MOVX A,DPTR,;读A/D值,MOV R1,A,;存A/D值,INC DPTR,;修正通道地址,INC R1,;修正数据区地址,MOVX DPTR,A,;启动下一通道A/D,DJNZ R7,GORETI,;判8路采集完否?未完继续,CLR EX1,;8路采集已完,关中,GORETI:POP PSW,;恢复现场,POP Acc,;,RETI,;中断返回,ORG 0200H ;,57,查询方式,工作在查询方式时,0809 EOC端可不必通过反相器与或相连,直接与80C51 P1口或P3口中任一端线相连。,【例9-13】 图9-20中,用P1.0直接与0809 EOC端相连,试用查询方式编制程序,对8路模拟信号依次A/D转换一次,并把结果存入以40H为首址的内RAM中。,解:,MAIN: MOV R1,#40H,;置数据区首址,MOV R7,#8,;置通道数,SETB P1.0,;置P1.0输入态,MOV DPTR,#0FEF8H,;置0809通道0地址,LOOP: MOVX DPTR,A,;启动A/D,JNB P1.0,$,;查询A/D转换结束否?未完继续查询等待,MOVX A,DPTR,;A/D已结束,读A/D值,MOV R1,A,;存A/D值,INC DPTR,;修改通道地址,INC R1,;修改数据区地址,DJNZ R7,LOOP,;判8路采集完否?未完继续,RET,;8路采集完毕,返回, 查询方式,58,延时等待方式,工作在延时等待方式时,0809 EOC端可不必与80C51相连,是根据时钟频率计算出A/D转换时间,略微延长后直接读A/D转换值。,【例9-14】 图9-20中,0809 EOC端开路,fosc=6MHz,试用延时等待方式编制程序,对8路模拟信号依次A/D转换一次,并把结果存入以50H为首址的内RAM中。,解:编程如下:,MAIN:MOV R1,#50H,;置数据区首址,MOV R7,#8,;置通道数,MOV DPTR,#0FEF8H,;置0809通道0地址,LOOP:MOVX DPTR,A,;启动A/D,MOV R6,#17,;,DJNZ R6,$,;延时68,S:2机周17=34机周,2,S34=68,S,MOVX A,DPTR,;读A/D值,MOV R1,A,;存A/D值,INC DPTR,;修正通道地址,INC R1,;修正数据区地址,DJNZ R7,LOOP,;判8路采集完否?未完继续,RET,;8路采集完毕,返回, 延时等待方式,59,三、,串行A/D,ADC0832及其接口电路,ADC 0832是8位串行A/D转换器;,转换速度较高(250KHz时转换时间32,s);,单电源供电,功耗低(15mw)。,三、串行A/D,60,1、,引脚功能,V,DD,、,V,SS,:电源接地端,V,DD,同时兼任U,REF,;,CS,:片选端,低电平有效;,DI,:数据信号输入端;,DO,:数据信号输出端;,CLK,:时钟信号输入端,要求低于600KHz;,CH0,、,CH1,:模拟信号输入端(双通道),;,2、,典型应用电路,P1.0,片选CS;,TXD,发送时钟信号输入ADC0832 CLK;,RXD,与DI、DO端连接在一起。,编码,通道选择,CH0 CH1,00, ,01, ,10,11,表9-3,1、引脚功能编码通道选择CH0 CH100 0,61,3、,串行A/D转换工作时序,工作时序分为二个阶段:, 起始和通道配置,由CPU发送,从ADC0832 DI端输入;, A/D转换数据串行输出,由ADC 0832从DO端输出,CPU接收。,3、串行A/D转换工作时序 工作时序分为二个阶段:,62,4、,软件编程,【例9-15】按图9-21(b)电路,试编制程序,将CH0、CH1通道输入的模拟信号A/D转换,分别存入30H31H中。,解:,AD0832:MOV SCON,#00H,;置串口方式0,禁止接收,CLR ES,;串口禁中,MOV R0,#30H,;置A/D数据存储区首址,CLR P1.0,;片选0832,MOV
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!