单片机接口技术_第1页
单片机接口技术_第2页
单片机接口技术_第3页
单片机接口技术_第4页
单片机接口技术_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章

单片机接口技术第一节键盘接口第二节显示器接口第三节A/D转换器接口第四节D/A转换器接口图7-189C51应用系统框图89C517.1键盘接口非编码键盘:按键的动作靠软件识别编码键盘:硬件电路识别按键动作,并产生按键的键值或编号按下:P1.0输入低电平0松开:P1.0输入高电平189C51抖动-去抖按键产生机械抖动,一次按键被误读为多次按键硬件去抖:利用RS触发器软件去抖:检测到键动作,延时5~10ms,再次读键,确认真正有键按下1.独立式非编码键盘接口及处理程序MOVA,#0FFHMOVP1,AMOVA,P1JNBACC.0,KEY0JNBACC.1,KEY1………假设为P1口为什么P1口写1?独立式非编码键盘2.行列(矩阵)式非编码键盘接口及处理程序用于较多按键,节省I/O线。判断是否有健按下:向列线输出全扫描字00H。读入行线状态。若行线有0,则有键按下;若行线全1,则无键按下。KS:MOVP1,#0FH ;全扫描字0送P1高4位,设置P1低4位为输入

MOVA,P1 ;读入P1口状态(行线)

CPLA ;变正逻辑,P1.0-3高电平表示有键按下

ANLA,#0FH ;屏蔽高4位

RET ;返回,A不为0表示有键按下

P1.0P1.1P1.2P1.3P1.4P1.5P1.6P7.7行列式非编码键盘列扫描法:依次将列线送低电平,逐个检查行线状态,确定按键在某行某列交叉的点上,取得键值,执行相应程序。P1.4P1.5P1.6P1.7P1.0P1.1P1.2P1.3例:键盘扫描程序SERCH:MOVR2,#0EFH MOVR3,#00HLINE0:MOVA,R2 MOVP1,A MOVA,P1 JBACC.3,LINE1 MOVA,#00H AJMPTRYKLINE1:JBACC.2,LINE2 MOVA,#04H AJMPTRYK LINE2:JBACC.1,LINE3MOVA,#08H

AJMPTRYK

LINE3:JBACC.0,NROW

MOVA,#0CH

AJMPTRYK

NROW:INCR3

MOVA,R2

RL A

JNBACC.0,BACK

MOVR2,A

AJMPLINE0

TRYK:ADDA,R3

BACK:RET 程序控制扫描方式只有当单片机空闲时才调用键盘扫描子程序定时扫描方式利用定时器的溢出中断请求,每隔一定的时间对键盘扫描一次中断扫描方式提高CPU的效率,当键盘上有键闭合时产生中断请求单片机对非编码键盘的控制7.2显示器接口LED点阵双色显示屏LED16数段码管LCD7.2显示器接口由发光二极管组成,分共阳、共阴两种。一、LightEmittingDiodeLED显示器如何显示出指定数字/字符?COM接低电平(共阴极),COM接高电平(共阳极);COM接低电平;各输入端输入一个显示代码,如5BH=01011011,对应c,f灭,而a,b,d,e,g点亮,则LED显示字符“2”显示各种字符的代码见下表。对于共阳极LED,将显示代码取反。若显示小数点,可利用D7位。D0aD1bD2cD3dD4eD5fD6gD7comh共阴LED限流电阻11011010字型表

LED显示方式静态显示:电路解法:所有LED的位选均共同连接到+VCC或GND,每个LED的8根段选线分别连接一个8位并行I/O口,从该I/O口送出相应的字型码显示字型。

CPU送出一个显示代码,LED一直显示该字形,直到送下一个代码才改变显示字形。特点:原理简单;显示亮度强,无闪烁;占用I/O资源较多。

常用于位数较少的场合。D0aD1bD2cD3dD4eD5fD6gD7comh共阴LED74LS273P0CLK+P2.0WRMOVA,#0FFH;显示‘8’MOVDPTR,#0FEFFH;P2.0=0MOVX@DPTR,ALED显示方式:

动态显示

连接:将各个显示器的输入(段选)线并联,由一个I/O口提供字形代码;由另一个I/O口提供位选代码。

显示:采用软件扫描显示方法,某个时刻只点亮1个显示器,点亮时间不超过20ms,分时逐个点亮LED。与静态显示相比,特点:节省硬件电路及I/O资源;占用CPU时间多;亮度相对较低;适用于LED位数较多的场合。与静态显示区别?逐位扫描显示方式

6位共阴LED。利用8155的PA口(假设地址7F01H)作为位选,75452反相驱动;PB口(7F02H)作为段选,7407同相驱动。在片内RAM中设一显示缓冲区40H~45H,依次存放要显示的6个字符(高4位清0,即00~09H,0A~0FH)。反复调用显示子程序。DIS:MOVR0,#45H;显示缓冲区首址MOVR2,#01H;位选初始值MOVA,R2LP0:MOVDPTR,#7F01H;位选端口PAMOVX@DPTR,A;输出位选代码INCDPTR;段选端口PBMOVA,@R0;取显示字符ADDA,#0DH;加偏移量MOVCA,@A+PC;查表得显示字符的代码MOVX@DPTR,A;输出显示ACALLDIMS;调用延时子程序DECR0;修改显示缓冲区指针MOVA,R2;修改位选指针JBACC.5,LP1;判断是否全部显示一次?RLA;没有,则左移一位MOVR2,ASJMPLP0LP1:RETDB3FH,06H,5BH,…;显示代码表格01h02h01h06h03h00h41H40H42H43H44H45H通用键盘显示器接口芯片8279实现对键盘和显示器的自动扫描识别闭合键的键号完成显示器的动态扫描,节约CPU的时间通用键盘显示接口芯片8279键盘和显示器综合应用

停车场计数器硬件设计软件设计硬件电路设计显示部分计数部分实际电路多数采用传感器,这里用按键模拟代替停车场计数器程序设计编写程序的基本思路主程序完成单片机的初始设定、初始显示等两个按键可采用查询或者中断方式,本例子采用中断方式各段功能程序地址确定MAIN主程序流程主程序中断初始化初始车数设为0设置查表首地址十位显示(P2口)个位显示(P0口)进车中断子程序

模拟“进车”按键按下后出车中断子程序DEC总结通过静态显示和独立式按键完成了一个应用系统的设计。实际系统通常需传感器。二、LCD液晶显示器LiquidCrystalDisplay

微功耗、体积小、显示内容丰富、超薄轻巧。这里介绍的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里以常用的2行16个字的1602液晶模块来介绍它的编程方法。

任务:如何在LCD的指定位置显示出指定的字符以及字符串。2行×16列AbHelloworld主要内容TC1602ALCD模块引脚及结构单片机与字符型LCD模块接口LCD接口程序设计

12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块Vss:+5V电源管脚(Vcc)VDD:

地管脚(GND)Vo:

液晶显示驱动电源(0V~5V)V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。一、TC1602ALCD模块引脚及结构

12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块DB0~DB7:数据线,可以用8位连接,也可以只用高4位连接,节约单片机资源,本实验中采用的是八位连接方法。

12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块A:背光控制正电源K:背光控制地

12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块RS:数据和指令选择控制端,RS=0:命令/状态;RS=1:数据R/W:读写控制线,R/W=0:写操作;R/W=1:读操作E:数据读写操作控制位,E线向LCD模块发送一个脉冲,LCD模块与单片机之间将进行一次数据交换

12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块单片机与LCD模块之间有四种基本操作: 写命令 读状态 写显示数据 读显示数据

12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块RSR/W操作00写命令操作(初始化、光标定位等)01读状态操作(读忙标志)10写数据操作(要显示内容)11读数据操作(可以把显示存储区中的数据反读出来)二、单片机与字符型LCD模块接口数据线:DB7~DB0接单片机的P1.7~P1.0控制端:

RS~~P3.0R/W~~P3.1

E~~P3.2return

单片机与LCD模块硬件连接

连线表:

A01A07连接1+5V/GND+5V/GND连接2P1.0-P1.7DB0-DB7连接3P3.0RS连接4P3.1RW连接5P3.2E三、LCD接口程序设计程序设计功能设置——写命令子程序

LCD初始化:按一定顺序写命令字如:写清屏命令字、写DDRAM光标定位地址命令字显示数据——写数据子程序读入状态字——读状态子程序

1.写命令读写操作、屏幕和光标的操作都是通过指令编程来实现指令名称控制信号控制代码RSRWD7D6D5D4D3D2D1D0清屏0000000001归home位000000001*输入方式设置00000001I/DS显示状态设置0000001DCB光标画面滚动000001S/CR/L**功能设置00001DLNF**CGRAM地址设置0001A5A4A3A2A1A0DDRAM地址设置001A6A5A4A3A2A1A0读BF和AC01BFAC6AC5AC4AC3AC2AC1AC0写数据10数据读数据11数据清除屏幕---01H,光标复位到地址00H位置光标复位。光标返回到地址00Hreturn指令名称控制信号控制代码RSRWD7D6D5D4D3D2D1D0清屏0000000001归home位000000001*输入方式设置00000001I/DS显示状态设置0000001DCB光标画面滚动000001S/CR/L**功能设置00001DLNF**CGRAM地址设置0001A5A4A3A2A1A0DDRAM地址设置001A6A5A4A3A2A1A0读BF和AC01BFAC6AC5AC4AC3AC2AC1AC0写数据10数据读数据11数据光标和显示模式设置。I/D:光标移动方向,1:右移,0:左移;S:屏幕上所有文字是否左移或者右移。S=1:移位S=0:不移位设整体显示开关(D),光标显示开关(C),光标位的字符闪耀(B)D=1;C=0;B=000001100——0cH指令名称控制信号控制代码RSRWD7D6D5D4D3D2D1D0清屏0000000001归home位000000001*输入方式设置00000001I/DS显示开关控制0000001DCB光标画面滚动000001S/CR/L**功能设置00001DLNF**CGRAM地址设置0001A5A4A3A2A1A0DDRAM地址设置001A6A5A4A3A2A1A0读BF和AC01BFAC6AC5AC4AC3AC2AC1AC0写数据10数据读数据11数据S/C:高电平时移动显示的文字,低电平时移动光标设接口数据位数(DL),显示行数(N),及字型(F)DL=1,8位=0:4位N=1:2行=0:1行F=1:5×10=0:5×700111000——38H指令名称控制信号控制代码RSRWD7D6D5D4D3D2D1D0清屏0000000001归home位000000001*输入方式设置00000001I/DS显示开关控制0000001DCB光标画面滚动000001S/CR/L**功能设置00001DLNF**CGRAM地址设置0001A5A4A3A2A1A0DDRAM地址设置001A6A5A4A3A2A1A0读BF和AC01BFAC6AC5AC4AC3AC2AC1AC0写数据10数据读数据11数据字符发生器RAM地址设置设置DDRAM地址,为显示定位读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。定位光标位置把显示数据显示在某个位置,就是把显示数据写在相应的DDRAM地址中,DDRAM地址占7位。SetDDRAMaddress命令如下:row12345……141516line100H01H02H03H04H……0dH0eH0fHline240H41H42H43H44H……4dH4eH4fH≈≈≈≈NOTICE≈≈≈≈光标定位,写入一个显示字符后,DDRAM地址会自动加1或减1,加或减由输入方式字设置;第1行DDRAM地址与第2行DDRAM地址并不连续。80H81H82H83H84H8dH8eH8fH0c0H0c1H0c2H0c3H0c4H0cdH0ceH0cfH2.写数据10√3.读状态液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。例如要在液晶模块的第二行第一个字符的位置显示字母“A”

第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1。所以实际写入的数据应该是11000000B(40H)+10000000B(80H)=11000000B(C0H)LCD显示程序设计mainLCD初始化光标定位显示字符SJMP$程序在开始时对液晶模块功能进行了初始化设置,约定了显示格式。注意显示字符时光标是自动右移的,无需人工干预,每次输入指令都先调用判断液晶模块是否忙的子程序

,然后输入显示位置的地址,最后输入要显示的字符的代码。

lcd_rsbitP3.0;LCD寄存器选择

lcd_rwbitP3.1;LCD读写控制

lcd_ebitP3.2;LCD选通

lcdio

equP1

lcdbusy

equ33H;LCD忙寄存

lcddata

equ34H;LCD传递数据

ORG0000H

ljmpmain;复位入口,转主程序ORG030HMain:

movsp,#50H;设置堆栈指针

movdptr,#char1

lcalldelay

lcalldelay

lcall

lcd_init;调液晶初始化

lcall

lcd_sendcharloop:

nop

Ajmploop

lcd_init_3:

lcall

lcd_readbusy

mov

a,lcdbusy

cjneA,#0,lcd_init_3

movlcddata,#0dH;显示状态设置

lcall

lcd_writecomm

lcalldelaylcd_init_4:

lcall

lcd_readbusy

mov

a,lcdbusy

cjneA,#0,lcd_init_4

movlcddata,#01H;清屏

lcall

lcd_writecomm

lcalldelayretlcd_init:;液晶初始化程序lcd_init_1:

lcall

lcd_readbusy

mov

a,lcdbusy

cjneA,#0,lcd_init_1

movlcddata,#38H;8位2行5x7点阵

lcall

lcd_writecomm

lcalldelaylcd_init_2:

lcall

lcd_readbusy

mov

a,lcdbusy

cjneA,#0,lcd_init_2

movlcddata,#06H;文字不动,光标自 ;动右移

lcall

lcd_writecomm

lcalldelaylcd_sendchar:;发送字符lcd_sendchar_1:

lcall

lcd_readbusy

mov

a,lcdbusy

cjneA,#0,lcd_sendchar_1

movlcddata,#80H;

lcall

lcd_writecomm

lcalldelay

movr1,#16lcd_sendchar_2:

lcall

lcd_readbusy

mov

a,lcdbusy

cjneA,#0,lcd_sendchar_2CLRA

movcA,@A+DPTRIncdptr

mov

lcddata,A

lcall

lcd_writedata

lcalldelay

djnzr1,lcd_sendchar_2lcd_sendchar_3:

lcall

lcd_readbusy

mov

a,lcdbusy

cjneA,#0,lcd_sendchar_3

movlcddata,#0c0H;

lcall

lcd_writecomm

lcalldelay

movr1,#16

movdptr,#char2lcd_sendchar_4:

lcall

lcd_readbusy

mov

a,lcdbusy

cjneA,#0,lcd_sendchar_4CLRA

movcA,@A+DPTRIncdptr

mov

lcddata,A

lcall

lcd_writedata

lcalldelay

djnzr1,lcd_sendchar_4retlcd_writecomm:;写命令

clr

lcd_rs

nop

clr

lcd_rw

nop

mov

lcdio,lcddata

nop

setb

lcd_e

nop

clr

lcd_eretlcd_writedata:;写数据

setb

lcd_rs

nop

clr

lcd_rw

nop

mov

lcdio,lcddata

nop

setb

lcd_e

nop

clr

lcd_eretlcd_readdata:;读数据

setb

lcd_rs

nop

setb

lcd_rw

nop

setb

lcd_e

nop

mov

lcdbusy,lcdio

clr

lcd_eretlcd_readbusy:;读忙

clr

lcd_rs

nop

setb

lcd_rw

nop

setb

lcd_e

nop

mov

lcdbusy,lcdio

clr

lcd_e

anllcdbusy,#80Hretchar1:DB'WelcomeTo......';char2:DB'';END7.3A/D转换器接口技术A/D转换器是将模拟量转换成数字量的器件。模拟量可是电压、电流等电信号,也可是声、光、压力和温度等随时间连续变化的非电物理量。非电物理量可通过合适的传感器等转换成电信号,模拟量只有转换成数字量才能被计算机采集、分析和计算处理。A/D转换方法电压频率式:精度高价格低,但转换速度不高双积分式:抗干扰能力好,转换速度低逐次逼近式:转换速度较快,适中并行转换:速度快,价格高串行转换:体积小,速度满硬件设计考虑的问题选择分辨率(3~8位/9~12位/13位以上)确定精度(误差范围)A/D转换时间和路数输入/输出特性和范围电源种类和功耗工作环境接口是否方便8051和ADC0809的接口ADC0809是逐次比较式的8路8位A/D转换器,28脚,DIP封装,转换速度为100μs,电源电压+5VADC0809引脚说明:IN0~IN7:8个模拟量输入通道D0(2-8)~D7(2-1):8位数字量输出ADDC、ADDB、ADDA:通道地址选择线

000~111依次选择转换IN0~IN7,表8-2ALE:地址锁存允许START:启动一次A/D转换EOC:转换结束信号输出线,开始转换时为低电平,当转换结束时为高电平。供查询或申请中断(89C51需加反相)OE:输出允许控制端地址线:CBA选择的通道000

IN0001

IN1010

IN2011

IN3100

IN4101

IN5110

IN6111

IN7ADC0809与8051的接口原理图接地址线查询?中断?P2.7=0外部电压u0外部电压u1外部电压u7外部电压u3外部电压u4外部电压u6外部电压u5外部电压u2OEEOC编程要点选择模拟量输入通道发出启动及地址锁存信号用延时、查询或中断方法等待转换结束读取转换结果定时传送方式对于一种A/D转换器来说,转换时间作为一项技术指标是已知的和固定的。例如,ADC0809转换时间约为100μs。可据此设计一个延时子程序,A/D转换启动后即调用这个延时子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。在这种方式下,EOC引脚悬空。查询传送方式单片机启动0809后,检测EOC,若EOC=0则A/D转换没有结束,继续检测EOC,直到EOC=1。当EOC=1时,A/D转换已经结束,单片机读取A/D转换结果。在这种方式下,EOC必须接到8051的一条I/O线上。P1.0中断传送方式单片机启动A/D转换后可以做其它工作,当A/D转换结束时,EOC由0---1经过非门传到INT端,8051收到中断请求信号,若8051开着中断,则进入中断服务程序,在中断服务程序中单片机读取A/D转换的结果。在这种方式下,EOC必须经过非门接到8051的中断请求输入线INT0或INT1上,89C51的中断触发方式为下降沿触发。INT1编写连续采集IN0~IN7上的模拟量u0~u7的转换程序,并将数字量存入30H~37H。MOVR1,#30H;缓存区首址MOVDPTR,#7FF8H;P2.7=0,且指向通道0(A2A1A0=000)MOVR7,#08H;置通道数LOOP:MOVX@DPTR,A;启动A/D转换MOVR6,#55;延时110μs等待转换结束DJNZR6,$;2个机器周期,12MHz,2μs,MOVA,@DPTR;读取转换结果MOV@R1,A;存放结果INCR1;修改数据区指针INCDPTR;指向下一个通道DJNZR7,LOOP;8个通道全采样完了吗?…查询:JBP1.0,$JNBP1.0,$中断方式程序SETBIT1SETBEX1SETBEAMOVR1,#30HMOVDPTR,#7FF8HMOVA,#0MOVX@DPTR,A…PUSHACCMOVXA,@DPTRMOV@R1,AINCR1INCDPTRMOVX@DPTR,APOPACCRETI初始化,启动A/D转换IN0如何接着启动下一个通道?实验-原理、调试通道的选择是由地址线A0、A1、A2来完成,只可用IN0,IN1输入,电位器单步运行程序,观察读入的A/D转换结果,并测量对应的模拟输入电压值,记录试采用延时、查询、中断,最少两种7.4D/A转换器接口后向通道分开关量、模拟量信号开关量:继电器、接触器、SSR、晶闸管,如控制电机启停、信号有无等模拟量:D/A转换器SolidStateRalayDAC0832芯片介绍分辨率8位电流输出,稳定时间1µs双缓冲、单缓冲、直接数字输入单电源供电逻辑结构工作方式直通方式:各控制端口一直有效单缓冲方式:输入寄存器和8位DAC寄存器锁存信号同时有效;或者一个寄存器控制端一直有效。双缓冲方式:输入寄存器和8位DAC寄存器锁存信号分开控制系统只有一路模拟量输出或几路模拟量不需同步的输出场合,可采用单缓冲方式实验:输出00~FFH,0~-5V和-5~+5V两种VREF00H~FFH通过运放可输出一个锯齿波

MOVDPTR,#7FFFHMOVA,#00HLOOP:MOVX@DPTR,AINCAAJMPLOOP产生方波的程序

MOVDPTR,#7FFFH;设置D/A口地址

LOOP:MOVA,#FFH;输入数字最大值

MOVX@DPTR,A;输出对应于A值的模拟量

ACALLDELAY;延时

MOVA,#00H;修改A的内容

MOVX@DPTR,A;输出对应于A值的模拟量

ACALLDELAY;延时

AJMPLOOP;循环输出下一个方波DELAY:延时程序实验:输出锯齿波,三角波。思考:幅值变化的方波、三角波?双缓冲方式适用于几个模拟量同时输出的系统先分时将数字量装入两片0832输入寄存器(地址:P2.5和P2.6)然后同时选通两片0832的DAC寄存器(地址:P2.7),同时输出模拟量信号单通道串行输出A/D芯片TLC1549及接口逐次比较型10位A/D6个工作方式:区别主要是cs是否连续为低电平快速、慢速:决定于I/OCLOCK周期TLC1549与89C51接口89C51

P3.0P3.1P3.2TLC1549ANALOGINCSI/OCLOCK

DATAOUTREF-GNDVCCREF+89C51读取TLC1549中10位数据程序如下:

ORG0050HR1549:CLRP3.0;片选有效,选中TLC1549MOVR0,#2;先读取高两位数据

LCALLRDADA;调用读数子程序

MOVR1,A;高两位数据存入R1MOVR0,#8;要读取低8位数据

LCALLRDATAMOVR2,A;低8位数据存入R2SETBP3.0;片选无效

CLRP3.1;时钟低电平

RET;程序结束RDADA:CLRP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论