物联网Lora模块从入门到精通(六)OLED显示屏

一、前言

        获取到数据后我们常需要在OLED显示屏上显示,本文中我们需要使用上一篇文章(光照与温湿度数据获取)的代码,在其基础上继续完成本文内容。

        基础代码:

#include 
#include "board.h"
#include "hal_key.h"
#include "tim-board.h"
#include "timer_handles.h"
#include "led_light.h"
#include "adc_reader.h"
#include           //library 
#include 
#include "stm32l1xx_hal.h" // controller register definitions 
#include "sht1x.h"         // controller register definitions 
#include "sht3x.h"

void Init() {
    BoardInitMcu();
    BoardInitPeriph();
    keys_init();//按键初始化
    setTimer2Callback(Time2Handler);
    Tim2McuInit(1);//定时器初始化,设置定时中断1ms中断一次
}

float temp=0,hum=0,light=0;
int main( void )
{
    Init();
		ADCS_Init();//初始化ADC
		hal_temHumInit();//初始化温湿度模块
    while( 1 )
    {
				HAL_Delay(1000);//延时1000ms
				AdcScanChannel();//更新通道值
				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数组,大家也可以通过取模软件自行取模覆盖掉该数组的内容。

物联网Lora模块从入门到精通(六)OLED显示屏_第1张图片        

         下面,我们会用到温度与湿度的字模,从数组中找到他们对应的下标。

物联网Lora模块从入门到精通(六)OLED显示屏_第2张图片

        代码示例:

        下列代码实现了汉字、字符串、数据、图片的功能,以供大家学习参考。

#include 
#include "board.h"
#include "hal_key.h"
#include "tim-board.h"
#include "timer_handles.h"
#include "led_light.h"
#include "adc_reader.h"
#include           //library 
#include 
#include "stm32l1xx_hal.h" // controller register definitions 
#include "sht1x.h"         // controller register definitions 
#include "sht3x.h"

void 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 temp=0,hum=0,light=0;
uint8_t data[20];
int main( void )
{
    Init();
		ADCS_Init();//初始化ADC
		hal_temHumInit();//初始化温湿度模块
		OLED_Init();//初始化OLED屏幕
		OLED_Display_On();//开启展示
    while( 1 )
    {
				HAL_Delay(1000);//延时1000ms
				AdcScanChannel();//更新通道值
				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*16
				memset(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为上述定义好的图像数组
			
    }
}

你可能感兴趣的:(新大陆物联网Lora模块开发,新大陆物联网竞赛,物联网)