数字电压表设计与制作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
毕业设计(论文)
题目:数字电压表的设计及制作年级专业:电气自动化14321班
学生姓名: 秦小钧
指导教师:杨海蓉
2016年10 月13 日
毕业设计任务书
毕业设计题目:数字电压表的设计及制作
题目类型工程设计题目来源学生自选题
毕业设计时间从 2016/09/25 至 2016/10/13
1.毕业设计内容要求:
采用AT89S52作MCU,ADC0809(或其他芯片)进行AD转换,测量电压的范围为直流0—5V电压,四位数码管显示。
2.主要参考资料
[1]万福君,潘松峰.单片微机原理系统设计及应用[M],中国科学技术大学出版社,01年8月第2版
[2]周责魁。控制仪表及计算机控制装置[M] ,化学工业出版社,02年9月第1版
[3]李青。电路及电子技术基础[L] ,浙江科学技术出版社,05年2月第1版
[4]陈乐。过程控制及仪表[M],中国计量学院出版社,07年3月
[5]孙育才。新型AT89S52系列单片机及其应用[M] ,清华大学出版社,05年5月第1版3.
摘要
本设计由A/D转换、数据处理及显示控制等组成,测量0~5V范围内的输入电压值,由4位共阳8段数码管扫描显示,最大分辨率0。1V,误差±0。05V.数字电压表的核心为AT89S52单片机和ADC0832 A/D转换集成芯片。
关键词:数字电压表;单片机;AT89S52; ADC0832
第一章设计方案的选择
1。1功能要求及设计目标
采用AT89S52作MCU,ADC0809(或其他芯片)进行AD转换,测量电压的范围为直流0-5V 电压,四位数码管显示。(设计并制作出实物为优)。
1.2 系统设计方案
AT89S52具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器
AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash 存储器结合在一起,特别是可反复擦写的 Flash存储器可有效地降低开发成本。
AT89S5及AT89c52相比,前者的性能比后者高,所以本设计采用AT89S52芯片。
数模转换芯片:
ADC0809是采样分辨率为8位的、以逐次逼近原理进行模—数转换的器件.其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换,转换时间为100μs。
ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入及参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强.
由于ADC0832芯片的转换时间短,并且性能比较高,所以采用ADC0832作为数模转换芯片.
1 选择AT89S5
2 作为控制芯片
2 选择ADC0832芯片来进行模数转换
3 选择GEM5461GE 四位一体的共阳数码管来显示数字
4 用9012三极管来作为驱动电路,使GEM5461GE 四位一体的共阳数码工作.
5 用SW1按键作为复位按键,实现复位电路的功能.
第二章数字电压表系统设计
2。1 硬件系统的设计
2。1.1 硬件原理框图
图2-1硬件原理框图
2.1。2硬件系统设计原理
硬件设计原理:电阻R11上的电压经过ADC0832芯片进行模数转换后,由AT89S52芯片的P1口连接到驱动电路,当驱动电路工作使数码管显示前面转换过来的数字。
复位电路和晶振电路的设计
在接通电源后,当按下SW1后AT89S52不工作,使数码管全部变暗,当SW1一松开后AT89S52工作,数码管又变亮.晶振电路中的两个30pF的电容具有微调的作用.
2.2软件系统设计
2。2.1程序流程图
图2—3程序流程图
2。2.2编写程序
1 1,0选通道0
bADcl=1;
bADcl=0;// 3 down
bADda=1;
bADcl=1;
bADcl=0; // 4 down数码管显示程序
//数字电压表
#include
#define uchar unsigned char
#define uint unsigned int
#include 〈intrins。h>
code uchar TAB[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //定义数码管显示数值
uchar str_TME[4]={0,0,0,0,}; //定义数码管显示初始值
unsigned char data1; //data1用来存放转换以后的数据
void delay(uchar ms) //定义ms延迟程序
{
uchar j;
while(ms—-)
for(j=0;j〈125;j++);
}
uchar tmel=0;
bit sim=1;
/***********************计数器中断函数,用于控制电压转*********************
*******************时间间隔,此程序设定间隔为1S电压转换一次***************/
void tme_tr0(void) interrupt 1
{
TL0=0x58;
TH0=0x9e; //设置25ms 延时的初值
if(++tmel==40)
{
tmel=0;
sim=1;
}
2 AD0832AD转换子程序
/***************************************************************************
AD0832AD转换子程序
***************************************************************************/
sbit bADcs=P2^2; //片选位
sbit bADcl=P2^1; //时钟位
sbit bADda=P2^0; //数据位
void ad(void)
{ uchar i;
bADcs = 0;//当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,开始工作CS为低电平
bADcl=0; //第一个时钟下降沿前da为1,第二个及第三时钟下降沿前的数据为通道选择
bADda=1; //选置起始位
bADcl=1;
bADcl=0; // 1down
bADda=1; //通道选择第1位
bADcl=1;
bADcl=0;// 2 down