下面是我请豆包写的ADC测量电压的C语言程序
提问:
假如STC单片机有12位的ADC,ADC的参考电压是5V,假如读取ADC变换结果的函数是“u16 Get_ADC12bitResult(u8 channel);”,请写一段测量3通道输入电压值的C语言程序,测量结果保存到浮点数变量“VIN”中
解决:
STC12 位 ADC 测量 3 通道电压 C 语言程序
根据你的需求,我编写了可直接移植的标准 C 程序,严格匹配 12 位 ADC、5V 参考电压、指定函数接口,测量结果存入浮点变量VIN。
核心知识点
- 12 位 ADC 分辨率:最大数字量 = 212−1=4095
- 电压换算公式:
实际电压 = (ADC 采样值 / 4095) × 参考电压 (5V) - 函数:u16 Get_ADC12bitResult(u8 channel);
- 输入:通道号(3 通道填3)
- 输出:12 位 ADC 转换结果(0~4095)
完整 C 语言程序
/********************************************************************* * 文件名:main.c * 功能:STC单片机12位ADC测量3通道电压,结果存入浮点变量VIN * 硬件:12位ADC,参考电压VREF=5V * 函数:u16 Get_ADC12bitResult(u8 channel); // 官方提供的ADC读取函数 *********************************************************************/ // 必须包含单片机头文件(根据你的STC型号修改,如STC89/STC15/STC32等) #include <STCXXX.h> // 数据类型重定义(标准单片机通用定义) typedef unsigned char u8; // 8位无符号字符型 typedef unsigned short u16; // 16位无符号整型 // 全局/局部变量:存储测量的电压值(浮点型) float VIN; // ADC参考电压宏定义(方便后期修改) #define ADC_REF_VOLTAGE 5.0f // 12位ADC最大采样值 #define ADC_12BIT_MAX 4095.0f /********************************************************** * 函数名:void Measure_CH3_Voltage(void) * 功能:测量ADC 3通道电压,结果存入VIN * 入口参数:无 * 出口参数:无 **********************************************************/ void Measure_CH3_Voltage(void) { u16adc_result; // 存储ADC原始采样值(0~4095) // 1. 读取3通道的ADC转换结果 adc_result =Get_ADC12bitResult(3); // 2. 按照公式计算实际电压,保存到浮点变量VIN // 计算公式:电压 = (采样值 / 4095) * 5.0V VIN =(adc_result / ADC_12BIT_MAX) * ADC_REF_VOLTAGE; } /********************************************************** * 主函数:程序入口 **********************************************************/ void main(void) { // 初始化ADC(根据你的STC单片机型号添加ADC初始化代码) // ADC_Init(); while(1) { // 循环测量3通道电压 Measure_CH3_Voltage(); // 此处可添加其他业务代码(如串口打印、逻辑判断等) } }
代码关键说明
1. 数据类型与宏定义
- u8/u16:匹配你提供的函数参数 / 返回值类型
- ADC_REF_VOLTAGE:5.0V 参考电压,f表示浮点常量
- ADC_12BIT_MAX:12 位 ADC 满量程值 4095.0f(浮点运算必须用浮点数)
2. 核心计算逻辑
VIN = (adc_result / 4095.0f) * 5.0f;
- 必须使用浮点数除法:如果写成4095(整数),会导致结果为 0,计算错误
- 计算结果自动存入浮点变量VIN,单位:伏特 (V)
3. 函数调用
- Get_ADC12bitResult(3):直接读取3 通道的 ADC 值
- 封装为独立函数Measure_CH3_Voltage(),方便复用和维护
示例运行结果
ADC 采样值 | VIN 计算结果(电压) | | 0 | 0.0000 V | | 2048 | 2.5006 V | | 4095 | 5.0000 V | 总结
- 程序严格按照你的要求实现:12 位 ADC、5V 参考、3 通道测量、结果存入浮点 VIN
- 代码规范可直接移植,适配所有 STC 单片机
- 核心是浮点运算,避免整数除法导致的计算错误
- 模块化设计,方便你集成到项目中
|