本帖最后由 芯圣电子官方QQ 于 2023-7-24 10:02 编辑
本次实验仍然采用的是官方库函数,利用HC89F003的ADC通道0(P0.0端口)采集板载电位器RW1对电源VDD分压值,参考电压为VDD,当采集到的电压值达到参考电压的12.5%、37.5%、62.5%、82.5%时,分别将板载LED1、LED2、LED3、LED4点亮。
主要代码:
- /***************************************************************************************
- * @说明 系统初始化
- * @参数 无
- * @返回值 无
- * @注 关闭看门狗以及时钟初始化
- ***************************************************************************************/
- void System_Init(void)
- {
- WDT_TurnOff(); //关闭看门狗
- CLK_OscClockConfig(CLK_OSC_16MHZ); //设置OSC时钟为16M
- CLK_CpuClockConfig(2); //设置CPU时钟为8M
- }
- /***************************************************************************************
- * @说明 GPIO初始化
- * @参数 无
- * @返回值 无
- * @注 设置相应端口
- ***************************************************************************************/
- void GPIOInit(void)
- {
- GPIO_Init(GPIOT0,GPIO_PIN_0,GPIO_MODE_IN_AN); //P00模拟输入
- GPIO_Init(GPIOT0,GPIO_PIN_4,GPIO_MODE_OUT_PP);//推挽输出
- GPIO_Init(GPIOT0,GPIO_PIN_5,GPIO_MODE_OUT_PP);
- GPIO_Init(GPIOT1,GPIO_PIN_0,GPIO_MODE_OUT_PP);
- GPIO_Init(GPIOT1,GPIO_PIN_1,GPIO_MODE_OUT_PP);
- }
- /***************************************************************************************
- * @说明 ADC初始化
- * @参数 无
- * @返回值 无
- * @注 设置ADC
- ***************************************************************************************/
- void ADCInit(void)//ADC初始化
- {
- ADC_DeInit();
- ADC_Cmd(ENABLE); //使能ADC
- ADC_Init(DATA10,RIGHT_ALIGN,ADC_CLOCK_OSC_16); //10位ADC精度,数据右对齐,OSC时钟16分频
- ADC_VrefConfig(VREF_IN_VDD); //内部VDD参考电压
- ADC_ChannelConfig(ADC_AN0); //选择外部通道0
- }
- void main(void)
- {
- System_Init(); //系统初始化
- GPIOInit();
- ADCInit();
- while(1)
- {
- ADC_StartConversion(); //启动ADC转换
- while(ADC_GetITFlag() != SET); //等待ADC转换结束
- ADC_ClearITFlag(); //清除ADC中断标志位
- Adc_Value = ADC_GetResault(); //获取ADC值
-
- if(Adc_Value >= 0X080)
- GPIO_WriteLow(GPIOT1,GPIO_PIN_1); //当采集电压为参考电压的12.5%时LED1点亮
- else
- GPIO_WriteHigh(GPIOT1,GPIO_PIN_1);
-
- if(Adc_Value >= 0X180)
- GPIO_WriteLow(GPIOT0,GPIO_PIN_5); //当采集电压为参考电压的37.5%时LED2点亮
- else
- GPIO_WriteHigh(GPIOT0,GPIO_PIN_5);
-
- if(Adc_Value >= 0X280)
- GPIO_WriteLow(GPIOT0,GPIO_PIN_4); //当采集电压为参考电压的62.5%时LED3点亮
- else
- GPIO_WriteHigh(GPIOT0,GPIO_PIN_4);
-
- if(Adc_Value >= 0X380)
- GPIO_WriteLow(GPIOT1,GPIO_PIN_0); //当采集电压为参考电压的82.5%时LED4点亮
- else
- GPIO_WriteHigh(GPIOT1,GPIO_PIN_0);
- }
- }
实验现象:
a、参考电压
b、5*12.5% = 0.625v
c、5*37.5% = 1.875v
d、5*62.5% = 3.125v
e、5*82.5% = 4.125v
最后的数值稍偏大。
|