基于51/52单片机的正负电压AD测量与数码管显示设计
摘要
本文介绍了一种基于51/52单片机的正负电压测量系统。该系统通过模数转换(AD)电路对正负电压进行采集,将模拟信号转换为数字信号,并通过数码管显示测量结果。本文详细阐述了系统的硬件设计、软件编程以及实验测试结果,验证了系统的可行性和准确性。
关键词:51/52单片机;正负电压测量;模数转换;数码管显示
一、引言
电压测量是电子工程中常见的任务之一。在实际应用中,经常需要测量正负电压的值。传统的电压表虽然可以满足一定的测量需求,但其功能单一、体积较大且不易于集成。基于单片机的电压测量系统具有体积小、功能丰富、易于扩展等优点,因此得到了广泛的应用。
二、系统总体设计
本系统主要由51/52单片机、模数转换(AD)电路、数码管显示电路和电源电路组成。单片机作为系统的核心控制器,负责控制AD转换、处理转换结果并驱动数码管显示。AD电路用于将正负电压信号转换为单片机可以处理的数字信号。数码管显示电路用于显示测量结果。电源电路为系统提供稳定的工作电压。
三、硬件设计
- 单片机最小系统电路
单片机最小系统电路包括单片机芯片、晶振电路、复位电路和电源电路。本设计选用51/52系列单片机作为核心控制器,该系列单片机具有性价比高、易于编程和扩展性强的特点。
2、模数转换(AD)电路
为了测量正负电压,需要选择一款支持双极性输入的AD转换器。本设计选用了一款常用的AD转换芯片,该芯片具有高精度、低噪声和低功耗的特点。通过编程控制AD转换器的启动、转换速率和转换结果读取,实现正负电压的测量。
3、数码管显示电路
数码管显示电路采用共阳或共阴数码管,通过单片机的I/O口控制数码管的段选和位选信号,实现测量结果的显示。为了简化电路设计和提高系统的可靠性,可以采用数码管驱动芯片来驱动数码管显示。
4、电源电路
电源电路为系统提供稳定的工作电压。由于单片机和AD转换器需要不同的工作电压,因此需要设计合适的电源电路来满足系统的需求。可以采用稳压芯片和滤波电容组成电源电路,确保系统在各种工作条件下都能稳定可靠地工作。
四、软件设计
本系统的软件设计采用C语言编程,主要包括主程序、AD转换子程序、数码管显示子程序等。主程序负责初始化系统、循环调用AD转换子程序和数码管显示子程序。AD转换子程序负责启动AD转换器、读取转换结果并计算电压值。数码管显示子程序负责将计算得到的电压值转换为数码管可以显示的格式,并控制数码管显示测量结果。
五、实验结果与分析
通过对系统进行实验测试,验证了系统的功能和准确性。实验结果表明,系统能够准确地测量正负电压的值,并通过数码管显示出来。在实验过程中也发现了一些问题和不足之处,需要进一步改进和优化系统设计。例如,可以提高AD转换器的精度和稳定性,优化数码管的显示效果等。
结论与展望
本文介绍了一种基于51/52单片机的正负电压测量系统设计方案。该系统具有体积小、功能丰富、易于扩展等优点,可以广泛应用于电子教学、实验测试等领域。未来可以进一步完善和优化系统设计,提高系统的性能和功能扩展性,满足不同用户的需求。
【资源下载】下载地址如下1543:https://docs.qq.com/doc/DTlRSd01BZXNpRUxl
/*******************
程序功能:AD转换显示。被测电压范围-2.5V至+2.5V
版本:Vre1.0
*******************/
#include<reg51.h>
#include<intrins.h> //头文件
#define uchar unsigned char
#define uint unsigned int
sbit cs = P1^0; //IO定义
sbit clk = P1^1;
sbit dat = P1^2;
sbit dian= P2^7;
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff}; //数码管
uchar code bc[]={0x01,0x02,0x04,0x08}; //数码管位选(共阳)
uint huancun[]={0,0,0,0}; //数据缓存
uchar adc0831(); //读取AD值
void display(); //数码管显示
void delay(uint time) //延时
{
for(time;time>0;time--);
}
void main()
{
uint date,date1;
uchar i;
P1=0xff;
P2=0xff;
P3=0xff;
while(1)
{
i++;
if(i==100)
{
i=0;
//P2=adc0831(); //测试用
date=adc0831(); //读取AD值
date*=2; //基准电压5.1V,乘以2刚好是测得的电压值的100倍(date=120,就是1.2V)
if(date>250) //如果测得的值大于2.5V,说明加法器上的被测电压是正电压
{
date-=250; //转换到2.5V电压范围内
huancun[0]=11; //符号位不显示,表示正电压