51单片机电压检测 不使用ADC芯片
时间: 2024-04-26 20:25:51 浏览: 8
如果不使用ADC芯片,可以使用比较器和电压参考源来实现电压检测。具体步骤如下:
1. 将要检测的电压通过分压电路降压到比较器可接受的范围内;
2. 使用电压参考源提供一个固定的参考电压;
3. 将分压电路的输出与参考电压输入比较器,比较器会输出一个高电平或低电平信号;
4. 根据比较器输出信号的高低电平,即可判断输入电压是否超过了参考电压。
这种方法的优点是简单易实现,无需使用ADC芯片,但缺点是检测精度较低,只能判断输入电压是否超过参考电压,无法得到具体电压值。需要根据具体应用场景进行选择和调整。
相关问题
基于51单片机及PCF8591芯片的ADC电压检测加LCD1602显示程序
以下是基于51单片机及PCF8591芯片的ADC电压检测加LCD1602显示程序:
```
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^0; //RS引脚
sbit RW=P2^1; //RW引脚
sbit EN=P2^2; //EN引脚
sbit SDA=P1^1; //IIC数据线
sbit SCL=P1^0; //IIC时钟线
void delay(uint xms) //延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void LCD_WriteCom(uchar com) //写命令函数
{
RS=0;
RW=0;
P0=com;
EN=1;
_nop_();
EN=0;
delay(5);
}
void LCD_WriteData(uchar dat) //写数据函数
{
RS=1;
RW=0;
P0=dat;
EN=1;
_nop_();
EN=0;
delay(5);
}
void LCD_Init() //LCD初始化函数
{
delay(50);
LCD_WriteCom(0x38);
LCD_WriteCom(0x0c);
LCD_WriteCom(0x06);
LCD_WriteCom(0x01);
delay(5);
}
void IIC_Start() //IIC开始信号函数
{
SDA=1;
SCL=1;
delay(5);
SDA=0;
delay(5);
SCL=0;
}
void IIC_Stop() //IIC停止信号函数
{
SDA=0;
SCL=1;
delay(5);
SDA=1;
delay(5);
}
void IIC_SendByte(uchar dat) //IIC发送一个字节函数
{
uchar i;
for(i=0;i<8;i++)
{
if(dat&0x80)
SDA=1;
else
SDA=0;
SCL=1;
delay(5);
SCL=0;
dat<<=1;
}
SDA=1;
SCL=1;
delay(5);
SCL=0;
}
uchar IIC_ReadByte() //IIC读一个字节函数
{
uchar i,dat=0;
SDA=1;
for(i=0;i<8;i++)
{
dat<<=1;
SCL=1;
delay(5);
if(SDA)
dat|=0x01;
SCL=0;
delay(5);
}
return dat;
}
void PCF8591_Write(uchar dat) //写DAC函数
{
IIC_Start();
IIC_SendByte(0x90);
IIC_ReadByte();
IIC_SendByte(dat);
IIC_ReadByte();
IIC_Stop();
}
uchar PCF8591_Read() //读ADC函数
{
uchar dat;
IIC_Start();
IIC_SendByte(0x90);
IIC_ReadByte();
IIC_SendByte(0x00);
IIC_ReadByte();
IIC_Start();
IIC_SendByte(0x91);
IIC_ReadByte();
dat=IIC_ReadByte();
IIC_Stop();
return dat;
}
void main()
{
uchar dat;
LCD_Init();
while(1)
{
dat=PCF8591_Read();
LCD_WriteCom(0x80);
LCD_WriteData('V');
LCD_WriteData(':');
LCD_WriteData(dat/10+'0');
LCD_WriteData(dat%10+'0');
delay(100);
}
}
```
该程序主要实现了通过PCF8591芯片实现ADC电压检测,并将检测到的电压值显示在LCD1602上。其中,PCF8591_Read函数用于读取ADC芯片的电压值,PCF8591_Write函数用于写入DAC芯片的输出电压值,LCD_Init函数用于初始化LCD1602,LCD_WriteCom函数用于向LCD1602发送命令,LCD_WriteData函数用于向LCD1602发送数据。在主函数中,通过调用PCF8591_Read函数获取到电压值,然后将其显示在LCD1602上。
51单片机adc0809采集电压
51单片机通过adc0809芯片来实现模拟电压的数字化采集。adc0809芯片是一款8位、串行输出的A/D转换器,具有较高的精度和稳定性。其工作原理是将模拟电压信号转化为对应的数字量输出,这个数字量就是51单片机可以识别的数字信号。通常情况下,需要通过51单片机的程序读取adc0809芯片输出的数字信号,并根据一定的转换公式将其转化为对应的电压值。这样就可以实现对模拟电压信号的数字化采集了。