ADC0809数码管显示.docx
《ADC0809数码管显示.docx》由会员分享,可在线阅读,更多相关《ADC0809数码管显示.docx(28页珍藏版)》请在冰豆网上搜索。
![ADC0809数码管显示.docx](https://file1.bdocx.com/fileroot1/2023-1/3/71796ed7-cfdb-4e36-ba5d-6dab54f86325/71796ed7-cfdb-4e36-ba5d-6dab54f863251.gif)
ADC0809数码管显示
编号:
(单片机综合设计实训)
实训(论文)说明书
题 目:
ADC0809电压检测
院(系):
信息与通信学院
专 业:
电子信息工程
学生姓名:
学 号:
指导教师:
2013年 12月30日
摘 要
为了适应当今社会的需求,我校积极培养学生的动手能力和实践创新能力。
通过实训使学生学到电子产品的工艺设计知识。
并通过真刀真枪的电子产品制作,使学生了解电子产品制作过程、熟悉电子产品工艺,掌握制作电子产品的操作技能,为了进一步学习和应用奠定基础。
它不仅能使学生巩固模电、数电以及单片机三大技术,更能把动手实践糅和在一起,真正实现培养高素质、高层次、多样化、创造性的人才培养目标。
本次实训内容为数字电压表,数字电压表是利将被测模拟量转换成数字量,并用数字方式显示测量结果的电子测量仪表。
通常数字电压表都采用A/D转换集成电路来采集电压,它具有测量精度高,读数方便,在体积、重量、耗电、稳定性及可靠性等方面性能指标均明显优于指针式万用表。
其中,A/D转换器将输入的模拟量转换成数字量,通过单片机控制按规定的时序将A/D转换器中各组模拟开关接通或断开,保证A/D转换芯片ADC0809并通过数码管显示电压值,本次实训任务设计一个数字电压表,能够测量0—25V之间的直流电压值。
通过四位数码循环显示8路电压。
关键字:
数字电压表、数码管显示、AT89S52、ADC0809
Abstract
Inordertomeettheneedsoftoday'ssociety,ourschoolactivelycultivatetheabilitiesofstudentsandpracticeinnovation.Throughthetrainingprocessdesignedtoenablestudentstolearntheknowledgeofelectronicproducts.Andproductionofelectronicproductsthroughashooting,sothatstudentsunderstandtheproductionprocessofelectronicproducts,electronicproductsfamiliarprocess,masterproductionskillsofelectronicproducts,inordertolaythefoundationforfurtherstudyandapplication.Itnotonlyenablesstudentstoconsolidateanalogcircuit,digitalcircuitandthreesingle-chiptechnology,andmoreablehands-onpracticeandblendstogethertotrulycultivatehigh-quality,high-level,diverse,creativepersonneltrainingobjectives.Thetrainingcontentforthedigitalvoltmeter,digitalvoltmeterisfavorabletoconvertthemeasuredanalogtodigitalanddigitallydisplaythemeasurementresultsofelectronicmeasuringinstruments.TypicallydigitalvoltmeterareusedA/DconverterICtocollectvoltage,whichhashighaccuracy,easyreading,intermsofsize,weight,powerconsumption,stabilityandreliabilityperformanceindicatorsaresignificantlybetterthanthemultimeter.Which,analogA/Dconverterconvertstheinputintoadigital,single-chipcontrolasrequiredbythetimingofeachsetofanalogA/Dconverterswitchisturnedonoroff,toensureA/DconversionchipADC0809andthroughdigitaldisplayvoltagevalue,thistrainingtasktodesignadigitalvoltmeterthatcanmeasureDCvoltagebetween0-25V.Cyclethroughfourdigitaldisplay8voltage.
Keywords:
digitalvoltmeter,digitaldisplay,AT89S52,ADC0809
目 录
引言 1
1设计内容及要求 1
2系统电路的组成及工作原理 1
2.1系统的组成 1
2.2工作原理 1
2.3程序分析 5
2.4程序流程图 11
3单元模块设计 11
3.1复位电路、时钟电路、下载口模块的设计 11
3.2单片机电路的设计 12
3.3数码管显示电压电路的设计 13
3.4数码管显示通道电路的设计 14
3.5A/D转换电路的设计 14
3.6电阻分压电路的设计 15
3.7电源输入电路的设计 16
4总体电路的设计 17
5调试工艺 17
5.1元器件安装焊接 17
5.2调试步骤及结果 18
5.3自我评价与完善 18
6总结 18
谢 辞 20
参考文献 21
附 录 22
引言
单片机以其价格低廉、功能强大、体积小、性能稳定等优点,深受广大电子设计爱好者喜爱。
目前,各类产品中都能看到单片机的身影,如台式机主板的各类控制器,玩具,智能设备,以及各类数据采集系统和控制终端等。
单片机是现代电子设计中使用最广泛的电子元件。
而其中的51系列单片机是最早兴起的一类。
51系列单片机功能完备、指令系统丰富,发展的最为成熟。
ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。
1设计内容及要求
本次实训设计的内容是ADC0809电压检测,分为基本要求和发挥要求两部分。
基本要求:
1)实现8路直流电压检测;2)测量电压范围0—5V;3)显示指定电压通道和电压值
4)用按键切换显示通道
发挥要求:
1)测量电压范围为0—25V;2)循环显示8路电压
2系统电路的组成及工作原理
2.1系统的组成
该电路由以下几个部分组成:
1)复位电路、时钟电路、下载口;2)AT89S52组成的单片机电路;3)数码管显示电压值电路;4)数码管显示通道电路;5)ADC0809组成A/D转换器电路;6)电阻分压电路;7)电源输入;8)电压调节电路
2.2工作原理
(1)分析系统的逻辑功能,画出其逻辑图如下:
图1逻辑图
(2)P3口作为AT89S52的一些特殊功能口,功能如下表所示:
表1P3口引脚特殊功能表
(3)A/D转换器芯片ADC0809简介:
图2ADC0809引脚图
(4)ADC0809的内部逻辑结构图如图所示:
图3ADC0809内部逻辑结构图
图中多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D转换器进行转换,这是一种经济的多路数据采集方法。
地址锁存与译码电路完成对A、B、C3个地址位进行锁存和译码,其译码输出用于通道选择,其转换结果通过三态输出锁存器存放、输出,因此可以直接与系统数据总线相连,表2为通道选择表。
表2通道选择表
地址
选中通道
ADDC
ADDB
ADDA
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
IN0
IN1
IN2
IN3
IN4
IN5
IN6
IN7
(5)ADC0809芯片为28引脚为双列直插式封装,对ADC0809主要信号引脚的功能说明如下:
IN7~IN0:
8路模拟通道信号输入,通过模拟开关实现8路模拟输入信号分时选通。
ALE:
地址锁存允许信号。
对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。
START:
转换启动信号。
START上升沿时,复位ADC0809;START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持低电平。
ADDA,ADDB,ADDC:
通道端口选择线,A为低地址,C为高地址其地址状态与通道对应关系见表2。
CLK:
输入时钟,为A/D转换器提供转换的时钟信号,典型的工作频率为640KHZ。
EOC:
转换结束信号。
EOC=0,正在进行转换;EOC=1,转换结束。
该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。
D7~D0:
数据输出线。
为三态缓冲输出形式,可以和单片机的数据线直接相连。
D0为最高位,D7为最低位。
OE——输出允许信号。
用于控制三态输出锁存器向单片机输出转换得到的数据。
OE=0,输出数据线呈高阻;OE=1,输出转换得到的数据。
Vref(+)和Vref(-):
基准电压输入,用于决定输入模拟电压的范围。
允许Vref(+)和Vref(-)是差动的或不共地的电压信号,多数情况下,Vref(+)接+5V,Vref(-)接GND,此时输入量程为0~5V。
当转换精度要求不高或电源电压Vcc较稳定和准确时,Vref(+)可以接Vcc,否则应单独提供基准电源
2.3程序分析
(1)#include
#defineuintunsignedint
#defineucharunsignedchar
#definelintlongint
sfr T2MOD=0xc9;//52单片机定时计数器2特殊寄存器
/**************函数定义******************************/
ucharshuzu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbitst=P1^3;
sbitEOC=P1^2;
sbitOE=P1^1;
sbitadd0=P1^6;
sbitadd1=P1^5;
sbitadd2=P1^4;
sbitkey1=P2^0;
sbitkey2=P2^1;
sbitkey3=P2^2;
sbitDIG5=P2^7;
sbitDIG4=P2^6;
sbitDIG3=P2^5;
sbitDIG2=P2^4;
sbitDIG1=P2^3;
voidxianshi();
voiddelay(uintz);
voidget_data();
voidkey_scan();
lintquzhi,zzhi,zhi;
uintchannel=0,mode=0,b=0,k=0;
/***************函数定义*****************************/
/***************延时函数*****************************/
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/***************延时函数*****************************/
该部分程序表示ADC0809芯片的一些控制端口跟AT89S52单片机端口一些管脚的连接。
CLOCK与P1.0相连由C52的T2产生定时脉冲输出;ST与P1.3相连;EOC与P1.2相连;OE与P1.1相连;此外还定义了数码显示的管脚位定义,分别为P0接数码管段选,P2高五位接数码管位选,低三位接按键;还声明了用到的函数和变量。
(2)/****************主程序*****************************/
voidmain()
{
T2MOD=0X02;
T2CON=0X00;
RCAP2H=0xff;//0XFF 0XFF
RCAP2L=0xf1;//0XFA==500khz ,0xf1==200khz
TR2=1;
while
(1)
{
get_data();
xianshi();
key_scan();
if(mode==1)
{
b++;
if(b==50)
{
b=0;
channel++;
if(channel==8)
channel=0;
}
}
}
}
/*****************主程序***************************/
该部分程序表示程序的初始化,并且开定时/计数器2使其工作在脉冲输出方式,周期为200KHZ,初始化完成后开始循环执行显示子程序,按键子程序,取数值子程序。
(3)/*****************ADC0809配置**********************/
voidget_data()
{
switch(channel)
{
case0:
add0=0;add1=0;add2=0;break;
case1:
add0=1;add1=0;add2=0;break;
case2:
add0=0;add1=1;add2=0;break;
case3:
add0=1;add1=1;add2=0;break;
case4:
add0=0;add1=0;add2=1;break;
case5:
add0=1;add1=0;add2=1;break;
case6:
add0=0;add1=1;add2=1;break;
case7:
add0=1;add1=1;add2=1;break;
}
OE=0;
st=0;
st=1;//上降沿初始化
st=0;//下降沿触发,开始工作
delay
(1);
while(EOC==0);//查询EOC引脚状态,EOC引脚由0变1,表示A/D转换过程结束
OE=1;//允许读数,将OE引脚设置为1状态
quzhi=P3;//读取P1口的数值
if(mode==3)
zhi=quzhi*196*5;
else
zhi=quzhi*196;//精确度19.6mv相乘得输出数值
delay(5);
OE=0;
if(mode==3){zzhi=zhi/10%10000;}
else
zzhi=zhi%10000;
}
/*****************ADC0809配置**********************/
该部分程序实现通道选择并通过脉冲来采集信号,等待信号采集完毕后,把采集到的数字量转化为模拟量,并把结果存起来。
根据当前的模式选择计算的方式。
由于ADC0809为8位经度的集成芯片所以相应的值为(采集电压值)*(参考电压/255)。
(4)/*****************按键扫描*************************/
voidkey_scan()//通道和模式选择
{
if(key1==0)
{
delay(5);
if(key1==0)
{
channel++;
if(channel==8)
channel=0;
}
while(!
key1);
}
if(key2==0)
{
delay(5);
if(key2==0)
{
if(mode==0)
mode=1;
else
mode=0;
}
while(!
key2);
}
if(key3==0)
{
delay(5);
if(key3==0)
{
k++;
if(k==1){mode=3;}
if(k==2){k=0;mode=0;}
}
while(!
key3);
}
}
/*****************按键扫描*************************/
该部分程序表示按键扫描,通过按键的不同来选择不同的工作模式和采集电压通道,按键功能分别为1键通道选择顺序为1~8,2键循环扫描8个通道电压值,3键选择采集的电压为5V或25V。
(5)/*****************显示函数*************************/
voidxianshi()
{
DIG1=1;
DIG2=1;
DIG3=1;
DIG4=1;
P0=shuzu[channel+1];
DIG5=0;
delay(4);
DIG2=1;DIG3=1;DIG4=1;DIG5=1;
if(mode==3){P0=shuzu[zhi/100000];}
else
P0=shuzu[zhi/10000]+0x80;
DIG1=0;
delay(4);
DIG1=1;DIG3=1;DIG4=1;DIG5=1;
if(mode==3){P0=shuzu[zzhi/1000]+0x80;}
else
P0=shuzu[zzhi/1000];
DIG2=0;
delay(4);
DIG1=1;DIG2=1;DIG4=1;DIG5=1;
P0=shuzu[zzhi%1000/100];
DIG3=0;
delay(4);
DIG1=1;DIG2=1;DIG3=1;DIG5=1;
P0=shuzu[zzhi%100/10];
DIG4=0;
delay(4);
DIG4=1;
}
/*****************显示函数*************************/
该部分程序实现了显示当前采集电压的通道和采集电压数值的输出。
工作原理为首先对关闭所有显示,然后先送数码段选,显示字段为采集到电压的值,对采集到的电压进行分位,分别把十位,个位,小数点后三位的字符取出,经P0口送段选,然后打开相应位的开关,循环扫描便得到需要显示的数值。
2.4程序流程图
程序流程图如图4所示:
程序初始化
N
Y
执行采样程序
启动AD转换
读入电压值
N
Y
处理数据,调用显示模块
执行显示模块并显示
结束
图4程序流程图
3单元模块设计
3.1复位电路、时钟电路、下载口模块的设计
电路设计如下图5所示,该模块中的复位电路起到了复位的作用,时钟电路为总电路提供12MHZ的频率输入。
图5复位、时钟电路
3.2单片机电路的设计
电路设计如下图6所示:
图6单片机电路
3.3数码管显示电压电路的设计
电路如图7所示,通过驱动电路来使四位共阳数码管发光。
通过四位共阳数码管,来显示输入的测量电压的大小,随着选择的通道不同,当循环到所接入的通道时,则在该四位共阳数码管中显示当前输入的电压值。
图7数码管显示电压电路
3.4数码管显示通道电路的设计
电路如图8所示,通过该数码管来显示八路通道的循环,从0—7循环显示。
图8数码管显示通道电路
3.5A/D转换电路的设计
A/D转换电路如图9所示:
本电路预留74LS74做时钟电路从单片机的30管脚去12MHZ六分频,再由74LS74进行四分频得到500KHZ频率供ADC0809的CLK。
图9A/D转换电路
3.6电阻分压电路的设计
电阻分压电路如图10所示,电阻为线性器件可以通过4个10K和10K的电位器约1:
5的比例对25V输入电压进行分压,使得ADC0809的电压不超过5V,避免ADC0809芯片被烧坏。
通过此比例使得测量电压最大可达到25V。
图10电阻分压电路
3.7电源输入电路的设计
电源输入电路如图11所示,通过外接电源,使该电路运行。
图11电源输入电路
4总体电路的设计
通过前面的单元电路的设计,将他们合理的组合连接起来,就可以得到总体设计电路图,其图如图12所示:
图12总体原理图
5调试工艺
5.1元器件安装焊接
根据原理图和PCB图,首先明确元器件的位置和跳线的连接,要与所打的孔一一对应,尤其要注意大孔和小孔所安装元器件的不同,还有的就是要注意有些元器件比如电容等长短管脚所代表正负不同(长管脚接正,短管脚接负),还有芯片安装的正负之分,因此在安装时要特别注意。
接着进行元器件的安装了,首先要做的就是把跳线连接好,于是要准备好长短适宜的铜线,接着对应好其相应的孔将其平整的安装进去,此时可以先对其进行焊接,待完成之后,便开始进行对其它元器件的安装,安装时有一个技巧,就是由低到高一级一级的进行安装、焊接,这样做的目的是避免焊接时元器件会因为松动而脱落从而造成不美观甚至元器件没有被焊接进去。
同时元器件可以一边安装一边焊接,这样可以避免漏焊以及当原件多的时候不好焊接的问题。
还有的就是注意焊接时候经常会出现的问题:
虚焊、拉尖、漏焊、短路等等,因此首先必须给烙铁头预热到足够的温度,还有焊接时要注意快、准、稳,同时烙铁头的清洁也要重视,还有就是当原件排布比较多比较挤的时候要特别注意,焊料的量要适度,避免一些会造成短路的地方粘连在一起。
5.2调试步骤及结果
在指定电源接口接入电源,注意正极和负极之分。
然后再外接一个电源,正极接八路通道接口的任意一个接口,负极接在电源接口的地上即可。
通过四位共阳数码管显示当前电源的电压值,通过一位共阳数码管显示通道,可以任意接任何一个通道,让该通道显示当前电压的值。
调试结果如下:
烧录好程序后,接通电源,开机显示通道1的电压值,当按下按键1,一位数码管显示2通道,并显示当前