基于51单片机的数字电压表

该设计通过ADC0809模数转换器将模拟电压转换为数字信号,再通过51单片机进行处理,最终在四段共阴极数码管显示屏上显示相对应的电压值。

一、引言

在嵌入式系统设计中,51单片机因其高性价比和良好的通用性而受到广泛关注。本文基于51单片机设计了一种数字电压表,可实现对电压的实时采集和显示。

二、系统仿真硬件设计

通过仿真软件对该设计测试了系统的响应时间,结果表明系统的响应速度较快,可以满足实时监测的要求。仿真原理图如图所示:

1、51单片机:作为系统的核心部件,负责控制整个系统的运行。
2、ADC0809模数转换器:8位串行模数转换器,具有8个模拟输入通道和8位并行输出。本设计采用ADC0809实现电压的采集和转换。
3、4段共阴极数码管显示屏:用于显示电压测量结果。
4、 电源模块:为整个系统提供稳定的工作电压,用户可以通过调节该电压来改变数码管显示的电压值。

三、软件编程

本设计的软件编程采用C语言编写,主要包括主程序和单片机定时中断服务程序两个部分。主程序主要完成系统的初始化、四段共阴极数码管显示屏的初始化和ADC0809的初始化的等功能;51单片机的定时中断服务程序主要完成电压的采集和转换等功能,其实现原理框图如下:

1、定时中断服务程序

定时中断服务程序主要完成电压的采集和转换的初始化的功能。

void time0_init() interrupt 1 using 0
{
	TH0 = (65536-200)/256; // 定时器重装初始值
	TL0 = (65536-200)%256;
	clk = ~clk;
}
2、ADC0808的数据采集和处理函数

该函数通过不断读取ADC0809的转换结果并显示在数码管上。当ADC0809完成一次转换后,会向CPU发出请求信号,CPU响应判断响应后,读取ADC0809的转换结果。

void adc0808_read()	// 读取数据
{
	sta = 0;
	sta = 1;						   // 形成下跳脉冲信号,开启ad
	sta = 0;
	while(! eoc);				 // 等待转换完成
	oe = 1;						 // 允许输出
	input_data = input;						 // 获取输出
	input_num = (input_data * 1.0 / 255) * 500;	 // 对输出进行转换
	oe = 0;
}
3、在读取完数据后,MCU通过显示函数将读取后的结果在4段共阴极数码管上进行显示输出。
void seg_4()  // 4段数码管输出
{
	uchar i;

	for (i = 0;i < 4;i ++)
	{
		seg_num = seg_duan[seg_duanxuan[i]];
		if(seg_duan[seg_duanxuan[i]] == 0x3f && seg_duan[seg_duanxuan[i+1]] != 0x3f) //确定小数点的位置
		{
			sign = 2;
		}
		else
			sign += 1;
		if(sign == 3)
		{
			dot = 1;
			sign = 10;
		}
		seg_wei &= seg_w[i];
		delay(2);
		seg_wei |= 0x0f;
	}
}

四、结论

本文基于51单片机设计了一种数字电压表,可实现对电压的实时采集和显示。测试结果表明,本设计的测量误差在±0.5%以内,精度较高,且响应速度较快,可以满足实时监测的要求。本设计具有结构简单、易于实现和成本低廉等优点,可广泛应用于电力系统的电压监测领域。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值