我用的夏普的红外传感器测一下距离,,adc转化模块是按照原子哥教程写的,就是mian里面用了if判断输出距离,,,显示屏不现实距离
下面是mian函数
int main(void)
{
float temp;
u16 adcx;
Adc_Init();
SystemInit();
OLED_Init();
LCD_Print(15, 0, "GUYOUJIE",TYPE16X16,TYPE8X16);
LCD_Print(15, 16, "DISTANCE",TYPE16X16,TYPE8X16);
while(1)
{
adcx=Get_Adc_Average(ADC_Channel_1,10);
temp=(float)adcx*(3.3/4096);
if (temp>0.38&&temp<0.45)
{
LCD_Print(16, 32, "80cm",TYPE16X16,TYPE6X8);
}
else if (temp>0.45&&temp<0.65)
{
LCD_Print(16, 32, "50cm",TYPE16X16,TYPE6X8);
}
else if (temp>0.65&&temp<0.80)
{
LCD_Print(16, 32, "40cm",TYPE16X16,TYPE6X8);
}
else if (temp>0.80&&temp<1.05)
{
LCD_Print(16, 32, "30cm",TYPE16X16,TYPE6X8);
}
else if (temp>1.05&&temp<1.25)
{
LCD_Print(16, 32, "25cm",TYPE16X16,TYPE6X8);
}
else if (temp>1.25&&temp<1.50)
{
LCD_Print(16, 32, "20cm",TYPE16X16,TYPE6X8);
}
else if (temp>1.50&&temp<1.95)
{
LCD_Print(16, 32, "15cm",TYPE16X16,TYPE6X8);
}
else if (temp>1.95&&temp<2.50)
{
LCD_Print(16, 32, "10cm",TYPE16X16,TYPE6X8);
}
else if (temp>2.50&&temp<2.95)
{
LCD_Print(16, 32, "8cm",TYPE16X16,TYPE6X8);
}
else if (temp>2.95&&temp<3.05)
{
LCD_Print(16, 32, "7cm",TYPE16X16,TYPE6X8);
}
else if (temp>3.05&&temp<3.15)
{
LCD_Print(16, 32, "5cm",TYPE16X16,TYPE6X8);
}
else if (temp>3.15&&temp<3.3)
{
LCD_Print(16, 32, "6cm",TYPE16X16,TYPE6X8);
}
}
}
求教大家为什么不可以显示啊 ,
已经解决了 那个是输入错误,原来adc1 对应的是PC1端口,
这是adc.c的 ,
#include "adc.h"
#include "delay.h"
void Adc_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1)); //μè′y¸′λD£×¼½áêø
ADC_StartCalibration(ADC1); //¿aÆôADD£×¼
while(ADC_GetCalibrationStatus(ADC1));
}
u16 Get_Adc(u8 ch)
{
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5 );
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
return ADC_GetConversionValue(ADC1);
}
u16 Get_Adc_Average(u8 ch,u8 times)
{
u32 temp_val=0;
u8 t;
for(t=0;t<times;t++)
{
temp_val+=Get_Adc(ch);
delay_ms(5);
}
return temp_val/times;//
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_ADC1, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
开GPIOA时钟
一周热门 更多>