#include "KEA128.h"

void ADC_Init(uint8_t channel, uint8_t resolution) { // 选择ADC通道 ADCSC1 = ADCSC1_ADCH(channel);

// 选择ADC分辨率
ADC_CFG1 = (ADC_CFG1 & ~ADC_CFG1_MODE_MASK) | ADC_CFG1_MODE(resolution);

// 使能ADC
ADCSC2 |= ADCSC2_ADTRG_MASK;

}

float ADC_GetVoltage(uint16_t adcValue) { // 根据ADC分辨率计算参考电压 float vref = 3.3; // 假设参考电压为3.3V

// 根据公式 V = (adcValue / 2^resolution) * vref 计算电压
float voltage = (adcValue / (float)(1 << ADC_CFG1_MODE(ADC_CFG1 & ADC_CFG1_MODE_MASK))) * vref;

return voltage;

}

int main(void) { // 初始化ADC ADC_Init(9, 1); // 使用ADC0的SE9通道和12位分辨率

while (1) {
    // 启动ADC转换
    ADCSC1 |= ADCSC1_ADCH(9);
    
    // 等待转换完成
    while (!(ADCSC1 & ADCSC1_COCO_MASK));
    
    // 读取ADC结果
    uint16_t adcValue = ADCR;
    
    // 将ADC结果转换为电压
    float voltage = ADC_GetVoltage(adcValue);
    
    // 输出电压结果
    // TODO: 将电压结果输出到你想要的地方,比如串口或LCD屏幕等
}

return 0;

}

KEA128 控制器 ADC0 SE9 引脚 AD 电压检测 Keil 程序

原文地址: https://www.cveoy.top/t/topic/qfaJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录