【NB-IoT模块显示屏逻辑显示】

一、最终按键控制文字滚动效果:

NB-IOT模块显示屏文字滚动

二、实验要求:

在这里插入图片描述

三、实现部分代码剖析:

1、对需要显示的汉字按要求进行取模并加入字库中

  1. 从上到下循环滚动时,需要将汉字旋转90度在这里插入图片描述
  2. 把数据添加到字库中,并做好注释
/*取模汉字添加到字库中,大小统一为16*16像素*/
{
    
    0x42,0x4A,0xD2,0x6A,0x46,0xC0,0x00,0xF2,0x12,0x1A,0xD6,0x12,0x12,0xF2,0x02,0x00},
{
    
    0x40,0x80,0x7F,0x00,0x01,0x00,0x80,0x4F,0x20,0x18,0x07,0x10,0x20,0x4F,0x80,0x00},/*"预",52*/

{
    
    0x08,0x08,0x89,0xEE,0x98,0x00,0x7E,0x42,0xC2,0x42,0x42,0xC2,0x42,0x7E,0x00,0x00},
{
    
    0x02,0x01,0x00,0xFF,0x80,0x43,0x20,0x18,0x07,0x00,0x00,0x3F,0x40,0x40,0x78,0x00},/*"祝",53*/

{
    
    0x00,0xFE,0x00,0xFC,0x00,0xFF,0x00,0xF2,0x12,0x1A,0xD6,0x12,0x12,0xF2,0x02,0x00},
{
    
    0x40,0x3F,0x00,0x3F,0x00,0xFF,0x80,0x4F,0x20,0x18,0x07,0x10,0x20,0x4F,0x80,0x00},/*"顺",54*/

{
    
    0x40,0x44,0x44,0x44,0xC4,0xFE,0x42,0x43,0x42,0x00,0xF8,0x00,0x00,0xFF,0x00,0x00},
{
    
    0x20,0x10,0x0C,0x03,0x00,0xFF,0x01,0x02,0x04,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00},/*"利",55*/

{
    
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{
    
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"",56*/

//把需要显示的汉字旋转90度,从上到下显示
{
    
    0x00,0xFE,0x20,0x40,0xFC,0x04,0x24,0x24,0x24,0x24,0x24,0x44,0x50,0x88,0x04,0x02},
{
    
    0x00,0xF9,0x08,0x50,0x21,0x11,0xFD,0x25,0x29,0x21,0x21,0x21,0x20,0x20,0xA1,0x42},/*"预",57*/

{
    
    0x00,0xFC,0x04,0x04,0x04,0x04,0xFC,0x90,0x90,0x90,0x90,0x12,0x12,0x12,0x0E,0x00},
{
    
    0x20,0x13,0x12,0xFA,0x0A,0x12,0x13,0x38,0x54,0x94,0x10,0x11,0x11,0x12,0x14,0x18},/*"祝",58*/

{
    
    0x00,0xFE,0x20,0x40,0xFC,0x04,0x24,0x24,0x24,0x24,0x24,0x44,0x50,0x88,0x04,0x02},
{
    
    0x04,0x45,0x54,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x54,0x85,0x06},/*"顺",59*/

{
    
    0x04,0x84,0x04,0x24,0x24,0x24,0xA4,0x24,0x24,0x24,0xA4,0x24,0x04,0x04,0x14,0x08},
{
    
    0x01,0x07,0x7C,0x04,0x04,0x04,0xFF,0x0C,0x16,0x15,0x24,0x24,0x44,0x84,0x04,0x04},/*"利",60*/
  • 添加了横屏和竖屏的汉字,并添加一个空白的汉字擦除汉字;

2、初始化OLED外设

//初始化部分外设
  OLED_Init();
  OLED_Clear();

3、进行按钮事件监听

KeyDownHandler();  //进行按钮事件监听

4、对Key2进行算法搭建

//点击Key2按键
 if(isKey2Pressed()){
    
    
  resetKey2();
  //从右向左逐渐刷新显示汉字
  for(int i=0;i<12;i++){
    
    	//i<12跳过调试确定汉字返回到右端,也可推导4+(64/16)*2
    if(i ==0){
    
    
     OLED_ShowCHinese(112-i*16,3,52);  //显示1个汉字“预”
    }
    if(i ==1){
    
    
     OLED_ShowCHinese(112-i*16,3,52); 
     OLED_ShowCHinese(112-((i-1)*16),3,53);  //显示2个汉字“预祝”
    }
    if(i ==2){
    
    
     OLED_ShowCHinese(112-i*16,3,52); 
     OLED_ShowCHinese(112-((i-1)*16),3,53);
     OLED_ShowCHinese(112-((i-2)*16),3,54);  //显示3个汉字“预祝顺”
    }
    if(i ==3){
    
    
     OLED_ShowCHinese(112-i*16,3,52); 
     OLED_ShowCHinese(112-((i-1)*16),3,53);
     OLED_ShowCHinese(112-((i-2)*16),3,54);
     OLED_ShowCHinese(112-((i-3)*16),3,55);  //显示4个汉字“预祝顺利”
    }
    if(i >=4 && i<=7){
    
    
     
     for(int j=0;j<=4;j++){
    
    
      OLED_ShowCHinese(112-(i-j)*16,3,52+j); //4个汉字向左滚动,可把该for循环单独封装成函数调用,优化算法
     }
     /*
     OLED_ShowCHinese(112-i*16,3,52); //可以通过for循环优化算法,通过调用函数减少代码量
     OLED_ShowCHinese(112-((i-1)*16),3,53);
     OLED_ShowCHinese(112-((i-2)*16),3,54);
     OLED_ShowCHinese(112-((i-3)*16),3,55);
     OLED_ShowCHinese(112-((i-4)*16),3,56);*/
    }
    if(i>=8){
    
    
     OLED_ShowCHinese(((i-7)*16),3,52);
     OLED_ShowCHinese(((i-6)*16),3,53);
     OLED_ShowCHinese(((i-5)*16),3,54);
     OLED_ShowCHinese(((i-4)*16),3,55);
     OLED_ShowCHinese(((i-8)*16),3,56);  //4个汉字向右滚动
    }
    if(i ==11)
    {
    
    
     i=3;  //汉字到达最右边框,重复滚动
    }
    HAL_Delay(1000);   //每1秒滚动一次
    if(isKey3Pressed() || isKey4Pressed()){
    
       //点击Key3或者Key4清空屏幕,跳出该滚动循环
     OLED_Clear();
     break;
    }
  }
 }
  • 当汉字滚动到左边框时,需要添加向右滚动的算法;
  • 当到达右边框时,可以改变 i 的值使汉字重新向左滚动,实现循环;
  • 点击Key3或者Key4时,跳出该循环,文字按照key2和key3的要求实现滚动;
  • 可对for循环封装成一个函数供调用,优化代码;

5、Key3和Key4可以根据Key2的逻辑直接套娃就行

三、实现总结:

  • 先重点把Key2文字的滚动的算法,把滚动的算法弄明白后,把算法套在Key3和Key4按键上,改变一下坐标;
  • 对于小编(新手)很难直接把滚动的算法写出来,只能通过一个界面调试好,然后调试第二个界面…然后梳理程序,把各个模块的程序总结到一起;
  • 没有什么逻辑问题是if判断解决不了的,如果有,那就添加几个if判断;没有什么简单重复事件是for循环解决不了的,如果有,那再来几个for循环解决不了的;没有什么算法问题是if和for解决不了的,如果有,说明还没很好结合if和for。

三、实验源码:NB-IoT显示屏逻辑显示

Guess you like

Origin blog.csdn.net/a6662580/article/details/122489199