#include "SC_Init.h" //MCU Init header,Include all IC resource headers #include "SC_it.h" #include "..\Drivers\SCDriver_list.h" #include "HeadFiles\SysFunVarDefine.h" #include "adc.h" #include "Uart1.h" unsigned int xdata ADC_Value0 = 0,ADC_Value1 = 0,ADC_Value2 = 0; unsigned int xdata ADC_NUM1=0; //获取adc转换数值 unsigned int ADC_Convert(void) { unsigned int xdata Tad = 0,MinAd1 = 0x0fff,MaxAd1 = 0x0000,MinAd2 = 0x0fff,MaxAd2 = 0x0000,TempAdd = 0; unsigned char xdata t = 0; for(t = 0;t < 10;t++) { ADCCON |= 0X40; //开始 ADC 转换 while(!(ADCCON & 0x20));//等待 ADC 转换完成,不同型号的转换完成标志位位置不同,部分型号在 Bit5,部分型号在Bit4,具体请参照规格。 //清中断标志位 ADCCON &= ~(0X20); Tad = ((unsigned int)ADCVH << 4) + (ADCVL >> 4); //取得一次转换值 ADC_NUM1=Tad; if(Tad > MaxAd1) { MaxAd1 = Tad;//获得当前的最大值 } // else // { // if(Tad > MaxAd2) // MaxAd2 = Tad; // } if (Tad < MinAd1) { MinAd1 = Tad;//获得当前的最小值 } // else // { // if(Tad > MinAd2) // MinAd2 = Tad; // } TempAdd += Tad; } //转换值累加 TempAdd -= MinAd1;//去掉最小值 TempAdd -= MaxAd1;//去掉最大值 // TempAdd -= MinAd2;//去掉第二最小值 // TempAdd -= MaxAd2;//去掉第二最大值 //TempAdd = TempAdd / 16; TempAdd >>= 3; //求平均值 return TempAdd; } //切换ADC入口 void ADC_channel(unsigned char ADC_Channel) { ADCCFG0 = 0x07; ADCCON = 0xE0 | ADC_Channel; } extern uint8_t xdata motor_data[]; void ADC_Multichannel(void) { uint8_t xdata temp_h,temp_l; //定义高八位和低八位 ADC_channel(1); //ADC 入口切换至 AIN1 口,采集电压信号 ADC_Value1 = ADC_Convert(); //启动 ADC 转换,获得转换值 temp_h = (ADC_Value1 & 0xff00) >> 8;//高8位的值 temp_l = ADC_Value1 & 0x00ff; //低8位的值 motor_data[4] = temp_h; motor_data[5] = temp_l; ADC_channel(2); //ADC 入口切换至 AIN2 口,采集激光测距信号 ADC_Value2 = ADC_Convert(); //启动 ADC 转换,获得转换值 temp_h = (ADC_Value2 & 0xff00) >> 8;//高8位的值 temp_l = ADC_Value2 & 0x00ff; //低8位的值 motor_data[6] = temp_h; motor_data[7] = temp_l; }