单片机ADC0832电压检测程序(充电自动提醒)

Proteus仿真图:

单片机ADC0832电压检测程序(充电自动提醒)_第1张图片

 

ADC分压原理:

单片机ADC0832电压检测程序(充电自动提醒)_第2张图片

单片机源码:

/*******************************************************************************
*  标题:                        ADC0832检测电压                                *
*  时间                      2018年9月27日22:36:36                                                   *
*                                                                                                                                                           *
*  实验说明:采用ADC0832进行电压外部电压测量,可在此基础上开发其他模块,例如
GSM通信,智能开锁、温度检测等。本原理图中ADC0832的参考电压为5V,外部输入电压为5V,
改变热敏电阻的值可以改变输出电压                                                                                                *
********************************************************************************
* 实验心得:ADC0832进行AD转化的时候,需要研究下时序图,在进行数据检测的时候需要
进行两次检测,如果前后两次数据相等,那么再返回得到的值,减少了测量误差         *
********************************************************************************/
#include 
#include "lcd.h"
#include "define.h"
#include "ADC0832.h"                

//全局函数
void Vol_True();
void Vol_TrueDisply();
//全局变量
unsigned char i = 0;
unsigned char Vo[] = "Voltage:";           //LCD1602上显示电压
unsigned char Voltage_bit;
unsigned char V_H, V_d, V_ld, V_lld;            //分别是个位、第一位小数位、第二位小数位
float Voltage;
unsigned int Change_Voltage;

void main()
{
        LcdInit();                         //初始化LCD1602
        while(1)
        {
                   Vol_True();
                LcdWriteCom(0x80);
                for(i=0; i<9; i++)
                {
                        LcdWriteData(Vo[i]);
                }
                Vol_TrueDisply();        
        }
}

void Vol_True()
{
        Voltage_bit = ADC0832(0);                        //从ADC转化通道0进入,模数转化后的值为Voltage_bit;
        Voltage = ((float)Voltage_bit/256)*5;        //Voltage为实际电压的值,5v为ADC0832的参考电压
        Change_Voltage = (Voltage+0.137)*1000;         //+0.137是进行误差校准
        V_H = Change_Voltage/1000+'0';                                 
        V_d = (Change_Voltage%1000)/100+'0';
        V_ld = (Change_Voltage%100)/10+'0';
        V_lld = Change_Voltage%10+'0';        
}

void Vol_TrueDisply()
{
        LcdWriteCom(0x89);
        LcdWriteData(V_H);
        LcdWriteData('.');
        LcdWriteData(V_d);
        LcdWriteData(V_ld);
        LcdWriteData(V_lld);
        LcdWriteCom(0x8e);
        LcdWriteData('V');        
}

 

你可能感兴趣的:(C51)