OLED_ShowString(0,0, "Temperature:%d",16); OLED_ShowString(0,16, "Light:%d",16); OLED_Refresh_Gram();//更新显示到OLED DAC_SetChannel1Data(DAC_Align_12b_R,u16DacVal); //初始值为0 ADC_SoftwareStartConvCmd(ADC1, ENABLE); u16ScanCnt = 0; while(1) { if(u16ADCOK == 0x55D5) { u16gtmp = Get_Average(u16ADCConvertedValue,16); temp=(float)u16gtmp*(3.3/4096); //获取计算后的带小数的实际电压值,比如3.1111。如3.1111,就显示3 adcx=temp; //赋值整数部分给adcx变量,因为adcx为u16整型 temp-=adcx; //把已经显示的整数部分去掉,留下小数部分,比如3.1111-3=0.1111 temp*=1000; //小数部分乘以1000,例如:0.1111就转换为111.1,相当于保留三位小数。 adcy = temp; memset(buff,0,sizeof(buff)); sprintf(buff,"ADC:%2d.%3dV",adcx,adcy); OLED_ShowString(0,48,buff,16); printf ("%s\n\n",buff); printf("\r\n\r\n");//插入换行 OLED_Refresh_PageGram(2); OLED_Refresh_PageGram(3); u16ADCOK = 0x0000; //ADC未转换 ADC_SoftwareStartConvCmd(ADC1, ENABLE); } }已正确定义并引用该函数,为什么这段代码一直显示这个错误:..\OBJ\TIMER.axf: Error: L6218E: Undefined symbol OLED_Refresh_PageGram (referred from main.o). Not enough information to list image symbols.
时间: 2024-03-30 19:35:07 浏览: 338
根据错误提示,OLED_Refresh_PageGram 函数可能未被定义或未被链接到程序中。请确保在程序中包含 OLED_Refresh_PageGram 函数的定义,并且将其编译和链接到程序中。如果你已经包含了 OLED_Refresh_PageGram 函数的定义,请检查函数名是否正确拼写。另外,也需要检查是否将该函数所在的源文件加入了编译链接过程中。
相关问题
void OLED_Processing(void) { unsigned char buf[32]; OLED_Clear(); switch(Mode) { case 0: sprintf(buf,"Light:%d lx",Light_Value); OLED_ShowString(0, 0, buf); sprintf(buf,"Humidity:%d %%",DHT_BUFF.Hum); OLED_ShowString(0, 16, buf); sprintf(buf,"Temp:%d C",DHT_BUFF.Temp); OLED_ShowString(0, 32, buf); // sprintf(buf,"HR:%d%%",DHT_BUFF.Hum); // OLED_ShowString(0, 48, buf); if(Auto) { OLED_ShowString(0, 48, "Mode:Auto"); } else { OLED_ShowString(0, 48, "Mode:Hand"); } break; case 1: sprintf(buf,"Ser Rh:"); OLED_ShowString(0, 0, buf); sprintf(buf,"%d %%",Water_Max); OLED_ShowString(48, 16, buf); break; case 2: sprintf(buf,"Ser Light:"); OLED_ShowString(0, 0, buf); sprintf(buf,"%d Lx",Light_Max); OLED_ShowString(48, 16, buf); break; case 3: sprintf(buf,"Ser Temp:"); OLED_ShowString(0, 0, buf); sprintf(buf,"%d C",Temp_Max); OLED_ShowString(48, 16, buf); break; }
这段代码是一个 OLED 显示屏的处理函数,根据变量 Mode 的不同值,显示不同的信息。在 Mode 为 0 时,显示光线、温度、湿度以及当前模式(手动或自动);在 Mode 为 1 时,显示设置的最大浇水湿度;在 Mode 为 2 时,显示设置的最大光照强度;在 Mode 为 3 时,显示设置的最高温度。其中 sprintf 函数是将格式化后的字符串存储到缓冲区 buf 中,然后通过 OLED_ShowString 函数将字符串显示在 OLED 屏幕上。
uint16_t temp_raw = ADC_Read(ADC_Channel_16); uint16_t light_raw = ADC_Read(ADC_Channel_17); float temp = (temp_raw * 3.3f / 4096.0f - 0.76f) / 0.0025f + 25.0f; float light = light_raw * 3.3f / 4096.0f; if (temp > 30.0f) GPIO_SetPin(GPIOB, GPIO_Pin_12); else GPIO_ResetPin(GPIOB, GPIO_Pin_12); if (light < 1.0f) GPIO_SetPin(GPIOB, GPIO_Pin_13); else GPIO_ResetPin(GPIOB, GPIO_Pin_13); OLED_Clear(); OLED_ShowString(0, 0, "LED1:"); if (GPIO_ReadPin(GPIOB, GPIO_Pin_12)) OLED_ShowString(48, 0, "ON"); else OLED_ShowString(48, 0, "OFF"); OLED_ShowString(0, 1, "LED2:"); if (GPIO_ReadPin(GPIOB, GPIO_Pin_13)) OLED_ShowString(48, 1, "ON"); else OLED_ShowString(48, 1, "OFF"); OLED_ShowString(0, 2, "Temp:"); OLED_ShowFloat(48, 2, temp, 1); OLED_ShowChar(72, 2, 'C'); OLED_ShowString(0, 3, "Light:"); OLED_ShowFloat(48, 3, light, 2); OLED_ShowChar(72, 3, 'V'); Delay_ms(1000); }详细解释每句代码的意思
这段代码是用来读取温度传感器和光强传感器的数据,并根据读取到的数据控制两个LED灯的开关状态,并在OLED屏幕上显示传感器数据和LED灯的状态。
具体解释如下:
```
uint16_t temp_raw = ADC_Read(ADC_Channel_16);
uint16_t light_raw = ADC_Read(ADC_Channel_17);
float temp = (temp_raw * 3.3f / 4096.0f - 0.76f) / 0.0025f + 25.0f;
float light = light_raw * 3.3f / 4096.0f;
```
这部分代码是用来读取温度传感器和光强传感器的原始数据,并将其转换为实际的温度值和光强值。其中,temp_raw和light_raw分别存储了温度传感器和光强传感器读取到的原始数据,temp和light则分别存储了根据原始数据计算得到的实际温度值和光强值。
```
if (temp > 30.0f)
GPIO_SetPin(GPIOB, GPIO_Pin_12);
else
GPIO_ResetPin(GPIOB, GPIO_Pin_12);
if (light < 1.0f)
GPIO_SetPin(GPIOB, GPIO_Pin_13);
else
GPIO_ResetPin(GPIOB, GPIO_Pin_13);
```
这部分代码是根据读取到的温度值和光强值来控制LED灯的开关状态。如果读取到的温度值大于30.0摄氏度,则打开LED1灯;否则关闭LED1灯。如果读取到的光强值小于1.0V,则打开LED2灯;否则关闭LED2灯。
```
OLED_Clear();
OLED_ShowString(0, 0, "LED1:");
if (GPIO_ReadPin(GPIOB, GPIO_Pin_12))
OLED_ShowString(48, 0, "ON");
else
OLED_ShowString(48, 0, "OFF");
OLED_ShowString(0, 1, "LED2:");
if (GPIO_ReadPin(GPIOB, GPIO_Pin_13))
OLED_ShowString(48, 1, "ON");
else
OLED_ShowString(48, 1, "OFF");
OLED_ShowString(0, 2, "Temp:");
OLED_ShowFloat(48, 2, temp, 1);
OLED_ShowChar(72, 2, 'C');
OLED_ShowString(0, 3, "Light:");
OLED_ShowFloat(48, 3, light, 2);
OLED_ShowChar(72, 3, 'V');
Delay_ms(1000);
```
这部分代码是用来在OLED屏幕上显示读取到的传感器数据和LED灯的状态。首先调用OLED_Clear()函数来清空OLED屏幕,然后使用OLED_ShowString()函数和OLED_ShowFloat()函数来显示LED灯状态和传感器数据。最后使用Delay_ms()函数延迟1秒钟,以便用户能够看清屏幕上的显示。
阅读全文