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');
- }
复制代码
全部资料51hei下载地址:
充电自动提醒.rar
(84.9 KB, 下载次数: 83)
|