梁家亮基于单片机的数字电压表设计.docx
《梁家亮基于单片机的数字电压表设计.docx》由会员分享,可在线阅读,更多相关《梁家亮基于单片机的数字电压表设计.docx(12页珍藏版)》请在冰豆网上搜索。
梁家亮基于单片机的数字电压表设计
《单片机原理与应用及C51程序设计》
课程设计
多
路
数
字
电
压
表
姓名:
梁家亮
班级;自动化0822班
学号:
0814791080
多路数字电压表课程设计
一、题目及设计要求
1、题目:
多路数字电压表
2、利用单片机AT89C52与ADC0809CCN设计一个多路数字电压表,能够测量0~5V的直流电压值,通过四位数码管显示。
二、主要技术要求:
1、单片机的定时中断技术
2、数字芯片A\D转换技术
3、单片机的数据处理技术
4、单片机控制的数码管显示技术
三、硬件设计思想和原理图
1系统总体设计框图
本系统采样CT89C52单片机作为控制核心,以ADC0809CCN为数据采样系统,实现被测电压的数据采样;使用系列比较器检测输入电压的范围,用共阴极数码管显示结果。
显示电路
输入电压
52单片机
极性检测
AD转换
电压检测
2单片机系统
单片机最小系统包括复位电路,晶振电路,电源电路,仿真时需搭建复位电路和晶振电路。
晶振电路:
单片机最小系统如下所示,其中P1口用于驱动数码管,P0口用于接收ADC0809转换的数据。
P2口用于控制ADC0809CCN。
单片机最小系统:
3A\D转换电路
利用ADC0809作为AD数据采样器件,ADC0809是CMOS单片型逐次逼近式A/D转换器它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近。
ADC0809的工作过程是:
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
ADC0809各个管教功能:
IN0~IN7:
8路模拟量输入端。
2-1~2-8:
8位数字量输出端。
ADDA、ADDB、ADDC:
3位地址输入线,用于选通8路模拟输入中的一路
ALE:
地址锁存允许信号,输入,高电平有效。
START:
A/D转换启动信号,输入,高电平有效。
EOC:
A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:
时钟脉冲输入端。
要求时钟频率不高于640KHZ。
REF(+)、REF(-):
基准电压。
Vcc:
电源,单一+5V。
GND:
地。
ADC0809与单片机的连接。
4信号调理模块
该部分主要实现的功能是自动量程切换和电压变换,模块主要由电压极性检测电路、电压范围粗测电路、电压变换电路三部分组成。
电压极性检测电路
电压极性检测电路采用过零比较器检测负电压的方式实现的,运算放大器LM324的反向端接地,同向端通过100K电阻接输入信号。
电压范围粗测电路
为了粗略地得到被测量的电压范围我们采用多组比较器的方式,通过阶梯式比较的方法确定输入电压的范围。
量程切换电路
电路由衰减电阻、切换继电器和运算放大器组成,对应的是衰减1/2、1/3、1/4和无零漂放大50倍,切换电路如图所示。
电压变换到0-5V标准信号后,再由A/D转换进行采样,最后由单片机算法还原。
四、软件设计与流程
1程序流图
软件部分采用模块化程序设计的方法,由单片机控制主程序、A/D转换子程序、电压检测及继电器控制程序、液晶显示组成。
系统软件设计是在KeilC编译环境下进行的,由于C语言程序可移植性好,所以提高了编程的效率。
软件程序流程图:
2功能介绍
P0首先接收数据,据此控制PC6,PC7实现电压转换,保证正电压输出。
PB0,PB1,PB2,PB3,PA6的输入值通过PA1,PA2,PA3,PA4,PA5控制继电器1,2,3,4,5实现电压增减并输入A/D转换器MAX187进行测量。
最后输入PB4,PB6,PB7并由P1输入数码管显示。
五、软件仿真及测试数据
1仿真结果
将写好的程序下载到仿真软件中的51单片机中,点击运行,观察数码管显示数值与图中输入电压进行比较。
理解其误差有多大。
由于仿真软件缺少相应器材,故而未能进行彻底仿真。
总体电路图:
参考文献
1、谢维成《单片机原籍与应用及C51程序设计》清华大学出版社。
2、陈汝全《微机与单片机接口技术及应用》成都电讯工程学院出版社。
3、诸林俗《电子技术基础》中国劳动社会保障出版社。
4、张志良,马彪《单片机原理与控制技术》机械工业出版。
5、陈伟人《单片微型计算机原理及应用》清华大学出版社。
6、沈任元,吴勇《常用电子元器件简明手册》机械工业出版。
7、霍国良《微控制器应用基础》中国劳动社会保障出版社
附录
主程序:
#include
Unsigned char codedispbitcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsignedchardispbuf[4];
unsignedinti;
unsignedintj;
unsignedchargetdata;
unsignedinttemp;
unsignedinttemp1;
unsignedcharcount;
unsignedchard;
sbitST=P3^0;
sbitOE=P3^1;
sbitEOC=P3^2;
sbitCLK=P3^3;
sbitP20=P2^0;
sbitP21=P2^1;
sbitP22=P2^2;
sbitP23=P2^3;
sbitP17=P1^7;
voidTimeInitial();
voidDelay(unsignedinti);
voidTimeInitial()
{TMOD=0x10;
TH1=(65536-200)/256;
TL1=(65536-200)%256;
EA=1;
ET1=1;
TR1=1;
}
voidDelay(unsignedinti)
{
unsignedintj;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
voidDisplay()
{
P1=dispbitcode[dispbuf[3]];
P20=0;
P21=1;
P22=1;
P23=1;
Delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[2]];
P17=1;
P20=1;
P21=0;
P22=1;
P23=1;
Delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[1]];
P20=1;
P21=1;
P22=0;
P23=1;
Delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[0]];
P20=1;
P21=1;
P22=1;
P23=0;
Delay(10);
P1=0x00;
}
voidmain()
{
TimeInitial();
while
(1)
{
ST=0;
OE=0;
ST=1;
ST=0;
while(EOC==0);//查询转换结束
OE=1;
getdata=P0;
OE=0;
temp=getdata*1.0/255*500;
dispbuf[0]=temp%10;
dispbuf[1]=temp/10%10;
dispbuf[2]=temp/100%10;
dispbuf[3]=temp/1000;
Display();
}
}
voidt1(void)interrupt3using0
{
TH1=(65536-200)/256;
TL1=(65536-200)%256;
CLK=~CLK;
}