ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:436.92KB ,
资源ID:4090576      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4090576.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于某51单片机和ADC0809多通道模数转换的设计与实现.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于某51单片机和ADC0809多通道模数转换的设计与实现.docx

1、基于某51单片机和ADC0809多通道模数转换的设计与实现摘 要本文介绍了基于单片机的数据采集的硬件设计和软件设计,数据采集系统是模拟域与数字域之间必不可少的纽带,它的存在具有非常重要的作用。本文介绍的重点是数据采集系统,而该系统硬件部分的重心在于单片机。硬件部分是以单片机为核心,还包括A/D模数转换模块,LCD1602显示模块部分。8路被测电压通过模数转换器ADC0809进行模数转换,实现对采集到的数据进行模拟量到数字量的转换,并将转换后的数据通过LCD1602显示器来显示所采集的结果,并且可以通过按键来查看任意通路的电压值,整个系统具有操作方便、线路简单、测量误差小等优点。关键词:单片机A

2、T89S52、模数转换器ADC0809、数据采集、LCD1602显示器1、方案设计根据设计要求,采用的方案如下:硬件部分实现对8路数据采集和显示的功能,包括MCS-51单片机、ADC0809、LCD1602;软件部分实现单片机对8路输入数据的采集以及对LCD1602的显示操作。主要设计思想:单片机P1与ADC0809相连,P0与LCD1602连接。模拟信号通过IN0IN7输入到ADC0809中转换为数字信号,P1获得此值后,经过处理得到每位的数据后,通过P0口写数据到LCD屏上。数据采集电路的原理框如图1所示。模拟输入通道1模拟输入通道2模拟输入通道8ADC0809MCS-51单片机LCD16

3、02显示器图1 数据采集电路的原理框图2、硬件电路的设计2.1单片机的最小系统设计单片机最小系统是能补足单片机工作的最简单电路,它由单片机、电源、晶体振荡器、复位电路等构成。它是本系统的处理单元也是控制单元,负责处理信号、外设的接口与控制,同时它也是所有软件的载体。本系统采用AT89C52是美国Atmel公司生产的低电压、高性能CMOS 8位单片机,片内含8KB的可反复檫写的程序存储器和12B的随机存取数据存储器(RAM),器件采用Atmel公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内配置通用8位中央处理器(CPU)和Flash存储单元,功能强大的AT89C52单片机

4、可灵活应用于各种控制领域。AT89C52单片机属于AT89C51单片机的增强型,与Intel公司的80C52在引脚排列、硬件组成、工作特点和指令系统等方面兼容。主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。P0P3 为可编程通用I/O 脚,其功能用途由软件定义。其管脚如下图2所示:图2 AT89C52单片机管脚图本设计中,P0 端口(3239 脚)被定义为N1 功能控制端口,分别与N1的相应功能管

5、脚相连接。单片机正常工作时,都需要有一个时钟电路和一个复位电路。本设计中选择了内部时钟方式和按键电平复位电路,来构成单片机的最小电路。如图3所示。图3 单片机最小系统2.2 ADC0809模数转换器设计电路2.2.1 ADC0809的结构功能本数据采集系统采用计算机作为处理器。电子计算机所处理和传输的都是不连续的数字信号,而实际中遇到的大都是连续变化的模拟量,模拟量经传感器转换成电信号后,需要模数转换将其变成数字信号才可以输入到数字系统中进行处理和控制,因此,把模拟量转换成数字量输出的接口电路,即AD转换器就是现实信号转换的桥梁。目前,世界上有多种类型的AD转换器,如并行比较型、逐次逼近型、积

6、分型等。本文采用逐次逼近型AD转换器,该类AD转换器转换精度高,速度快,价格适中,是目前种类最多,应用最广的AD转换器。逐次逼近型AD转换器一般由比较器、DA转换器、寄存器、时钟发生器以及控制逻辑电路组成。ADC0809就是一种CMOS单片逐次逼近式AD转换器,其内部结构如图4所示。该芯片由8路模拟开关、地址锁存与译码器、比较器、8位开关树型DA转换器、逐次逼近寄存器、三态输出锁存器等电路组成。因此,ADC0809可处理8路模拟量输入,且有三态输出能力。该器件既可与各种微处理器相连,也可单独工作。其输入输出与TTL兼容。 图4 ADC0809内部结构ADC0809是8路8位AD转换器(即分辨率

7、8位),具有转换启停控制端,转换时间为100s采用单+5V电源供电,模拟输入电压范围为0+5V,且不需零点和满刻度校准,工作温度范围为-40+85功耗可抵达约15mW。ADC0809芯片有28条引脚,采用双列直插式封装,图5所示是其引脚排列图。 图5 ADC0809的引脚排列图各引脚的功能如下IN0IN7:8路模拟量输入端;D0D7:8位数字量输出端;ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路;ALE:地址锁存允许信号,输入高电平有效;START:AD转换启动信号,输入高电平有效;EOC:AD转换结束信号,输出当AD转换结束时,此端输出一个高电平(转换期间一直为

8、低电平);OE:数据输出允许信号,输入高电平有效。当AD转换结束时,此端输入一个高电平才能打开输出三态门,输出为数字量;CLK:时钟脉冲输入端。要求时钟频率不高640kHz;REF(+)、REF(-):基准电压;Vcc:电源,单一+5V;GND:地。ADC0809的工作过程:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平

9、 时,输出三态门打开,转换结果的数字量输出到数据总线上。 转换数据的传送 A/D转换后得到的数据应及时传送给单片机进行处理。数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。为此可采用下述三种方式。 (1)定时传送方式 对于一种A/D转换其来说,转换时间作为一项技术指标是已知的和固定的。例如ADC0809转换时间为128s,相当于6MHz的MCS-51单片机共64个机器周期。可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。 (2)查询方式 A/D转换芯片由表明转换完成的状态信号,例如ADC0809的

10、EOC端。因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。 (3)中断方式 把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。 不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。ADC0809工作时,首先输入3位地址,并使ALE为1,以将地址存入地址锁存器中。此地址经译码可选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位;下降沿则启动AD转换,之后,EOC输出信号变低,以指示转换正在进行,直到AD转换完成,EOC变为

11、高电平,指示AD转换结束,并将结果数据存入锁存器,这个信号也可用作中断申请。当OE输入高电平时,ADC的输出三态门打开,转换结果的数字量可输出到数据总线。AD转换器的位数决定着信号采集的精度和分辨率。对于8通道的输入信号,其分辨率为05。8位AD转换器的精度为:。2.2.2 ADC0809的工作时序图6所示是ADC0809的工作时序图。从该时序图可以看出,地址锁存信号ALE在上升沿将三位通道地址锁存,相应通道的模拟量经过多路模拟开关送到AD转换器。启动信号START上升沿复位内部电路,START的下降沿启动转换,此时转换结束信号EOC呈低电平状态,由于逐位逼近需要一定过程,所以,在此期间,模拟

12、输入量应维持不变,比较器要一次次比较,直到转换结束,此时变为高电平。若CPU发出输出允许信号OE(输出允许为高电平),则可读出数据。另外,ADC0809具有较高的转换速度和精度,同时受温度影响也较小。 图6 ADC0809的工作时序图2.2.3 ADC0809与AT89C52单片机的接口电路ADC0809与AT89C52单片机的接口电路如图7所示。图中,P2.0、P2.1、P2.2 输出的低3位地址加到通道选择端A、B、C,可作为通道编码。其通道基本地址为0000H0007H。输出数据与P0口连接,CLOCK、ALE一起与P2.4相连,START和P2.5连接,EOC与P2.3相连,OE和P2

13、.6相连。图7 ADC0809与AT89C52单片机接口电路2.3 LCD1602显示电路字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。LCD1602分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别。LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下表1所示:表 1 LCD1602引脚接口说明编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择

14、12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。1602液晶模块内部的控制器共有11条控制指令,如下表2所示,其中1为高电平、0为低电平。表 2 LCD1602控制指令序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符

15、发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C

16、:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。其操作时序图如下所示:图8 读操作时序图图9 写操作时序图本设计中采用液晶LCD1602显示模数转换器采集到的数据,其D0D7与单片机的P0端口连接,使能端E、RS、RW分别与单片机P3

17、.1、P3.0、P3.2连接,此电路原理简单,电路连接方便,如图10所示。图10 液晶LCD1602显示电路2.4 键盘与单片机连接电路本设计中使用了两个独立按键来选择显示对应通道的电压,其中KEY1每按一下通道数就减1并在LCD1602上显示对应通道的电压,KEY2每按一下通道数就加1并在LCD1602上显示对应通道的电压,这样就十分方便查看不同通道的数据。键盘与单片机的连接电路如图11所示。图11 键盘与单片机的连接电路2.5系统整体电路图 根据上述各个部分的电路,将每个部分的电路在仿真软件PROTUES中连接起来,仔细检查线路后确保无误后就可以得到系统的整体电路图如12所示。图12 系统

18、整体电路图3、软件设计此次设计的多通道数据采集系统设置了8路模拟电压输入通道。仿真中为了便于调节输入的模拟电压,在输入模拟信号时采用电阻分压,最终的采样输入电压便可根据测试需要调节,系统总流程图如图13所示:开始系统初始化A/D数模转换有键按下?Y选择对应的通道LCD1602显示N图13 系统流程图4、系统仿真和测试结果根据方案设计结果,进行了硬件电路在Proteus下的仿真。当通过电位器调节AD转换器输入端的电压时,模拟电压值经过AD转换后,经由单片机将转换后的电压值发送至P0口,供LCD进行显示。仿真过程描述:通过KEIL软件对所编程序进行编译,生成.hex文件,在PROTUES软件中,用

19、MCS51单片机调用.hex,即可进行硬件的仿真。该仿真包括两部分:1.对8路电压进行采集,经由AD转换器进行转化,转化后的16进制数存于单片机的内部存储器中。2.对转换后的电压进行显示。将内部存储器中存储的转化后的电压对应的16进制数付给P0口,由LCD进行显示。调节电位器LCD的显示数据也会发生变化。仿真数据如下图所示: 图14 通路1数据采集结果 图15 通路2数据采集结果 图16 通路3数据采集结果 图17 通路4数据采集结果 图18 通路5数据采集结果 图19 通路6数据采集结果 图20 通路7数据采集结果 图21 通路8数据采集结果5、性能分析根据上述仿真结果图14至图21可以得到

20、:8路模拟通道电压值分别设置为0.05V、0.85V、1.50V、2.30V、3.05V、3.70V、4.25V、5.00V。经过系统处理,LCD1602显示的采集值分别为0.05V、0.84V、1.50V、2.29V、3.05V、3.70V、4.25V、5.00V。系统误差为小于0.01。如果想看到某一路的数据采集值,可以通过按键KEY1、KEY2来调节,这样就方便查看。综上所述:通过用PROTUES软件的仿真发现此次设计的系统原理图能够实现电压的正确测量,而且电压的误差极小,LCD1602液晶屏能够正确显示出8路电压测量结果。整个作品能较好的实现基本功能和扩展功能。6、心得与体会7、参考文

21、献附录一:源程序#include#include#define uchar unsigned char#define uint unsigned int/*定义LCD1602接口信息*/sbit lcdrs=P30;/数据命令选择位sbit lcden=P31;/使能位sbit lcdrw=P32;/*定义ADC0808接口信息*/sbit ADA=P20;sbit ADB=P21;sbit ADC=P22;sbit EOC=P23;sbit CLK=P24;sbit START=P25;sbit OE=P26;/*键盘管脚定义*/sbit key1=P33;sbit key2=P37; /*

22、定义数据*/uchar tab1=48,46,48,48,48,46,48,48,48,46,48,48,48,46,48,48; /存放AD采集数据uchar tab2=48,46,48,48,48,46,48,48,48,46,48,48,48,46,48,48;uchar tab3=TONGLU:;uchar tab4=DIANYA:;uchar tab5=12345678;uchar num,m=0,getdata=0;uint temp=0;/*延时函数*/void delay(uchar t) uchar x,y; for(x=t;x0;x-) for(y=110;y0;y-);

23、void delayl(uchar ltime) uchar i; for(i=ltime;i0;i-) delay(255);/*写命令函数*/void write_com(uchar com) lcdrs=0; P0=com; delay(10); lcden=1; delay(10); lcden=0;/*写数据函数*/void write_data(uchar date) lcdrs=1; P0=date; delay(10); lcden=1; delay(10); lcden=0;void disp(uchar h,l,uchar *p) write_com(0x80+h*0x40

24、+l); while(*p!=0) write_data(*p); p+; /*初始化函数*/void LcdInit() lcdrw=0; delay(5); lcden=0;/使能位置低电平 write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); delayl(20);void TimeInit() TMOD=0x10;/定时器1工作于方式1,16位不重装初值 TH1=(65536-200)/256; /定时200us(5KHz) TL1=(65536-200)%256; EA

25、=1; ET1=1; TR1=1;void AdTr(bit ADDA,ADDB,ADDC,uchar channel) START=0; OE=0; START=1; START=0;/A/D转换启动信号,正脉冲启动选中的模拟信号开始转换 ADA=ADDA; ADB=ADDB; ADC=ADDC; delay(5); while(EOC=0);/启动转换后EOC变为L,转换结束后变为H OE=1; getdata=P1; temp=getdata*1.0/255*500; OE=0; if(channel=4) channel=channel-4; tab24*channel=temp/10

26、0+0x30; tab24*channel+2=(temp%100)/10+0x30; tab24*channel+3=(temp%100)%10+0x30; void keyscan()/* 按键2进行减1*/ uint k; if(key1=0) m-; if(m5) write_com(0x80+0x07); write_data(tab5m-1); write_com(0x80+0x47); for(k=0;k=5&m9) write_com(0x80+0x07); write_data(tab5m-1); write_com(0x80+0x47); for(k=0;k4;k+) wr

27、ite_data(tab24*(m-5)+k); if(m=1)m=1; while(key1=0); /等待按键释放 if(key2=0) m+; if(m5) write_com(0x80+0x07); write_data(tab5m-1); write_com(0x80+0x47); for(k=0;k=5&m9) write_com(0x80+0x07); write_data(tab5m-1); write_com(0x80+0x47); for(k=0;k4;k+) write_data(tab24*(m-5)+k); if(m=9)m=0; while(key2=0); /等待按键释放 void main() LcdInit(); TimeInit(); while(1) AdTr(0,0,0,0); delay(5); AdTr(0,0,1,1); delay(5); AdTr(0,1,0,2); delay(5); AdTr(0,1,1,3); delay(5); AdTr(1,0,0,4); delay(5); AdTr(1,

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2