医疗网站建站,专注网站基础优化,上传网站工具,做微新闻怎么发视频网站一、前言 获取到数据后我们常需要在OLED显示屏上显示#xff0c;本文中我们需要使用上一篇文章(光照与温湿度数据获取)的代码#xff0c;在其基础上继续完成本文内容。 基础代码#xff1a;
#include string.h
#include board.h
#include hal_ke…一、前言 获取到数据后我们常需要在OLED显示屏上显示本文中我们需要使用上一篇文章(光照与温湿度数据获取)的代码在其基础上继续完成本文内容。 基础代码
#include string.h
#include board.h
#include hal_key.h
#include tim-board.h
#include timer_handles.h
#include led_light.h
#include adc_reader.h
#include math.h //library
#include stdio.h
#include stm32l1xx_hal.h // controller register definitions
#include sht1x.h // controller register definitions
#include sht3x.hvoid Init() {BoardInitMcu();BoardInitPeriph();keys_init();//按键初始化setTimer2Callback(Time2Handler);Tim2McuInit(1);//定时器初始化设置定时中断1ms中断一次
}float temp0,hum0,light0;
int main( void )
{Init();ADCS_Init();//初始化ADChal_temHumInit();//初始化温湿度模块while( 1 ){HAL_Delay(1000);//延时1000msAdcScanChannel();//更新通道值light((5.0/2.0)*AdcReadCh0())*100.0;//获取光照并通过公式计算call_sht11(temp,hum);//获取温湿度}
}二、代码实现 例程中为我们提供了hal_oled.c文件其中为我们常使用下列方法
void OLED_Display_On(void);//开启展示
void OLED_Display_Off(void);//关闭展示
void OLED_Init(void);//初始化OLED
void OLED_Clear(void);//清空显示内容
void OLED_DrawPoint(uint8_t x,uint8_t y,uint8_t t);//OLED屏幕画点
void OLED_ShowString(uint8_t x,uint8_t y, uint8_t *p);//OLED显示字符串
void OLED_ShowCHinese(uint8_t x,uint8_t y,uint8_t no);//显示汉字
void OLED_DrawBMP(unsigned char x, unsigned char y,unsigned char width, unsigned char hight,unsigned char BMP[]);//显示图片 OLED的屏幕是128*64内部将其分为了8行4页即0、2、4、6因此uint8_t y的参数为0~7且一个高16的字符需要两行即一页。 其中OLED_ShowCHinese()的第三个参数是来源于oledfont.h中的HZK数组大家也可以通过取模软件自行取模覆盖掉该数组的内容。 下面我们会用到温度与湿度的字模从数组中找到他们对应的下标。 代码示例 下列代码实现了汉字、字符串、数据、图片的功能以供大家学习参考。
#include string.h
#include board.h
#include hal_key.h
#include tim-board.h
#include timer_handles.h
#include led_light.h
#include adc_reader.h
#include math.h //library
#include stdio.h
#include stm32l1xx_hal.h // controller register definitions
#include sht1x.h // controller register definitions
#include sht3x.hvoid Init() {BoardInitMcu();BoardInitPeriph();keys_init();//按键初始化setTimer2Callback(Time2Handler);Tim2McuInit(1);//定时器初始化设置定时中断1ms中断一次
}unsigned char bmp[]{//图像取模后的数组
0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,0xFE,0xFC,0xF8,0xF0,
0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x08,0x1C,0x3E,0x7F,0x7F,0xBF,0xDF,0x6F,0xBF,
0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3E,0x1C,0x08,0x10,0x18,
0x6C,0xB6,0xDB,0x6D,0xB6,0xDB,0x6D,0xB6,0xDB,0x6D,0xB7,0xDB,0x6F,0xB7,0xDB,0x6D,
0xB6,0xDA,0x6C,0x30,0x10,0x00,0x00,0x00,0x00,0x00,0x03,0x05,0x06,0x1B,0x2D,0x36,
0xDB,0x6D,0x36,0x1B,0x0D,0x06,0x03,0x01,0x00,0x00,0x00,0x00
};
float temp0,hum0,light0;
uint8_t data[20];
int main( void )
{Init();ADCS_Init();//初始化ADChal_temHumInit();//初始化温湿度模块OLED_Init();//初始化OLED屏幕OLED_Display_On();//开启展示while( 1 ){HAL_Delay(1000);//延时1000msAdcScanChannel();//更新通道值light((5.0/2.0)*AdcReadCh0())*100.0;//获取光照并通过公式计算call_sht11(temp,hum);//获取温湿度OLED_Clear();OLED_ShowCHinese(0,0,24);//湿 第二个参数代表从0行开始 将字写在0-1行OLED_ShowCHinese(16,0,23);//度 第一个参数代表左边的像素距离 //要把第一个字16*16的距离空出来 否则会覆盖第一个字 一个汉字的大小是16*16memset(data,\0,20);//清空数组sprintf((char *)data,%.2f %%RH,hum);//将内容写到数组中OLED_ShowString(16*2,0,data);//显示数组内的内容//16*2代表左边空出两个字的距离 OLED_ShowString(0,2,(uint8_t *)xixi_cainiao);//直接显示字符串 xixi_cainiao//第二个参数为2代表显示在2-3行OLED_DrawBMP(0,4,32,32,bmp);//在距离左边为0 第4行开始 画一个32*32的图像//bmp为上述定义好的图像数组}
}其中有值得注意的几点 1.必须导入头文件头文件是使我们的主程序知道所使用的方法存在的基础。 2.初始化后需要开始展示OLED显示屏才能够正确显示图像 3.在每次更新数据前务必需要清空OLED显示屏否则如果新的数据对某个位置的显示数据没有改变该区域就会保留影响显示效果。 4.数组与OLED显示屏原理相同使用前务必清空否则会对后面造成干扰。
三、总结 OLED显示屏是一个十分重要的输出设备它是我们不借助其他软件让我们直观看到单片机状态的设备因此它的掌握尤为重要也是我们交互的基础。