您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 基于51单片机之ADC0808电压显示
物理与电子工程学院基于51单片机之ADC0808电压显示指导老师:姓名:学号:班级:ADC0809中文资料ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。(1)ADC0809的内部逻辑结构由下图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。(2).ADC0809引脚结构ADC0809各脚功能如下:D7-D0:8位数字量输出引脚。IN0-IN7:8位模拟量输入引脚。VCC:+5V工作电压。GND:地。REF(+):参考电压正端。REF(-):参考电压负端。START:A/D转换启动信号输入端。ALE:地址锁存允许信号输入端。(以上两种信号用于启动A/D转换).EOC:转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。OE:输出允许控制端,用以打开三态数据输出锁存器。CLK:时钟信号输入端(一般为500KHz)。A、B、C:地址输入线。ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。地址输入和控制线:4条ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。通道选择表如下表所示数字量输出及控制线:11条ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。D7-D0为数字量输出线。CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,VREF(+),VREF(-)为参考电压输入。2.ADC0809应用说明(1).ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。(2).初始化时,使ST和OE信号全为低电平。(3).送要转换的哪一通道的地址到A,B,C端口上。(4).在ST端给出一个至少有100ns宽的正脉冲信号。(5).是否转换完毕,我们根据EOC信号来判断。(6).当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了实验程序#includereg51.h#includeintrins.h#includeabsacc.h#defineIN4_ADC0808XBYTE[0x8004]#definePAXBYTE[0x4000]#definePBXBYTE[0x4001]#definePCXBYTE[0x4002]#defineCOMXBYTE[0x4003]#defineuintunsignedint#defineucharunsignedcharsbitwr_ADC0808=P3^6;sbitrd_ADC0808=P3^7;sbitEOC=P1^0;ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uchartable1[4]={0x00,0x00,0x00,0x00};voiddelayms(uintxms){uintx,y;for(x=xms;x0;x--)for(y=115;y0;y--);}voidinit_8255(){COM=0x81;PA=0xff;PB=0xff;PC=0x0f;}ucharinit_adc0808(){uchardat;IN4_ADC0808=0;rd_ADC0808=1;wr_ADC0808=1;_nop_();wr_ADC0808=0;delayms(1);wr_ADC0808=1;_nop_();_nop_();while(EOC!=0);rd_ADC0808=0;_nop_();dat=IN4_ADC0808;rd_ADC0808=1;returndat;}voiddispaly(uchardat){table1[0]=dat/1000;table1[1]=dat%1000/100;table1[2]=dat%100/10;table1[3]=dat%10;PA=0xfb;PB=table[table1[0]];delayms(1);PB=0xff;PA=0xf7;PB=table[table1[1]];delayms(1);PB=0xff;PA=0xef;PB=table[table1[2]];delayms(1);PB=0xff;PA=0xdf;PB=table[table1[3]];delayms(1);PB=0xff;}intmain(void){init_8255();while(1){dispaly(init_adc0808());}return0;}实验截图:实验心得:这次实验台难了,刚开始着手做的时候,因为用的不够多,感觉无从做起。请教了几位同学之后,才开始做。在实际操作过程中,也有很多不会的地方,也是和同学商量着来做的。在数模转换的时候,要将5V分成255个,这就要用到放大。经过此次试验,感觉单片机不仅仅是一门课程,它也包含了其他许多课程的知识,也是一个系统的东西,以后,也得多注意积累基础
本文标题:基于51单片机之ADC0808电压显示
链接地址:https://www.777doc.com/doc-5691567 .html