本帖最后由 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)
{
sta
tic 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();
}
一周热门 更多>