基于51单片机的数字电压表(PCF8591)(Proteus仿真+程序)

编号:32

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

功能描述:

        本设计由51单片机最小系统+PCF8591模块+四路模拟量输入模块+一路DA输出+液晶1602显示模块
1、主控制器是89C82单片机。
2、PCF8591模数转换器进行A/D转换,读取四路电压数据,电压检测范围0-5V 精度(8位);实现一路数模转换(D/A)输出电压范围0-5V(8位)。
3、利用四个个电位器模拟 模拟量输入,D/A输出电压。
3、液晶1602显示四路电压值。

Proteus7.8以上版本均可使用

视频演示链接:

32、基于51单片机的数字电压表(PCF8591)

仿真图:

程序源码:

#include "reg52.h"
#include "LCD1602.h"
#include "delay.h"
#include "PCF8591.h"


void main(void)
{
	
	unsigned char BUF[4];              	//接收数据缓存区 

	unsigned int Voltage0 = 0;
	unsigned int Voltage1 = 0;
	unsigned int Voltage2 = 0;
	unsigned int Voltage3 = 0;
	
	Lcd1602_Init();		  //LCD1602液晶初始化
	Lcd1602_String(0,0,"             ");
	Lcd1602_String(0,1,"             ");
	while(1)
	{			
		PCF8591_DAC(PCF8591_DAC,128);
		BUF[0] = PCF8591_Read_ADC(PCF8591_ADC_Channel0);//ADC0 模数转换
		BUF[1] = PCF8591_Read_ADC(PCF8591_ADC_Channel1);//ADC1 模数转换
		BUF[2] = PCF8591_Read_ADC(PCF8591_ADC_Channel2);//ADC2 模数转换
		BUF[3] = PCF8591_Read_ADC(PCF8591_ADC_Channel3);//ADC3 模数转换
			
		Voltage0 = (long)BUF[0] * 500/ 255;  //转换为电压值
		Voltage1 = (long)BUF[1] * 500/ 255;  //转换为电压值
		Voltage2 = (long)BUF[2] * 500/ 255;  //转换为电压值
		Voltage3 = (long)BUF[3] * 500/ 255;  //转换为电压值

		Lcd1602_String(0,0,"V0:");	  		//显示电压
		Lcd1602_Write_Data(Voltage0/100+0x30);
		Lcd1602_Write_Data('.');
		Lcd1602_Write_Data(Voltage0%100/10+0x30);
		Lcd1602_Write_Data(Voltage0%100%10+0x30);


		Lcd1602_String(8,0,"V1:");	  		//显示电压
		Lcd1602_Write_Data(Voltage1/100+0x30);
		Lcd1602_Write_Data('.');
		Lcd1602_Write_Data(Voltage1%100/10+0x30);
		Lcd1602_Write_Data(Voltage1%100%10+0x30);


		Lcd1602_String(0,1,"V2:");	  		//显示电压
		Lcd1602_Write_Data(Voltage2/100+0x30);
		Lcd1602_Write_Data('.');
		Lcd1602_Write_Data(Voltage2%100/10+0x30);
		Lcd1602_Write_Data(Voltage2%100%10+0x30);


		Lcd1602_String(8,1,"V3:");	  		//显示电压
		Lcd1602_Write_Data(Voltage3/100+0x30);
		Lcd1602_Write_Data('.');
		Lcd1602_Write_Data(Voltage3%100/10+0x30);
		Lcd1602_Write_Data(Voltage3%100%10+0x30);

		delay_ms(100);


	}
}

软件免费下载地址:

1、Proteus仿真软件
文件内容:Proteus7.8安装包、Proteus8.6安装包、Proteus.8.10安装包、Proteus Professional 8.11 SP0安装包

链接:https://pan.baidu.com/s/11LNUZ9BJXWvXf1C4dPc3_w 
提取码:2756 

2、KEIL4 C51软件安装包

链接:https://pan.baidu.com/s/1CTZBqDsPsyIbjCIjI_birA 
提取码:sy2a 

文件下载:

https://pan.baidu.com/s/1VQnVV2sl2etj209QY5QQQA?pwd=gsrr

  • 5
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
基于PCF8591芯片AD DA实验例程C51单片机KEIL源码工程文件5个合集: PCF8591 1602液晶显示 PCF8591 1路AD数码管显示 PCF8591 4路AD数码管显示 PCF8591 DA输出模拟 PCF8591 输出锯齿波 main() { unsigned char num=0,i; unsigned char temp[7];//定义显示区域临时存储数组 float Voltage; //定义浮点变量 LCD_Init(); //初始化液晶 DelayMs(20); //延时有助于稳定 LCD_Clear(); //清屏 while (1) //主循环 { for(i=0;i<5;i++)//连续读5次,取最后一次,以便读取稳定值 num=ReadADC(0); //读取第1路电压值,范围是0-255 Voltage=(float)num*5/256; //根据参考电源VREF算出时间电压,float是强制转换符号,用于将结果转换成浮点型 sprintf(temp,"V0 %3.2f ",Voltage);//格式输出电压值,%3.2f 表示浮点输出,共3位数,小数点后2位 LCD_Write_String(0,0,temp); for(i=0;i<5;i++) num=ReadADC(1); Voltage=(float)num*5/256; sprintf(temp,"V1 %3.2f ",Voltage); LCD_Write_String(8,0,temp); for(i=0;i<5;i++) num=ReadADC(2); Voltage=(float)num*5/256; sprintf(temp,"V2 %3.2f ",Voltage); LCD_Write_String(0,1,temp); for(i=0;i<5;i++) num=ReadADC(3); Voltage=(float)num*5/256; sprintf(temp,"V3 %3.2f ",Voltage); LCD_Write_String(8,1,temp); //主循环中添加其他需要一直工作的程序 DelayMs(200); } } /*------------------------------------------------ 读AD转值程序 输入参数 Chl 表示需要转换的通道,范围从0-3 返回值范围0-255 ------------------------------------------------*/ unsigned char ReadADC(unsigned char Chl) { unsigned char Val; Start_I2c(); //启动总线 SendByte(AddWr); //发送器件地址 if(ack==0)return(0); SendByte(0x40|Chl); //发送器件子地址 if(ack==0)return(0); Start_I2c(); SendByte(AddWr+1); if(ack==0)return(0); Val=RcvByte(); NoAck_I2c(); //发送非应位 Stop_I2c(); //结束总线 return(Val); } /*------------------------------------------------ 写入DA转换数值 输入参数:dat 表示需要转换的DA数值,范围是0-255 ------------------------------------------------*/ /*bit WriteDAC(unsigned char dat) { Start_I2c(); //启动总线 SendByte(AddWr); //发送器件地址 if(ack==0)return(0); SendByte(0x40); //发送器件子地址 if(ack==0)return

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片机技能设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值