HC32L196配有ADC数模转换器,用它可对外部的模拟信号加以检测并转换为数字信息量。 在配置配置OLED屏的情况下,可直接将检测值显示处理,并可变换成相应的电压值来显示。 在使用通道0的情况下,其对输入引脚的配置函数为: void App_AdcPortInit(void)
{
///< 开启ADC/BGR GPIO外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
Gpio_SetAnalogMode(GpioPortA, GpioPin0);
}
将采样模式设置为单次模式的函数为: void App_AdcSglCfg(void)
{
///< 配置单次采样通道
Adc_CfgSglChannel(AdcExInputCH0);
///< 启动单次一直采样
Adc_SGL_Always_Start();
}
对ADC初始化的函数为: void App_AdcInit(void)
{
stc_adc_cfg_t stcAdcCfg;
DDL_ZERO_STRUCT(stcAdcCfg);
///< 开启ADC/BGR外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, TRUE);
Bgr_BgrEnable(); ///< 开启BGR
///< ADC 初始化配置
stcAdcCfg.enAdcMode = AdcSglMode; ///<采样模式-单次
stcAdcCfg.enAdcClkDiv = AdcMskClkDiv1; ///<采样分频-1
stcAdcCfg.enAdcSampCycleSel = AdcMskSampCycle12Clk; ///<采样周期数-12
stcAdcCfg.enAdcRefVolSel = AdcMskRefVolSelInBgr2p5; ///<参考电压选择-内部2.5V
stcAdcCfg.enAdcOpBuf = AdcMskBufDisable; ///<OP BUF配置-关
stcAdcCfg.enInRef = AdcMskInRefEnable; ///<内部参考电压使能-开
stcAdcCfg.enAdcAlign = AdcAlignRight; ///<转换结果对齐方式-右
Adc_Init(&stcAdcCfg);
}
实现数据检测及显示的主程序为: int32_t main(void)
{
App_AdcPortInit();
App_AdcInit();
App_AdcSglCfg();
App_OledInit();
OLED_Init();
OLED_Clear();
OLED_ShowString(20,0,"HC32L196 TEST",16);
OLED_ShowString(20,2,"OLED DISPLAY",16);
OLED_ShowString(20,4,"ADC=",16);
while(1)
{
if(TRUE == Adc_GetIrqStatus(AdcMskIrqSgl))
{
u32AdcRestult = Adc_GetSglResult();
OLED_ShowNum(52,4,u32AdcRestult,4,16);
Adc_ClrIrqStatus(AdcMskIrqSgl);
}
delay1ms(1000);
}
}
经程序的编译与下载,其显示效果如图1至图3所示。 图1 检测3.3V电压
图2 检测GND电压
图3 悬空状态电压
在添加电压值变换的情况下,其主程序为: int32_t main(void)
{
uint32_t V,U;
App_AdcPortInit();
App_AdcInit();
App_AdcSglCfg();
App_OledInit();
OLED_Init();
OLED_Clear();
OLED_ShowString(20,0,"HC32L196 TEST",16);
OLED_ShowString(20,2,"OLED DISPLAY",16);
OLED_ShowString(20,4,"ADC=",16);
OLED_ShowString(20,6,"U= .",16);
while(1)
{
if(TRUE == Adc_GetIrqStatus(AdcMskIrqSgl))
{
u32AdcRestult = Adc_GetSglResult();
V=u32AdcRestult;
OLED_ShowNum(52,4,V,4,16);
Adc_ClrIrqStatus(AdcMskIrqSgl);
U=V*3.3/4096;
OLED_ShowNum(36,6,U,1,16);
U=(V*330/4096)%100;
OLED_ShowNum(52,6,U,2,16);
}
delay1ms(1000);
}
}
经程序的编译与下载,其显示效果如图4所示。 图4 显示电压值
|