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

Proteus仿真图:

 

ADC分压原理:

单片机源码:

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

 

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值