《单片机原理及接口技术》第九章应用系统配置及接口技术_第1页
《单片机原理及接口技术》第九章应用系统配置及接口技术_第2页
《单片机原理及接口技术》第九章应用系统配置及接口技术_第3页
《单片机原理及接口技术》第九章应用系统配置及接口技术_第4页
《单片机原理及接口技术》第九章应用系统配置及接口技术_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

第9章应用系统配置及接口技术PC机除了主机以外还需要哪些部分呢?单片机电路有时候也需要键盘、显示等外设。本章主要内容键盘显示器A/D转换D/A转换9.1键盘与计算机接口非编码键盘:按键的动作靠软件识别编码键盘:由硬件电路产生按键的键值或编号,并由硬件识别闭合键按下:P1.0输入低电平0松开:P1.0输入高电平1键功能的实现:对于一组键或一个键盘,需通过接口电路与单片机相连。可采用查询或中断方式测试有无键按下,再确定是哪一个键按下,将该键号送入累加器ACC,然后判断是数字键还是功能键,若是数字键,则将键号对应的数字送入相关输入缓冲区;若是功能键,则通过跳转指令转入执行该键的功能程序,执行完后再返回主程序。抖动在按键按下与断开的过程中,按键产生机械抖动。抖动现象将使

CPU产生误判断。可用硬件或软件的去除抖动方法9.1.1独立式非编码键盘接口MOVA,#0FFHMOVP1,AMOVA,P1JNBACC.0,KEY0JNBACC.1,KEY1………假设为P1口电路简单;但键数较多时,需占用较多的I/O线准双向口:输入时须先写1用于较多按键,节省I/O线。采用逐行(逐列)扫描法:向列线输出全扫描字00H。读入行线状态。若行线有0,则有键按下;若行线全1,则无键按下。9.1.2行列式非编码键盘接口1、键盘工作原理——举例行线:X0~X3,通过电阻接+5V。没有键闭合时,行线呈高电平;某键闭合时,该键对应的行线和列线被短路。此时行线电平由列线电位所决定。例判断有无键闭合:使列线为低电平,读出行线状态。找出哪一个键闭合:逐行(逐列)扫描查询法逐行扫描法:依次将列线送低电平,逐个检查行线状态,确定按键在某行某列交叉的点上,取得键值,执行相应程序。例:键盘扫描程序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,#08H3210476511109815141312+5VP1.4P1.3P1.089C51P1.7P1.6P1.5P1.2P1.1

AJMPTRYK

LINE3:JBACC.0,LINE4

MOVA,#0CH

AJMPTRYK

LINE4:INCR3

MOVA,R2

RL A

JNBACC.0,BACK

MOVR2,A

AJMPLINE0

TRYK:ADDA,R3

BACK:RET 9.1.3单片机对非编码键盘的控制程序扫描方式CPU不断调用键盘处理程序,对键盘进行扫描定时扫描方式利用定时器的溢出中断请求,每隔一定的时间对键盘扫描一次中断扫描方式提高CPU的效率,当键盘上有键闭合时产生中断请求9.2LED显示器及接口设计1、由发光二极管组成,分共阳、共阴两种。

LowEmittingDiode问题引入:

LED显示器如何显示出指定数字/字符?comcom2.LED显示字符方法:COM接低电平;各输入端输入一个显示代码,如5BH=01011011,对应c,f灭,而a,b,d,e,g点亮,则LED显示字符“2”显示各种字符的代码见下表。对于共阳极LED,将显示代码取反。若显示小数点,可利用D7位。限流电阻字型表

静态显示方式连接

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

特点原理简单;显示亮度强,无闪烁;占用I/O资源较多。

常用于位数较少的场合。动态显示将各个显示器的输入(段选)线并联,由一个I/O口提供字形代码;由另一个I/O口提供位选代码。采用软件扫描显示方法,某个时刻只点亮1个显示器,点亮时间不超过20ms,分时逐个点亮LED。与静态显示相比,特点:节省硬件电路及I/O资源;占用CPU时间多;亮度相对较低;适用于LED位数较多的场合。视觉暂留特性6位共阴LED。利用8155的PA口(假设地址7F01H)作为位选,75452反相驱动;PB口(7F02H)作为段选,7407同相驱动。在片内RAM中设一显示缓冲区79H~7EH,依次存放要显示的6个字符(高4位清0,即00~09H,0A~0FH)。反复调用显示子程序。DIS:MOVR0,#7EH;显示缓冲区首址MOVR2,#01H;位选初始值MOVA,R2LP0:MOVDPTR,#7F01H;位选端口PAMOVX@DPTR,A;输出位选代码INCDPTR;段选端口PBMOVA,@R0;取显示字符ADDA,#0DH;加偏移量MOVCA,@A+PC;查表得显示字符的代码MOV@DPTR,A;输出显示ACALLDIMS;调用延时子程序DECR0;修改显示缓冲区指针MOVA,R2;修改位选指针JBACC.5,LP1;判断是否全部显示一次?RLA;没有,则左移一位MOVR2,ASJMPLP0LP1:RETDB3FH,06H,5BH,…;显示代码表格LCD液晶显示器LiquidCrystalDisplay

微功耗、体积小、显示内容丰富、超薄轻巧。任务:如何在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模块单片机与LCD模块之间有四种基本操作: 写命令 读状态 写显示数据 读显示数据

12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块RSR/W操作00写命令操作(初始化、光标定位等)01读状态操作(读忙标志)10写数据操作(要显示内容)11读数据操作(可以把显示存储区中的数据反读出来)

12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块RS:数据和指令选择控制端,RS=0:命令/状态;RS=1:数据R/W:读写控制线,R/W=0:写操作;R/W=1:读操作E:数据读写操作控制位,E线向LCD模块发送一个脉冲,LCD模块与单片机之间将进行一次数据交换TC1602A的内部结构由DDRAM、CGRAM、CGROM、IR、DR、BF、AC等大规模集成电路组成DDRAM:存放要LCD显示的数据。CGROM:存放192个5*7的点阵字符,只读不写CGRAM:存储特殊造型的造型码IR:存储MCU写给LCD的指令码DR:相当于数据缓冲器BF:忙碌信号AC:地址计数器:负责计数写入/读出CGRAM、DDRAM的数据地址,AC依照MCU对LCD的设置值而自动修改其本身内容。读写操作、屏幕和光标的操作都是通过指令编程来实现指令名称控制信号控制代码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:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。二、单片机与字符型LCD模块接口数据线:DB7~DB0接单片机的P1.7~P1.0控制端:

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

E~~P3.2

单片机与LCD模块硬件连接

连线表:

A01A07连接1+5V/GND+5V/GND连接2P1.0-P1.7DB0-DB7连接3P3.0RS连接4P3.1RW连接5P3.2E液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符三、LCD接口程序设计程序设计功能设置——写命令子程序

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

定位光标位置把显示数据显示在某个位置,就是把显示数据写在相应的DDRAM地址中,DDRAM地址占7位。SetDDRAMaddress命令如下:row12345……141516line100H01H02H03H04H……0dH0eH0fHline240H41H42H43H44H……4dH4eH4fH≈≈≈≈NOTICE≈≈≈≈光标定位,写入一个显示字符后,DDRAM地址会自动加1或减1,加或减由输入方式字设置;第1行DDRAM地址与第2行DDRAM地址并不连续。80H81H82H83H84H8dH8eH8fH0c0H0c1H0c2H0c3H0c4H0cdH0ceH0cfH每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。例如要在液晶模块的第二行第一个字符的位置显示字母“A”

第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)LCD显示程序设计mainLCD初始化光标定位显示字符SJMP$RSEQUP3.0RWEQUP3.1EEQUP3.5ORG0000HMOVP1,#00000001B;清屏ACALLENABLEMOVP1,#00111000B;8位2行5x7点阵ACALLENABLEMOVP1,#00001111B;显示器开、光标开、闪烁开ACALLENABLEMOVP1,#00000110B;文字不动,光标自动右移ACALLENABLEMOVP1,#0C0H;写入显示起始地址(第二行第一个位置)ACALLENABLEMOVP1,#01000001B;字母A的代码SETBRSCLRRWCLREACALLDELAYSETBEAJMP$程序在开始时对液晶模块功能进行了初始化设置,约定了显示格式。注意显示字符时光标是自动右移的,无需人工干预,每次输入指令都先调用判断液晶模块是否忙的子程序DELAY,然后输入显示位置的地址000H,最后输入要显示的字符A的代码41H。在液晶模块的第二行第一个字符的位置显示字母“A”:返回命令字ENABLE:CLRRS;写入控制命令的子程序

CLRRW CLRE ACALLDELAY SETBE RETDELAY:MOVP1,#0FFH;判断液晶显示器是否忙的子程序

CLRRS SETBRW CLRE NOP SETBE JBP1.7,DELAY;如果P1.7为高电平表示忙就循环等待

RETEND9.3A/D转换接口技术A/D转换器是将模拟量转换成数字量的器件。模拟量可以是电压、电流等电信号,也可以是声、光、压力和温度等随时间连续变化的非电物理量。非电物理量可通过合适的传感器等转换成电信号,模拟量只有转换成数字量才能被计算机采集、分析和计算处理。A/D转换器的主要技术指标分辨率:即输出的数字量变化一个相邻的值所对应的输入模拟量的变化量。通常用数字输出最低位(LSB)所对应的模拟输入的电平值表示。(3~8位/9~12位/13位以上)精度:反映实际A/D转换器在量化值上与理想A/D转换器的差值。可表示成绝对精度和相对精度转换时间:由启动转换命令到转换结束信号开始有效的时间间隔输入/输出特性和范围电源种类和功耗工作环境接口是否方便接口时注意的问题模拟量输入信号的连接输出数字量引脚的连接内部无输出锁存器的,需通过锁存器或I/O接口与单片机相连;输出位数高于8位的,应该分步读出数字量。A/D转换器的启动方式片选信号选中的基础上,发出启动该芯片所需的信号判断A/D转换器结束及读取数据

转换结束标记信号,如EOC

读取数据指令:MOVXA,@DPTR参考电源的连接

模拟量信号为单极性时:接模拟地,接参考电源正端;双极性时,接参考电源负端,接参考电源正端A/D转换方法双积分式:抗干扰能力好,转换速度低逐次逼近式:转换速度较快,适中并行输出:ADC0809串行输出:TLC1549逐次逼近法A/D转换原理逐次逼近法:对每一位进行试探的过程,即判断该位应为0还是1。假设A/D转换器是8位数字输出,首先是每一个位都为0,即0000000010000000,D/A——〉Vs,*1000000,…………**100000,…………依此类推*******1,…………..双积分A/D转换原理在进行一次A/D转换时,开关先把Vx采样输入到积分器,积分器从0V开始进行固定时间T的正向积分,时间T到后,开关将与Vx极性相反的基准电压VREF输入到积分器进行反相积分,到输出为0V时停止反相积分。反相积分时积分器的斜率是固定的,Vx越大,积分器的输出电压就越大,反相积分时间就越长。计数器在反相积分时间内计数值就是输入电压Vx在时间T内的平均值对应的数字量。电子开关计数器控制逻辑VxVref减0比较器积分器数字量时钟9.3.189C51和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~IN7ALE:地址锁存允许START:启动一次A/D转换EOC:转换结束信号输出线,开始转换时为低电平,当转换结束时为高电平。供查询或申请中断OE:输出允许控制端ADC0809与89C51的接口原理图接地址线查询?中断?P2.7=0外部电压u0外部电压u1外部电压u7外部电压u3外部电压u4外部电压u6外部电压u5外部电压u289C51P1.0或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,MOVxA,@DPTR;读取转换结果MOV@R1,A;存放结果INCR1;修改数据区指针INCDPTR;指向下一个通道DJNZR7,LOOP;8个通道全采样完了吗?…或JBP1.0,$中断方式程序SETBIT1SETBEX1SETBEAMOVDPTR,#7FF8HMOVA,#0MOVX@DPTR,A…EINT1:MOVDPTR,#7FF8HMOVXA,@DPTRMOV30H,AMOVA,#00MOVX@DPTR,ARETI初始化,启动A/D转换IN0读取数据,再次启动IN0如何接着启动下一个通道?EINT1:INCDPTRINCR0MOVXA,@DPTRMOV@R0,AMOVA,#00MOVX@DPTR,ARETI9.3.2单通道串行输出A/D芯片TLC1549及接口逐次比较型10位A/D6个工作方式:区别主要是cs是否连续为低电平快速、慢速:决定于I/OCLOCK周期TLC1549工作原理CS无效,I/OCLOCK被禁止,DATAOUT处于高阻状态,CS有效,I/OCLOCK控制DATAOUT输出前次转换数据,同时A/D转换器对本次转换采样。方式1工作时序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:CLRP3.1;时钟低电平

MOVC,P3.2;数据送进位位CYRLCA;数据送累加器ASETBP3.1;时钟变高电平

DJNZR0,RDATA;读书结束了吗

RET;子程序结束D/A:DigitalsignalAnalogysignal衡量D/A性能的主要参数分辨率:输出的模拟量最小变化量满刻度误差:输入全1时输出电压与理想值的误差电流稳定时间:描述D/A转换速率快慢的重要参数,一般是指输入数字量从全0变成全1时,输出模拟量稳定到相应范围内所经历的时间9.3D/A转换接口技术9.3.1并行输入DAC0832芯片8位电流输出,稳定时间1µs双缓冲、单缓冲、直接数字输入DAC0832的引脚D0~D7:数据输入线ILE:数据锁存允许控制信号输入线,高电片有效CS:片选信号XFFR:数据传输控制信号输入线WR1:输入锁存器写选通输入线WR2:DAC寄存器写选通输入线IOUT1:电流输出线,当DAC寄存器为全1时IOUT1最大IOUT2:电流输出线,其值和IOUT1值之和为一常数Rfb:反馈信号输入线,改变Rfb端外接电值可调整转换满量程精度VREF:基准电压输入线AGND:模拟地DGND:数字地DAC0832逻辑结构工作方式直通方式:数据线上的数据字节直通D/A转换器转换并输出。单缓冲方式:输入数据在控制信号作用下,直接打入DAC寄存器中双缓冲方式:数字量的输入锁存和D/A转换输出时分两步完成的。单路模拟量输出的89C51系统89C51DAC0832工作于单缓冲方式,ILE接+5V,CS和XFER相连后由MCS-51的P2.7控制

WR1和WR2相连后由MCS-51的WR控制.这样,89C51对DAC0832执行一次写操作就把一个数据直接写入DAC寄存器,模拟量输出随之而变化.系统只有一路模拟量输出或几路模拟量不需同步的输出场合,可采用单缓冲方式

89C51执行下面的程序后,运放的输出端将产生一个锯齿形电压波:WAVE:MOVDPTR,#7FFFH;设置D/A口地址

MOVA,#0;输入数字初值LOOP:MOVX@DPTR,A;输出对应于A值的模拟量

INCA;修改A的内容

AJMPLOOP试写出产生方波的程序?

产生方波的程序

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

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

温馨提示

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

评论

0/150

提交评论