想做一个简易电压表,测出来一直是参考电压的电压值,请各位大神帮忙看看程序哪里设置错了

2019-07-15 16:25发布

本帖最后由 346500452 于 2015-11-12 17:46 编辑

void Trans_val(uint adc_v)
{
    uint val1,val2,val3,val4;
    val1=adc_v/1000;
    val2=(adc_v/100)%10;
    val3=(adc_v/10)%10;
    val4=adc_v%10;

    dis2[6]=shuzi[val1];
    dis2[8]=shuzi[val2];
    dis2[9]=shuzi[val3];
    dis2[10]=shuzi[val4];

    xian1();                    //显示第一行
    xian2();                    //显示第二行
}

#pragma vector=ADC_VECTOR
__interrupt void ADC12_ISR(void)
{
  static uint index = 0;
  results[index++] = ADC12MEM0;               // Move results
  if(index == Number_of_Results)
  {     ad_flag=1;
        uchar i;
        unsigned long sum = 0;
        index = 0;
        for(i = 0; i < Number_of_Results; i++)
        {
            sum += results;
        }
        sum =sum/200;                            //除以200
        sum=sum*3000/4095;//转换结果,将AD12中数据线性平均后的结果,乘以量程再除以最大数字值,
          //转换为可以在LCD上显示的模拟电压值,量程扩大1000倍,是在后面的数字切割算法中使用方便。
        Trans_val(sum);
  }
}

void AD_init(void)
{
   ADC12CTL0 = ADC12ON+SHT0_2+MSC+REF2_5V+REFON; //开ADC12内核,设SHT0=2 (N=4),选用内部参考电压为2.5V
                                          //内部参考电压打开 //应该加上MSC和SHT
   ADC12CTL1 = SHP+CONSEQ_2;     //SAMPCON信号选为采样定时器输出 //应该加上CONSEQ_2 选择单通道多次转化
   //ADC12内部参考电压设置
   delay(500);
   ADC12MCTL0 |= SREF_1+INCH_0; //R+=3.3V R-=VSS
   ADC12IE = 0x01;
   ADC12CTL0 |= ENC ;    //转换允许(上升沿)
   ADC12CTL0 |= ADC12SC;
   _EINT();// 使能转换
}
/************************************************************/
void main()
{  
   WDTCTL = WDTPW + WDTHOLD;//禁止看门狗复位
   IO_init();               //IO初始化
   InitLCD();                    //初始化1602
   P6SEL|=0x01;             // 使能ADC通道 A0
   AD_init();
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。