` 在APM32F030R8内部集成有模拟/数字转换器ADC,该转换器为12 位精度,且多达 16 个外部通道和 2个内部通道(温度传感器、电压基准), 可进行单次或扫描转换。 将ADC与OLED屏相结合,则可构成一个简易的数字电压表,其效果图所示。 ADC电压检测效果 以上效果使用的是ADC1_Channel0,所占用的引脚为PA0。 其主程序为:
- int main(void)
- {
- APP_OLED_Init();
- OLED_Init();
- OLED_Clear();
- OLED_ShowString(0,0,"APM32F030 TEST",16);
- OLED_ShowString(0,2,"OLED & ADC",16);
- OLED_ShowString(0,6,"U=",16);
- OLED_ShowString(60,6,"mV",16);
- ADCInit();
- /** Wait until ADC is ready */
- while (!ADC_ReadStatusFlag(ADC_FLAG_ADRDY));
- ADC_StartConversion();
- for (;;)
- {
- }
- }
复制代码
相应的ADC数据采集函数为:
- void ADC_Isr()
- {
- uint32_t adcData = 0;
- uint32_t voltage = 0;
- if (ADC_ReadIntFlag(ADC_INT_FLAG_CS) == SET)
- {
- ADC_ClearIntFlag(ADC_INT_FLAG_CS);
- /** Read ADC Conversion value*/
- adcData = ADC_ReadConversionValue();
- /** voltage(mV) = adcData * (3300mV / 4095) */
- voltage = (adcData*3300)/4095;
- OLED_ShowNum(16,6,voltage,5,16);
- }
- }
复制代码
`
|