本帖最后由 芯圣电子官方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
最后的数值稍偏大。
|