【HC32L196PCTA测评】+ADC应用篇

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 显示电压值

---------------------
作者:jinglixixi
链接:https://bbs.21ic.com/icview-3320376-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值