OLED屏显和汉字点阵编码原理

一、实验准备

1.keil5
2.(2)PC,STM32开发板(这里使用野火stm32mini)、0.96存OLED显示屏、烧录装置(下载器)

参考厂家的用户手册完成引脚连接:
在这里插入图片描述

二、基于SPI修改程序实现数据显示

1.中文数据显示
文本内容为中文在点阵中为16*16,故都为16进制,我们通过软件进行生成
PCtoLCD2002的链接
提取码:dn7x
使用该软件生成十六进制字模
在这里插入图片描述

选择模式中的字符模式,在选择中调整字体大小为16及16进制

2.代码

 (0) (1) (2)

DB 40H 40H 42H 42H 42H 42H C2H 42H 42H 42H 42H 42H 42H 40H 40H 00H;
DB 00H 20H 70H 28H 24H 23H 20H 20H 20H 24H 28H 30H E0H 00H 00H 00H;"云",0

DB 80H 82H 82H 82H FEH 82H 82H 82H 82H 82H FEH 82H 82H 82H 80H 00H;
DB 00H 80H 40H 30H 0FH 00H 00H 00H 00H 00H FFH 00H 00H 00H 00H 00H;"开",1

DB 00H 80H 60H 9FH 08H 08H F8H 00H 00H FFH 10H 20H 40H 80H 00H 00H;
DB 81H 40H 20H 13H 0CH 13H 20H 20H 40H 5FH 40H 40H 40H 41H 40H 00H;"处",2

代码显示部分:

void TEST_MainPage(void)
{
    
    	
	GUI_ShowString(28,0,"MR liao",16,1);
	GUI_ShowCHinese(28,20,16,"云开处",1);
	GUI_ShowString(4,48,"631807060611",16,1);
	delay_ms(1500);		
	delay_ms(1500);
}

main函数:

int main(void)
{
    
    	
	delay_init();	    	       //延时函数初始化	  
	NVIC_Configuration(); 	   //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 	
	OLED_Init();			         //初始化OLED  
	OLED_Clear(0);             //清屏(全黑)
	while(1) 
	{
    
    	
		TEST_MainPage();         //主界面显示测试
	}
}

结果演示:
在这里插入图片描述

三、使用STM32在0.96寸OLED显示屏上实现字符滚动

1.初识OLED屏滚动命令

本OLED屏的芯片类型为:SSD1306
详细命令请参考链接
https://wlink.blog.csdn.net/article/details/81329770

  • 设置水平左右移步骤:
    OLED_WR_Byte(0x2E,OLED_CMD); //关闭滚动
    OLED_WR_Byte(0x26,OLED_CMD); //水平向左或者右滚动 26/27
    OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节
    OLED_WR_Byte(0x00,OLED_CMD); //起始页 0
    OLED_WR_Byte(0x07,OLED_CMD); //滚动时间间隔
    OLED_WR_Byte(0x07,OLED_CMD); //终止页 7
    OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节
    OLED_WR_Byte(0xFF,OLED_CMD); //虚拟字节
    OLED_WR_Byte(0x2F,OLED_CMD); //开启滚动

  • 设置垂直和水平滚动的(没有可用连续垂直滚动)步骤:
    OLED_WR_Byte(0x2e,OLED_CMD); //关闭滚动
    OLED_WR_Byte(0x29,OLED_CMD); //水平垂直和水平滚动左右 29/2a
    OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节
    OLED_WR_Byte(0x00,OLED_CMD); //起始页 0
    OLED_WR_Byte(0x07,OLED_CMD); //滚动时间间隔
    OLED_WR_Byte(0x07,OLED_CMD); //终止页 1
    OLED_WR_Byte(0x01,OLED_CMD); //垂直滚动偏移量
    OLED_WR_Byte(0x2F,OLED_CMD); //开启滚动

2.文本取模

参考上面取模

3.代码

 main函数:
 int main(void)
{
    
    	
	delay_init();	    	       //延时函数初始化	  
	NVIC_Configuration(); 	   //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 	
	OLED_Init();			         //初始化OLED  
	OLED_Clear(0);             //清屏(全黑)
	OLED_WR_Byte(0x2E,OLED_CMD);        //关闭滚动
        OLED_WR_Byte(0x26,OLED_CMD);        //水平向左或者右滚动 26/27
        OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
        OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0
        OLED_WR_Byte(0x07,OLED_CMD);        //滚动时间间隔
        OLED_WR_Byte(0x07,OLED_CMD);        //终止页 7
        OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
        OLED_WR_Byte(0xFF,OLED_CMD);        //虚拟字节
		TEST_MainPage();         //主界面显示测试
        OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动
}

显示部分代码

void TEST_MainPage(void)
{
    
    	
	GUI_ShowString(28,0,"HELLO",16,1);
	GUI_ShowCHinese(12,16,16,"欢迎来到重庆交通大学",1);
	delay_ms(1500);		
	delay_ms(1500);
}	

效果展示:
在这里插入图片描述

四、参考资料

0.96inch SPI OLED Module.

猜你喜欢

转载自blog.csdn.net/qq_48008050/article/details/111998897
今日推荐