基于RT-thread使用STM32F407驱动LCD屏幕
前言
不管哪款LCD,都是同理的,我这款LCD是用的IIC通信。 然后本工程使用普通IO口模拟IIC时序进行通信
一、拿到一款LCD首先确认通信方式,然后确认通信接口
二、然后就是确认控制指令,(指令太多放不完,我就放一部分)
三、LCD的外围电路设计
四、新建工程
五、打开CubeMX
六、时钟使用外部晶振
七、配置下载口
八、打开串口一,调试用
九、配置时钟线,时钟频率拉满
十、选择工具链
十一、生成.c和.h文件
十二、生成代码
十三、主函数中这么写
/*
* @Description:
* @Author: mzh
* @Date: 2023-07-31 21:57:47
* @LastEditors: mzh
* @LastEditTime: 2023-07-31 22:01:58
*/
/*
* Copyright (c) 2006-2023, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2023-07-21 RT-Thread first version
*/
#include "system_deal.h"
int main(void)
{
SystemStartInit();
return RT_EOK;
}
十四、在applications文件下新建system_deal文件夹,再在system_deal文件下新建system_deal.c和system_deal.h文件
十五、继续在system_deal文件夹下新建system_config.h文件
十六、包含头文件
十七、在system_deal.c中这么写
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2025-03-13 Administrator the first version
*/
#include "system_deal.h"
/*********************************************************************************************************
** Function name: SystemLedRun
** Descriptions: System Led Run
** input parameters: NONE
** output parameters: NONE
** Returned value: NONE
*********************************************************************************************************/
static void SystemLedRun(void)
{
static uint8_t l_ucmode = 0;
if (l_ucmode == 0)
{
rt_pin_write(SYS_LED, PIN_HIGH);
l_ucmode = 1;
}
else if (l_ucmode == 1)
{
rt_pin_write(SYS_LED, PIN_LOW);
l_ucmode = 0;
}
}
/*********************************************************************************************************
** Function name: SysDeal_thread
** Descriptions: SysDeal thread
** input parameters: parameter
** output parameters: NONE
** Returned value: NONE
*********************************************************************************************************/
static void SysDeal_thread(void* parameter)
{
// set pin
rt_pin_mode(SYS_LED, PIN_MODE_OUTPUT);
rt_pin_write(SYS_LED, PIN_HIGH);
while (1)
{
SystemLedRun();
rt_thread_mdelay(500);
}
}
/*********************************************************************************************************
** Function name: SystemDealTaskInit
** Descriptions: System Task Init
** input parameters: NONE
** output parameters: NONE
** Returned value: NONE
*********************************************************************************************************/
void SystemDealTaskInit(void)
{
rt_thread_t SysDeal_tid;
SysDeal_tid = rt_thread_create("sys_ctl", SysDeal_thread, RT_NULL, SYS_THREAD_STACK, SYS_THREAD_PRO, SYS_THREAD_TICK);
if (SysDeal_tid != RT_NULL)
{
rt_thread_startup(SysDeal_tid);
}
else
{
#if DEBUG_LOG_ENABLE
rt_kprintf("/--> SysDeal create failed!\n");
#endif
}
}
/*********************************************************************************************************
** Function name: SystemTaskInit
** Descriptions: System Task Init
** input parameters: NONE
** output parameters: NONE
** Returned value: NONE
*********************************************************************************************************/
static void SystemTaskInit(void)
{
SystemDealTaskInit(); // 15
#if SCREEN_CONTROL_ENABLE
ScreenDealTaskInit(); // 15
#endif
}
/*********************************************************************************************************
** Function name: SystemStartInit
** Descriptions: System Start Init
** input parameters: NONE
** output parameters: NONE
** Returned value: NONE
*********************************************************************************************************/
void SystemStartInit(void)
{
SystemTaskInit();
}
十八、在system_deal.h中这么写
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2025-03-13 Administrator the first version
*/
#ifndef APPLICATIONS_SYSTEM_DEAL_SYSTEM_DEAL_H_
#define APPLICATIONS_SYSTEM_DEAL_SYSTEM_DEAL_H_
#include <rtdevice.h>
#include <rtthread.h>
#include "board.h"
#include "stdio.h"
#include "system_config.h"
#include "screen_deal.h"
/* system io */
#define SYS_LED GET_PIN(G, 13)
/* thread information */
#define SYS_THREAD_STACK 1024
#define SYS_THREAD_PRO 15
#define SYS_THREAD_TICK 10
extern void SystemStartInit(void);
#endif /* APPLICATIONS_SYSTEM_DEAL_SYSTEM_DEAL_H_ */
十九、system_config.h中这么写
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2025-03-13 Administrator the first version
*/
#ifndef APPLICATIONS_SYSTEM_DEAL_SYSTEM_CONFIG_H_
#define APPLICATIONS_SYSTEM_DEAL_SYSTEM_CONFIG_H_
/* screen config */
#define SCREEN_CONTROL_ENABLE 1
#endif /* APPLICATIONS_SYSTEM_DEAL_SYSTEM_CONFIG_H_ */
二十、在applications文件夹下新建screen_deal文件夹,再在screen_deal文件夹下新建lcd_font.c、lcd_font.c、screen_deal.c、screen_deal.h文件夹。
二十一、在lcd_font.c中这么写
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2025-03-13 Administrator the first version
*/
#include "lcd_font.h"
uchar ascii_table_5x7[95][5] = {
{0x00,0x00,0x00,0x00,0x00}, // space
{0x00,0x00,0x4f,0x00,0x00}, //!
{0x00,0x07,0x00,0x07,0x00}, // "
{0x14,0x7f,0x14,0x7f,0x14}, // #
{0x24,0x2a,0x7f,0x2a,0x12}, // $
{0x23,0x13,0x08,0x64,0x62}, // %
{0x36,0x49,0x55,0x22,0x50}, // &
{0x00,0x05,0x07,0x00,0x00}, // ]
{0x00,0x1c,0x22,0x41,0x00}, // (
{0x00,0x41,0x22,0x1c,0x00}, // )
{0x14,0x08,0x3e,0x08,0x14}, // *
{0x08,0x08,0x3e,0x08,0x08}, // +
{0x00,0x50,0x30,0x00,0x00}, // ,
{0x08,0x08,0x08,0x08,0x08}, // -
{0x00,0x60,0x60,0x00,0x00}, //.
{0x20,0x10,0x08,0x04,0x02}, // /
{0x3e,0x51,0x49,0x45,0x3e}, // 0
{0x00,0x42,0x7f,0x40,0x00}, // 1
{0x42,0x61,0x51,0x49,0x46}, // 2
{0x21,0x41,0x45,0x4b,0x31}, // 3
{0x18,0x14,0x12,0x7f,0x10}, // 4
{0x27,0x45,0x45,0x45,0x39}, // 5
{0x3c,0x4a,0x49,0x49,0x30}, // 6
{0x01,0x71,0x09,0x05,0x03}, // 7
{0x36,0x49,0x49,0x49,0x36}, // 8
{0x06,0x49,0x49,0x29,0x1e}, // 9
{0x00,0x36,0x36,0x00,0x00}, // :
{0x00,0x56,0x36,0x00,0x00}, // ;
{0x08,0x14,0x22,0x41,0x00}, // <
{0x14,0x14,0x14,0x14,0x14}, // =
{0x00,0x41,0x22,0x14,0x08}, // >
{0x02,0x01,0x51,0x09,0x06}, //?
{0x32,0x49,0x79,0x41,0x3e}, // @
{0x7e,0x11,0x11,0x11,0x7e}, // A
{0x7f,0x49,0x49,0x49,0x36}, // B
{0x3e,0x41,0x41,0x41,0x22}, // C
{0x7f,0x41,0x41,0x22,0x1c}, // D
{0x7f,0x49,0x49,0x49,0x41}, // E
{0x7f,0x09,0x09,0x09,0x01}, // F
{0x3e,0x41,0x49,0x49,0x7a}, // G
{0x7f,0x08,0x08,0x08,0x7f}, // H
{0x00,0x41,0x7f,0x41,0x00}, // I
{0x20,0x40,0x41,0x3f,0x01}, // J
{0x7f,0x08,0x14,0x22,0x41}, // K
{0x7f,0x40,0x40,0x40,0x40}, // L
{0x7f,0x02,0x0c,0x02,0x7f}, // M
{0x7f,0x04,0x08,0x10,0x7f}, // N
{0x3e,0x41,0x41,0x41,0x3e}, // O
{0x7f,0x09,0x09,0x09,0x06}, // P
{0x3e,0x41,0x51,0x21,0x5e}, // Q
{0x7f,0x09,0x19,0x29,0x46}, // R
{0x46,0x49,0x49,0x49,0x31}, // S
{0x01,0x01,0x7f,0x01,0x01}, // T
{0x3f,0x40,0x40,0x40,0x3f}, // U
{0x1f,0x20,0x40,0x20,0x1f}, // V
{0x3f,0x40,0x38,0x40,0x3f}, // W
{0x63,0x14,0x08,0x14,0x63}, // X
{0x07,0x08,0x70,0x08,0x07}, // Y
{0x61,0x51,0x49,0x45,0x43}, // Z
{0x00,0x7f,0x41,0x41,0x00}, // [
{0x02,0x04,0x08,0x10,0x20}, // "\"
{0x00,0x41,0x41,0x7f,0x00}, // ]
{0x04,0x02,0x01,0x02,0x04}, // ^
{0x40,0x40,0x40,0x40,0x40}, // _
{0x01,0x02,0x04,0x00,0x00}, // `
{0x20,0x54,0x54,0x54,0x78}, // a
{0x7f,0x48,0x48,0x48,0x30}, // b
{0x38,0x44,0x44,0x44,0x44}, // c
{0x30,0x48,0x48,0x48,0x7f}, // d
{0x38,0x54,0x54,0x54,0x58}, // e
{0x00,0x08,0x7e,0x09,0x02}, // f
{0x48,0x54,0x54,0x54,0x3c}, // g
{0x7f,0x08,0x08,0x08,0x70}, // h
{0x00,0x00,0x7a,0x00,0x00}, // i
{0x20,0x40,0x40,0x3d,0x00}, // j
{0x7f,0x20,0x28,0x44,0x00}, // k
{0x00,0x41,0x7f,0x40,0x00}, // l
{0x7c,0x04,0x38,0x04,0x7c}, // m
{0x7c,0x08,0x04,0x04,0x78}, // n
{0x38,0x44,0x44,0x44,0x38}, // o
{0x7c,0x14,0x14,0x14,0x08}, // p
{0x08,0x14,0x14,0x14,0x7c}, // q
{0x7c,0x08,0x04,0x04,0x08}, // r
{0x48,0x54,0x54,0x54,0x24}, // s
{0x04,0x04,0x3f,0x44,0x24}, // t
{0x3c,0x40,0x40,0x40,0x3c}, // u
{0x1c,0x20,0x40,0x20,0x1c}, // v
{0x3c,0x40,0x30,0x40,0x3c}, // w
{0x44,0x28,0x10,0x28,0x44}, // x
{0x04,0x48,0x30,0x08,0x04}, // y
{0x44,0x64,0x54,0x4c,0x44}, // z
{0x08,0x36,0x41,0x41,0x00}, // {
{0x00,0x00,0x77,0x00,0x00}, // |
{0x00,0x41,0x41,0x36,0x08}, // }
{0x04,0x02,0x02,0x02,0x01}, // ~
};
uchar ascii_table_8x16[95][16]={
/*-- 文字: --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: ! --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,
/*-- 文字: " --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: # --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,
/*-- 文字: $ --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,
/*-- 文字: % --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,
/*-- 文字: & --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,
/*-- 文字: ' --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: ( --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,
/*-- 文字: ) --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,
/*-- 文字: * --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,
/*-- 文字: + --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,
/*-- 文字: , --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: - --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
/*-- 文字: . --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: / --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,
/*-- 文字: 0 --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*-- 文字: 1 --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*-- 文字: 2 --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
/*-- 文字: 3 --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: 4 --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
/*-- 文字: 5 --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: 6 --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
/*-- ����: 7 --*/
/*-- Comic Sans MS12; �������¶�Ӧ�ĵ���Ϊ����x��=8x16 --*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
/*-- 文字: 8 --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
/*-- 文字: 9 --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
/*-- 文字: : --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
/*-- 文字: ; --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,
/*-- 文字: < --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,
/*-- 文字: = --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
/*-- 文字: > --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,
/*-- 文字: ? --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,
/*-- 文字: @ --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,
/*-- 文字: A --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,
/*-- 文字: B --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: C --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,
/*-- 文字: D --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,
/*-- 文字: E --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,
/*-- 文字: F --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,
/*-- 文字: G --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽 x 高=8x16 --*/
0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,
/*-- 文字: H --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,
/*-- 文字: I --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*-- 文字: J --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,
/*-- 文字: K --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,
/*-- 文字: L --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,
/*-- 文字: M --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,
/*-- 文字: N --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,
/*-- 文字: O --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,
/*-- 文字: P --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,
/*-- 文字: Q --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,
/*-- 文字: R --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,
/*-- 文字: S --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,
/*-- 文字: T --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,
/*-- 文字: U --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,
/*-- 文字: V --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,
/*-- 文字: W --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,
/*-- 文字: X --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,
/*-- 文字: Y --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,
/*-- 文字: Z --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,
/*-- 文字: [ --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,
/*-- 文字: \ --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,
/*-- 文字: ] --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,
/*-- 文字: ^ --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: _ --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
/*-- 文字: ` --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: a --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,
/*-- 文字: b --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: c --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,
/*-- 文字: d --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,
/*-- 文字: e --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,
/*-- 文字: f --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*-- 文字: g --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,
/*-- 文字: h --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,
/*-- 文字: i --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*-- 文字: j --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,
/*-- 文字: k --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,
/*-- 文字: l --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*-- 文字: m --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,
/*-- 文字: n --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,
/*-- 文字: o --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,
/*-- 文字: p --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: q --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,
/*-- 文字: r --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,
/*-- 文字: s --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,
/*-- 文字: t --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,
/*-- 文字: u --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,
/*-- 文字: v --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,
/*-- 文字: w --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,
/*-- 文字: x --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,
/*-- 文字: y --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,
/*-- 文字: z --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,
/*-- 文字: { --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,
/*-- 文字: | --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,
/*-- 文字: } --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,
/*-- 文字: ~ --*/
/*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
二十二、在lcd_font.h中这么写
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2025-03-13 Administrator the first version
*/
#ifndef APPLICATIONS_SCREEN_DEAL_LCD_FONT_H_
#define APPLICATIONS_SCREEN_DEAL_LCD_FONT_H_
#define uchar unsigned char
#define uint unsigned int
extern uchar ascii_table_5x7[95][5];
extern uchar ascii_table_8x16[95][16];
#endif /* APPLICATIONS_SCREEN_DEAL_LCD_FONT_H_ */
二十三、在screen_deal.c中这么写
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2025-03-13 Administrator the first version
*/
#include "screen_deal.h"
#include "lcd_font.h"
void gpio_init(void)
{
rt_pin_mode(MCU_DSP_CS0, PIN_MODE_OUTPUT);
rt_pin_mode(MCU_DSP_RST, PIN_MODE_OUTPUT);
rt_pin_mode(MCU_DSP_CD, PIN_MODE_OUTPUT);
rt_pin_mode(MCU_DSP_SCK, PIN_MODE_OUTPUT);
rt_pin_mode(MCU_DSP_SDA, PIN_MODE_OUTPUT);
rt_pin_write(MCU_DSP_CS0, PIN_HIGH);
rt_pin_write(MCU_DSP_RST, PIN_HIGH);
}
/*写数据到 LCD 模块*/
void transfer_data(int data1)
{
char i;
rt_pin_write(MCU_DSP_CS0, PIN_LOW);
rt_pin_write(MCU_DSP_CD, PIN_HIGH);
for(i=0;i<8;i++)
{
rt_pin_write(MCU_DSP_SCK, PIN_LOW);
if(data1&0x80)
{
rt_pin_write(MCU_DSP_SDA, PIN_HIGH);
}
else
{
rt_pin_write(MCU_DSP_SDA, PIN_LOW);
}
rt_pin_write(MCU_DSP_SCK, PIN_HIGH);
data1 <<= 1;
}
}
/*写指令到 LCD 模块*/
void transfer_command(int data1)
{
char i;
rt_pin_write(MCU_DSP_CS0, PIN_LOW);
rt_pin_write(MCU_DSP_CD, PIN_LOW);
for(i=0;i<8;i++)
{
rt_pin_write(MCU_DSP_SCK, PIN_LOW);
if(data1&0x80)
{
rt_pin_write(MCU_DSP_SDA, PIN_HIGH);
}
else
{
rt_pin_write(MCU_DSP_SDA, PIN_LOW);
}
rt_pin_write(MCU_DSP_SCK, PIN_HIGH);
data1 <<= 1;
}
}
void lcd_address(uchar page,uchar column)
{
rt_pin_write(MCU_DSP_CS0, PIN_LOW);
column=column-1; //我们平常所说的第 1 列,在 LCD 驱动 IC 里是第 0 列。所以在这里减去 1
page=page-1;
transfer_command(0xb0+page); //设置页地址。每页是 8 行。一个画面的 64 行被分成 8 个页。我们平常所说的第 1 页,在 LCD 驱动 IC 里是第 0 页,所以在这里减去 1*/
transfer_command(((column>>4)&0x0f)+0x10); //设置列地址的高 4 位
transfer_command(column&0x0f); //设置列地址的低 4 位
}
/*全屏清屏*/
void clear_screen()
{
unsigned char i,j;
rt_pin_write(MCU_DSP_CS0, PIN_LOW);
for(i=0;i<9;i++)
{
lcd_address(1+i,1);
for(j=0;j<132;j++)
{
transfer_data(0x00);
}
}
rt_pin_write(MCU_DSP_CS0, PIN_HIGH);
}
/*显示 16x32 点阵图像、汉字、生僻字或 16x32 点阵的其他图标*/
void display_graphic_16x32(uchar page,uchar column,uchar *dp)
{
uchar i,j;
rt_pin_write(MCU_DSP_CS0, PIN_LOW);
for(j=0;j<4;j++)
{
lcd_address(page+j,column);
for (i=0;i<16;i++)
{
transfer_data(*dp); /*写数据到 LCD,每写完一个 8 位的数据后列地址自动加 1*/
dp++;
}
}
rt_pin_write(MCU_DSP_CS0, PIN_HIGH);
}
/*显示 32x32 点阵图像、汉字、生僻字或 32x32 点阵的其他图标*/
void display_graphic_32x32(uchar page,uchar column,uchar *dp)
{
uchar i,j;
rt_pin_write(MCU_DSP_CS0, PIN_LOW);
for(j=0;j<4;j++)
{
lcd_address(page+j,column);
for (i=0;i<31;i++)
{
transfer_data(*dp); /*写数据到 LCD,每写完一个 8 位的数据后列地址自动加 1*/
dp++;
}
}
rt_pin_write(MCU_DSP_CS0, PIN_HIGH);
}
/*显示 16x16 点阵图像、汉字、生僻字或 16x16 点阵的其他图标*/
void display_graphic_16x16(uchar page,uchar column,uchar *dp)
{
uchar i,j;
rt_pin_write(MCU_DSP_CS0, PIN_LOW);
for(j=0;j<2;j++)
{
lcd_address(page+j,column);
for (i=0;i<16;i++)
{
transfer_data(*dp); /*写数据到 LCD,每写完一个 8 位的数据后列地址自动加 1*/
dp++;
}
}
rt_pin_write(MCU_DSP_CS0, PIN_HIGH);
}
/*显示 8x16 点阵图像、ASCII, 或 8x16 点阵的自造字符、其他图标*/
void display_graphic_8x16(uchar page,uchar column,uchar *dp)
{
uchar i,j;
rt_pin_write(MCU_DSP_CS0, PIN_LOW);
for(j=0;j<2;j++)
{
lcd_address(page+j,column);
for (i=0;i<8;i++)
{
transfer_data(*dp); /*写数据到 LCD,每写完一个 8 位的数据后列地址自动加 1*/
dp++;
}
}
rt_pin_write(MCU_DSP_CS0, PIN_HIGH);
}
void display_string_8x16(uint page,uint column,uchar *text)
{
uint i=0,j,k,n;
rt_pin_write(MCU_DSP_CS0, PIN_LOW);
while(text[i]>0x00)
{
if((text[i]>=0x20)&&(text[i]<=0x7e))
{
j=text[i]-0x20;
for(n=0;n<2;n++)
{
lcd_address(page+n,column);
for(k=0;k<8;k++)
{
transfer_data(ascii_table_8x16[j][k+8*n]);/*显示 8x16 的 ASCII 字到 LCD 上,y 为页地址,x 为列地址,最后为数据*/
}
}
i++;
column+=8;
}
else
i++;
}
}
void display_string_5x7(uint page, uint column, uchar *text)
{
uint i=0,j,k;
rt_pin_write(MCU_DSP_CS0, PIN_LOW);
while(text[i] > 0x00)
{
if((text[i]>=0x20)&&(text[i]<0x7e))
{
j=text[i] - 0x20;
lcd_address(page,column);
for(k=0;k<5;k++)
{
transfer_data(ascii_table_5x7[j][k]);/*显示 5x7 的 ASCII 字到 LCD 上,y 为页地址,x 为列地址,最后为 数据*/
}
i++;
column+=6;
}
else
{
i++;
}
}
}
//==================display a piture of 128*64 dots================
void disp_grap(char *dp)
{
int i,j;
for(i=0;i<8;i++)
{
rt_pin_write(MCU_DSP_CS0, PIN_LOW);
transfer_command(0xb0+i);
transfer_command(0x10);
transfer_command(0x00);
for(j=0;j<128;j++)
{
transfer_data(*dp);
dp++;
}
}
}
// 横向滚动文字
void scroll_text_demo()
{
char *text = "RT-Thread Smart IoT System! ";
int pos = 128; // 初始位置在屏幕右侧
while(1) {
clear_screen();
display_string_8x16(3, pos, text);
rt_thread_mdelay(60);
if(--pos < -24*8) // 根据文本长度调整
pos = 128;
}
}
// 纵向滚动文字
void vertical_scroll_demo()
{
uint8_t page = 8;
char *text = "Hello RT-Thread!";
while(1) {
for(int i=0; i<8; i++) {
clear_screen();
display_string_8x16(page-i, 20, text);
rt_thread_mdelay(200);
}
}
}
/*LCD 模块初始化*/
void initial_lcd()
{
gpio_init();
rt_pin_write(MCU_DSP_CS0, PIN_LOW); //片选引脚,低电平进行使能
rt_pin_write(MCU_DSP_RST, PIN_LOW); /*低电平硬件复位*/
rt_thread_mdelay(100); /*复位完毕*/
rt_pin_write(MCU_DSP_RST, PIN_HIGH); //复位引脚拉高,停止硬件复位
rt_thread_mdelay(100);
transfer_command(0xe2); /*软复位*/
rt_thread_mdelay(5);
transfer_command(0x2c); /*升压步聚 1*/
rt_thread_mdelay(5);
transfer_command(0x2e); /*升压步聚 2*/
rt_thread_mdelay(5);
transfer_command(0x2f); /*升压步聚 3*/
rt_thread_mdelay(5);
transfer_command(0x24); /*粗调对比度,可设置范围 0x20~0x27*/
transfer_command(0x81); /*微调对比度*/
transfer_command(0x1a); /*0x1a,微调对比度的值,可设置范围 0x00~0x3f*/
transfer_command(0xa3); /*1/9 偏压比(bias)*/
transfer_command(0xc8); /*行扫描顺序:从下到上*/
transfer_command(0xa0); /*列扫描顺序:从右到左*/
transfer_command(0x60); /*起始行:第一行开始*/
transfer_command(0xaf); /*开显示*/
rt_pin_write(MCU_DSP_CS0, PIN_HIGH);
}
static void ScreenDeal_thread(void* parameter)
{
char str[64];
initial_lcd(); //lcd初始化
clear_screen(); //lcd清屏
while (1)
{
sprintf(str, "%s ", "wuyoheihei~!!");
display_string_5x7(3, 50, str);
rt_thread_mdelay(50);
}
}
void ScreenDealTaskInit(void)
{
rt_thread_t Screen_tid;
Screen_tid = rt_thread_create("scn_ctl", ScreenDeal_thread, RT_NULL, SCREEN_THREAD_STACK, SCREEN_THREAD_PRO, SCREEN_THREAD_TICK);
if (Screen_tid != RT_NULL)
{
rt_thread_startup(Screen_tid);
}
else
{
#if DEBUG_LOG_ENABLE
rt_kprintf("/--> Screen create failed!\n");
#endif
}
}
二十四、在screen_deal.h中这么写
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2025-03-13 Administrator the first version
*/
#ifndef APPLICATIONS_SCREEN_DEAL_SCREEN_DEAL_H_
#define APPLICATIONS_SCREEN_DEAL_SCREEN_DEAL_H_
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#include <Ctype.h>
#include "stdio.h"
#define COL(x, per_word) (x*per_word)
/* screen param */
#define SCREEN_THREAD_STACK 2048
#define SCREEN_THREAD_PRO 16
#define SCREEN_THREAD_TICK 10
/*********************************screen*************************************************/
#define MCU_DSP_CS0 GET_PIN(E, 2)
#define MCU_DSP_RST GET_PIN(E, 3)
#define MCU_DSP_CD GET_PIN(E, 4)
#define MCU_DSP_SCK GET_PIN(E, 5)
#define MCU_DSP_SDA GET_PIN(E, 6)
extern void ScreenDealTaskInit(void);
#endif /* APPLICATIONS_SCREEN_DEAL_SCREEN_DEAL_H_ */