最新AD转换的数字电压表汇总.docx

上传人:b****1 文档编号:1893977 上传时间:2023-05-02 格式:DOCX 页数:14 大小:1.46MB
下载 相关 举报
最新AD转换的数字电压表汇总.docx_第1页
第1页 / 共14页
最新AD转换的数字电压表汇总.docx_第2页
第2页 / 共14页
最新AD转换的数字电压表汇总.docx_第3页
第3页 / 共14页
最新AD转换的数字电压表汇总.docx_第4页
第4页 / 共14页
最新AD转换的数字电压表汇总.docx_第5页
第5页 / 共14页
最新AD转换的数字电压表汇总.docx_第6页
第6页 / 共14页
最新AD转换的数字电压表汇总.docx_第7页
第7页 / 共14页
最新AD转换的数字电压表汇总.docx_第8页
第8页 / 共14页
最新AD转换的数字电压表汇总.docx_第9页
第9页 / 共14页
最新AD转换的数字电压表汇总.docx_第10页
第10页 / 共14页
最新AD转换的数字电压表汇总.docx_第11页
第11页 / 共14页
最新AD转换的数字电压表汇总.docx_第12页
第12页 / 共14页
最新AD转换的数字电压表汇总.docx_第13页
第13页 / 共14页
最新AD转换的数字电压表汇总.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

最新AD转换的数字电压表汇总.docx

《最新AD转换的数字电压表汇总.docx》由会员分享,可在线阅读,更多相关《最新AD转换的数字电压表汇总.docx(14页珍藏版)》请在冰点文库上搜索。

最新AD转换的数字电压表汇总.docx

最新AD转换的数字电压表汇总

 

AD转换的数字电压表

珞珈学院

A/D转换器设计数字电压表

专业:

通信工程

年级:

2009级

学生:

郭吕超

设计时间:

2011.12.22

1.实验器件介绍………………………………………………………3

2.数字电压表仿真图…………………………………………………4

3.实验设计原理………………………………………………………5

4.数字电压表C语言程序…………………………………………..6

 

一.实验器件介绍

1.ADC0804芯片介绍

ADC0804是一个8位CMOS型逐次比较式A/D转换器,具有三态锁存输出功能,最短转换时间为100us,其芯片实物图和引脚图如下:

CS:

片选信号,低电平有效;

RD:

外部读取转换结果的控制信号,当RD为高电平时,DB0-DB7为高阻态;当RD为低电平时,数据才会通过DB0-DB7输出;

WR:

A/D转换器启动控制信号,当WR由高电平变为低电平时,转换器被清零,当WR由低电平变为高电平时,A/D转换正式开始;

CLKIN和CLKR:

时钟输入端,在ADC0804片内有时钟发生器,采用内部时钟时,在CLKIN

CLKR和地线之间连接RC电路即可,ADC0804的工作频率约为100-1460khz,若使RC

电路作为时钟,其振荡频率为1/(1.1RC);

INTR:

中断请求输出信号,当A/D转换结束时,INTR引脚输出低电平,只有当数据被取走后(单片机发出读数据指令),此引脚才会变为高电平;

VIN+和VIN-:

差动模拟电压输入端,若输入为单端正电压,VIN-应接地,若差动输入,则输入信号直接加入VIN+和VIN-;

AGND.DGND:

模拟信号地与数字信号地,若系统对抗干扰要求严格,则这两条地线必须分接

地;

VREF/2:

参考电压值的一半,若在ADC0804组成的电路中需要的参考电压为5V,则此引脚可以悬空。

若电路中需要使用的参考电压小于5V,即参考电压值的一半小于2.5V,这时可将此引脚连接到需要的参考电压值(如4V)的1/2电压值上(如2V),在ADC0804芯片内部会自动判断参考电压的选择,当VREF/2引脚的电压值低于2.5V时,芯片会自动选择由VREF/2引脚电压放大2倍以后的电压值作为参考电压。

DB0-DB7:

8位数字输出端。

2.LCD1602液晶介绍

1602字符型LCD有16个引脚,其芯片实物图和引脚图如下:

1602字符型LCD具有较丰富的指令集,如下表:

 

下面介绍LCD1602引脚功能:

VSS:

电源地;

VDD:

+5V逻辑电源;

VEE:

液晶驱动电源;

RS:

寄存器选择(RS=1,数据;RS=0,命令);

R/W:

读.写操作选择(R/W=1,读;R/W=0,写);

E:

使能信号;

DB0-DB7:

数据总线;

Black1:

背光电源线;

Black2:

背光电源地线;

二.数字电压表仿真图

三.实验设计原理

1.实验硬件设备:

LCD1602液晶显示器一块,ADC0804芯片一片,两个滑动变阻器,一个150pF电容,两个200欧姆的电阻,一个10K欧姆的电阻,STC89C51芯片,电源,地线,按键(复位电路和晶振电路另加),杜邦线诺干。

2.ADC0804在使用时,外围电压的连接比较简单,只需要对参考电压和时钟输入端进行设计即可。

通常情况下,时钟的输入可以选用RC谐振电路,ADC0804可以进行A/D转换的时钟频率为100—1460KHZ,典型值为640KHZ,这里选用R=10K欧姆.C=150PF的谐振电路,利用公式1/(1.1RC)计算后,此时的时钟频率约为606KHZ,与典型值十分接近。

3.模拟电压的计算:

这里选用的是8位A/D转换器,数值的变化范围是0—255(00H-FFH),模拟电压的输入范围是0-5V,每个数码的变化,对应的电压值的变化为0.0196V,所以要计算模拟电压值,就可以利用下面的公式进行计算:

V=D*0.0196

式中,V为计算出的模拟电压值,D为A/D转换器转换后的数字量。

4.克服浮点运算方法:

从上式不难看出,在计算过程,需要乘以一个0.0196,这是一个小数,在计算机中称为浮点数。

而对于8位单片机来说,不具有浮点运算能力,如果一定要计算浮点数,将占用单片机中大量的内存单元和CPU时间。

这里采用一种简单的方法:

就是将从A/D读取进来的数字量直接乘以196,即进行整数运算,运算结果是真正值的1000倍,这个整数运算的速度是非常快的,不会占用过多的CPU时间。

由于是两个8位的二进制数相乘,得到的结果不会超过16位二进制数。

5.电压值的显示:

最常用到的二进制转换成BCD码的方法是用除法。

先用得到的16位二进制数除以10000,得到的商就是模拟电压值的整数部分(模拟电压的输入为0-5V,所以整数部分只有1位),得到的余数是模拟电压值的小数部分;接下来用余数除以1000,商是十分位,余数作为被除数再除以100,商为百分位,余数再除以10,商为千分位。

这样就将16位的二进制数转换成了4位BCD码。

四.数字电压表C语言程序

//珞珈09级通信单片机实验《AD转换器设计数字电压表》

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitlcd_rs=P2^0;

sbitlcd_en=P2^1;

sbitcs=P2^7;//AD片选

sbitrd=P2^6;

sbitwr=P2^5;

sbitINTR=P3^2;//中断请求信号

uinttemp,D1,D2,D3,D4;

uintshu;

uintAD_read();

voiddelay(uintz);

voidwrite_com(ucharcom);

voidwrite_date(uchardate);

voidlcd_init();

voiddisplay(ucharqian,ucharbai,ucharshi,ucharge);

voidAD_init();

voidAD_start();

voidmain()

{

write_com(0x01);//清屏

lcd_init();

AD_init();

while

(1)

{

AD_start();

while(INTR==1);//AD转换是否结束,结束为低电平

INTR=0;

shu=AD_read();

shu=shu*196;

D1=shu/10000;//整数部分,0.0196v是最小变化量

shu=shu%10000;

D2=shu/1000;//十分位数

shu=shu%1000;

D3=shu/100;//百分位数

shu=shu%100;

D4=shu/10;//千分位数

display(D1,D2,D3,D4);//显示LcD1602

}

}

 

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

 

voidwrite_com(ucharcom)

{

P0=com;

lcd_rs=0;

lcd_en=1;

lcd_en=0;

delay

(2);

}

 

voidwrite_shu(ucharshu)

{

P0=shu;

lcd_rs=1;

lcd_en=1;

lcd_en=0;

delay(5);

}

 

voidlcd_init()

{

 

lcd_en=0;

write_com(0x01);//清屏

write_com(0x06);//指针加减与移动

write_com(0x0c);//光标

write_com(0x38);//液晶初始化命令

}

 

voiddisplay(ucharqian,ucharbai,ucharshi,ucharge)

{

write_com(0x80+0x02);

write_shu('G');

write_com(0x80+0x03);

write_shu('u');

write_com(0x80+0x04);

write_shu('o');

write_com(0x80+0x06);

write_shu('L');

write_com(0x80+0x07);

write_shu('v');

write_com(0x80+0x09);

write_shu('C');

write_com(0x80+0x0a);

write_shu('h');

write_com(0x80+0x0b);

write_shu('a');

write_com(0x80+0x0c);

write_shu('o');

write_com(0x80+0x44);

write_shu(0x30+qian);//0x30代表数字0

write_com(0x80+0x45);

write_shu('.');

write_com(0x80+0x46);

write_shu(0x30+bai);

write_com(0x80+0x47);

write_shu(0x30+shi);

write_com(0x80+0x48);

write_shu(0x30+ge);

write_com(0x80+0x49);

write_shu('V');

}

 

voidAD_init()//AD初始化函数

{

cs=1;

wr=1;

rd=1;

}

voidAD_start()//AD启动

{P1=0xff;

cs=0;//开

wr=0;

wr=1;//写完后关闭

cs=1;

}

uintAD_read()

{

cs=0;

rd=0;

delay

(1);

temp=P1;

rd=1;

cs=1;

return(temp);

}

人间处处单片机!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

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

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