数字电压表Word下载.docx
《数字电压表Word下载.docx》由会员分享,可在线阅读,更多相关《数字电压表Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
目的:
用8031单片机和ADC0809构成数字电压表,测量0-5V的电压,将所测的电压用数码管动态的显示出来。
要求:
1)设计方案描述
2)硬件原理图
3)基本原理说明
4)程序流程框图
5)原程序清单
6)心得体会
总体方案实现:
1)A/D转换模块
2)控制模块
3)显示模块
指导教师评语:
评分等级:
()
指导教师签名:
本次课程设计基于AT89C51单片机的一种输入电压测量电路,该电路采用ADC0809作为A/D转换元件,测量范围0至5伏,小数点后显示2位。
要求能够显示通道0的电压。
使用8279显示。
本系统主要包括五大模块:
数据采集模块、控制模块、显示模块、A/D转换模块、时钟模块。
绘制电路原理图与工作流程图,并进行调试,最终设计完成了该系统的硬件电路。
在软件编程上,采用了C语言进行编程,开发环境使用ADEK系列试验机开发环境。
开发了显示模块程序、通道切换程序、A/D转换程序。
数字电压表工作原理
数字电压表的系统工作原理:
首先,被测电压信号进入A/D转换器,单片机中控制信号线发出控制信号,启动A/D转换器进行转换,其采样得到的数字信号数据在相应的码制转换模块中转换为显示代码。
最后发出显示控制与驱动信号,驱动外部的数码管显示相应的数据。
图6.1所示为DVM的基本组成框图,需指出的是,图中将DVM分成模拟和数字两大部分,从框图上看,A/D转换器包含在模拟部分,这样划分并不严格,因为A/D转换器本身具有数字电路的性质,特别是大规模集成化A/D转换器是模拟与数字两系统相互结合的,就连逻辑控制也集成在其中。
软硬件调试
软件调试的任务是利用开发工具进行调试,发现和纠正程序的错误,同时也能发现硬件的故障。
软件调试是一个模块接一个模块进行的。
首先单独调试各子程序是否能够按照预期的功能,接口电路的控制是否正常。
最后调试整个程序。
尤其注意的是各模块间能否正确的传递参数。
1.检查数码管显示模块程序。
观察数码管上是否能够显示相应的字符。
2.检查A/D转换模块程序。
可以在硬件电路的输入端输入已知的几个电压,分别观察数码管上是否显示相应的电压值。
3.检查数据的转换模块程序。
程序可分为数据采集系统、数据转换系统、显示系统,这三部分先独立测试,然后整体调试。
①数据采集系统:
因为ADC0809本身并没有内部时钟,需要外部时钟来提供工作的时钟频率。
②显示系统的调试:
8279具有锁存功能,因此,当开关关闭后,应将8279的显示清除,在设计中,通过程序:
else
{
C8279=0x90;
for(i=0;
i<
3;
i++)
D8279=0;
}
来把数码管全灭。
另外,发现四位数码管显示的亮度不一样,后来经过调整各位数码管显示的间隔,调用延时函数解决了亮度不一的问题。
③整体测试:
把三部分进行程序联调,编译程序,看是否存在错误。
经过多次的尝试与查找相资料,最后做出并完善了整体的方案。
4.系统进一步改进方案为进一步提稳定性,去除显示时的数据抖动现象,建议编写一个滤波函数,对数据进行挑选排序,取平均值。
设计思路
本系统主要包括三大模块:
A/D转换模块、控制模块、显示模块。
选择AT89S52作为单片机芯片,选用8279控制LED数码管实现电压显示,利用ADC0809作为数模转换芯片。
将数据采集接口电路输入电压传入ADC0809数模转换元件,经转换后通过EOC与单片机INT0口连接,把转换完的模拟信号以数字信号的信号的形式传给单片机,信号经过单片机处理后送至8279来控制LED数码显示管显示。
如图4-1所示。
显示模块
显示模块采用数码管和8279驱动芯片。
数码管是最常用的一种显示器件,它是由几个发光二极管组成的8字段显示器件,其特点是价格非常的便宜,使用也非常的方便,显示效果非常的清楚。
小电流下可以驱动每光,发光响应时间极短,体积小,重量轻,抗冲击性能好,寿命长。
8279是可编程的键盘、显示接口芯片。
它既具有按键处理功能,又具有自动显示功能,在单片机系统中应用很广泛。
8279内部有键盘FIFO(先进先出堆栈)/传感器,双重功能的8*8=64BRAM,键盘控制部分可控制8*8=64个按键或8*8阵列方式的传感器。
该芯片能自动消抖并具有双键锁定保护功能。
显示RAM容量为16*8,即显示器最大配置可达16位LED数码显示。
显示模块如图4-4所示。
显示模块AD转换模块
ADC0809是一种8路模拟量输入、8位逐次逼近法A/D,转换时间在典型时钟频率下约为100us。
适用于多路数据采集。
电路图见4-2。
4-1系统原理框图
4-2ADCC采样电路
控制模块
本系统采用的控制芯片为ATMEL公司的AT89S52单片机。
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。
控制模块电路模块如图4-3所示。
图4-3控制模块
总体原理图
程序框架
ADC0809的分辨率为8位,当输入电压为0~5时,对应的数字量为00H~FFH,而显示范围为0.00~5.00,故显示前应进行标度变换,即将00H~FFH的变化转换为0.00~5.00的变化范围。
对于该数字电压表的程序设计思路为:
1)初始化8279和ADC0809,设定好工作方式。
2)启动8279和ADC0809。
3)数据采集和传送。
4)数据标度的转化。
由于要求精确到小数点后2位,因此应将采集到的数进行如下转化:
value*500/256。
5)数值的分解。
6)显示数据。
该数字电压表的软件流程图如图5.1所示。
图5-1数字电压表软件流程图
C语言程序
//---A/D转换---
//-----头文件引用------
#include<
Reg51.h>
absacc.h>
//#defineXBYTE((unsignedcharvolatilexdata*)0)
//-----宏声明-----
#defineA_DPORTXBYTE[0x8100]//0809通道0地址8100
#defineD8279XBYTE[0xFF80]//8279数据口地址
#defineC8279XBYTE[0xFF82]//8279状态/命令口地址
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeledseg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5E,0x79,0x71};
//LED显示常数表
//-----变量定义-----
bitbdatabz=0;
//定义标志
ucharval;
//----8279初始化子程序-----
voidinit8279()
{
C8279=0x0a;
//置8279工作方式
C8279=0x38;
//置键盘扫描速率
}
voiddelay()
inti=0;
for(i=0;
5000;
;
//-----初始化-----
voidfirst(void)
IT0=1;
EX0=1;
EA=1;
//INT0允许
//-----中断-----
voidint_0(void)interrupt0
val=A_DPORT;
//读A_D数据
bz=1;
//置读数标志
//-----主程序-----
main()
unsignedcharbai,ge,shi,adc,b,s,g;
unsignedintadcx;
first();
//初始化
init8279();
while
(1)
{
A_DPORT=val;
//启动A_D
//while(bz==0);
//等待A_D转换结束
delay();
val=A_DPORT;
bai=val/100;
shi=val%100/10;
ge=val%10;
bz=0;
//清读数标志
C8279=0x90;
//置显示位置
D8279=ledseg[ge];
//显示
D8279=ledseg[shi];
D8279=ledseg[bai];
adcx=(long)val*493/255;
b=adcx/100;
s=adcx%100/10;
g=adcx%10;
D8279=0x00;
D8279=ledseg[g];
D8279=ledseg[s];
D8279=ledseg[b]|0x80;
//显示
}
心得体会
这两周的课程设计中,让我再一次认识到了Protel的重要性,加深了对单片机理论的理解,明白了理论与实践还是有很大的区别的。
这一次的设计让我们接触了各种芯片,了解了他们之间的连接方法。
在实验过程中明显认识到了自己专业知识上的不足,为在以后的学习生活中确立了自己的目标。
通过这次的实践,学到最重要的一点就是,理论到实践的转化,怎样将我所学到的知识很好地应用到实际生活当中去,加强了自己的动手能力。
2周的时间要想完全就学会单片机明显是不可能的,我们一定要充分的利用大学里这最后一年的时光,多学习课本上的理论基础,为以后的实践奠定了一个坚实的基础。
尤其是要学会处理在实践中遇到的问题,在过程中学习更能快速的掌握知识,认识并改正自己的错误。