[资源共享] HC89F003-ADC实验(二)

[复制链接]
597|2
 楼主 | 2017-12-13 17:18 | 显示全部楼层 |阅读模式
      本次实验仍然采用的是官方库函数,利用HC89F003的ADC通道0(P0.0端口)采集板载电位器RW1对电源VDD分压值,参考电压为VDD,当采集到的电压值达到参考电压的12.5%、37.5%、62.5%、82.5%时,分别将板载LED1、LED2、LED3、LED4点亮。
主要代码:
  1. /***************************************************************************************
  2.   * @说明          系统初始化
  3.   *        @参数        无
  4.   * @返回值 无
  5.   * @注                关闭看门狗以及时钟初始化
  6. ***************************************************************************************/
  7. void System_Init(void)
  8. {
  9.         WDT_TurnOff();                                                                                                //关闭看门狗       
  10.         CLK_OscClockConfig(CLK_OSC_16MHZ);                //设置OSC时钟为16M
  11.         CLK_CpuClockConfig(2);                                                                //设置CPU时钟为8M
  12. }
复制代码
  1. /***************************************************************************************
  2.   * @说明          GPIO初始化
  3.   *        @参数                无
  4.   * @返回值         无
  5.   * @注                        设置相应端口
  6. ***************************************************************************************/
  7. void GPIOInit(void)
  8. {
  9.         GPIO_Init(GPIOT0,GPIO_PIN_0,GPIO_MODE_IN_AN);        //P00模拟输入
  10.         GPIO_Init(GPIOT0,GPIO_PIN_4,GPIO_MODE_OUT_PP);//推挽输出
  11.         GPIO_Init(GPIOT0,GPIO_PIN_5,GPIO_MODE_OUT_PP);
  12.         GPIO_Init(GPIOT1,GPIO_PIN_0,GPIO_MODE_OUT_PP);
  13.         GPIO_Init(GPIOT1,GPIO_PIN_1,GPIO_MODE_OUT_PP);
  14. }
复制代码
  1. /***************************************************************************************
  2.   * @说明          ADC初始化
  3.   *        @参数                无
  4.   * @返回值         无
  5.   * @注                        设置ADC
  6. ***************************************************************************************/
  7. void ADCInit(void)//ADC初始化
  8. {
  9.         ADC_DeInit();
  10.         ADC_Cmd(ENABLE);                                                                                                                                //使能ADC
  11.         ADC_Init(DATA10,RIGHT_ALIGN,ADC_CLOCK_OSC_16);        //10位ADC精度,数据右对齐,OSC时钟16分频
  12.         ADC_VrefConfig(VREF_IN_VDD);                                                                                //内部VDD参考电压
  13.         ADC_ChannelConfig(ADC_AN0);                                                                                        //选择外部通道0
  14. }
复制代码
  1. void main(void)
  2. {
  3.         System_Init();                                                        //系统初始化
  4.         GPIOInit();
  5.         ADCInit();

  6.         while(1)
  7.         {
  8.                 ADC_StartConversion();                                                                //启动ADC转换
  9.                 while(ADC_GetITFlag() != SET);                                //等待ADC转换结束
  10.                 ADC_ClearITFlag();                                                                                //清除ADC中断标志位
  11.                 Adc_Value = ADC_GetResault();                                        //获取ADC值
  12.                
  13.                 if(Adc_Value >= 0X080)
  14.                         GPIO_WriteLow(GPIOT1,GPIO_PIN_1);   //当采集电压为参考电压的12.5%时LED1点亮         
  15.                 else
  16.                         GPIO_WriteHigh(GPIOT1,GPIO_PIN_1);
  17.                
  18.                 if(Adc_Value >= 0X180)
  19.                         GPIO_WriteLow(GPIOT0,GPIO_PIN_5);   //当采集电压为参考电压的37.5%时LED2点亮         
  20.                 else
  21.                         GPIO_WriteHigh(GPIOT0,GPIO_PIN_5);
  22.                
  23.                 if(Adc_Value >= 0X280)
  24.                         GPIO_WriteLow(GPIOT0,GPIO_PIN_4);   //当采集电压为参考电压的62.5%时LED3点亮         
  25.                 else
  26.                         GPIO_WriteHigh(GPIOT0,GPIO_PIN_4);
  27.                
  28.                 if(Adc_Value >= 0X380)
  29.                         GPIO_WriteLow(GPIOT1,GPIO_PIN_0);   //当采集电压为参考电压的82.5%时LED4点亮
  30.                 else
  31.                         GPIO_WriteHigh(GPIOT1,GPIO_PIN_0);  
  32.         }
  33. }
复制代码
实验现象:
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


最后的数值稍偏大。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
| 2018-7-14 21:18 | 显示全部楼层
哇  很不错很详细啊
| 2018-7-16 15:41 | 显示全部楼层
不错,很详细,参考价值很大。。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

快速回复 返回顶部 返回列表