GB2312编码
基本展示:
//显示字符串
lcd_string(0,47,"Shape of 天.",LCD_POLARITY_POS,lcd_test_cache);
//滚动显示
static lcd_roll_t roll;
if(initFlag == 0){
roll.lcd_cache = lcd_test_cache;
roll.roll_index = 0;
roll.spead = 1000;
roll.step = 1;
roll.type = LCD_WORD_TYPE_ASCII16;
roll.x = 1;
roll.y = 16;
roll.x_size = 126;
lcd_roll_display(&roll, "abcdefghizklmnopqrstu天地玄黄宇宙洪荒");
initFlag = 1;
}
lcd_roll_run(&roll);
//画边框
lcd_draw_square(0,0,1,64,LCD_POLARITY_POS,lcd_test_cache);
lcd_draw_square(0,63,128,1,LCD_POLARITY_POS,lcd_test_cache);
lcd_draw_square(0,0,128,1,LCD_POLARITY_POS,lcd_test_cache);
lcd_draw_square(127,0,1,63,LCD_POLARITY_POS,lcd_test_cache);
字库软件
PCtoLCD2002.exe
头文件
/**********************************
* @file st7565_driver.h
* @author yujinjiang
* @date 2024.01.19
* *******************************/
//注意:使用PCtoLCD软件生成字库的时候,使用逐列式
#ifndef __ST_7565_DRIVER_H_
#define __ST_7565_DRIVER_H_
#define LCD_W 128
#define LCD_OFFSET 1
#define LCD_PAGE 8
#define LCD_CMD_DISPLAY_ON 0xAF
#define LCD_CMD_START_LINE 0xC0
#define LCD_CMD_ADC_NORMAL 0xA0
#define LCD_CMD_COM_NORMAL 0xC8
#define LCD_CMD_POWER_CTRL 0x2F
#define LCD_CMD_VOP_MODE 0x81
#define LCD_CMD_VOP_VALUE 30
#define LCD_CMD_DISP_OFF 0xAE
#define LCD_CMD_RESET 0xE2
#define LCD_CMD_COM0 0X60 //设置起始行,40-7F(31shi 60)
#define LCD_CMD_MX 0XA0 //设置SEG方向,正常(S0-S131)是0xa0;反向(S131-S0)是OXA1
#define LCD_CMD_MY 0XC8 //设置COM方向,C0=C0-C63,C8=C63-C0(c8)
#define LCD_CMD_INV 0XA6 //正常显示设为OXA6,反显设为0XA7
#define LCD_CMD_BS 0XA2 //设置偏压,1/65占空比时,1/9时,设为OXA2;1/7时,设为OXA3
#define LCD_CMD_RA 0X25 //设置RA/RB,0X20-0X27
#define LCD_CMD_BL 0X00 //SET BOOSTER LEVEL 4X时设为0,5X时设为1,一般设为0lcd_draw
#include <stdint.h>
#define ROLL_DISPLAY_MAX_SIZE (32)//最多显示汉字数,ASCII * 2
typedef enum {
LCD_POLA_POS,
LCD_POLA_NEG
}lcd_display_polarity_enum_t;
typedef struct {
char *word;
uint8_t data[32];
}lcd_chinese_16_t;
typedef struct {
char *word;
uint8_t data[16];
}lcd_ascii_16_t;
typedef struct {
uint8_t buffer[LCD_PAGE][LCD_W];
uint8_t x_index;
uint8_t y_index;
}lcd_cache_t;
typedef struct {
uint8_t x;//位置横坐标
uint8_t y;//位置纵坐标
uint8_t x_size;//显示区域长度
int spead;//速度0-1000
uint8_t step;//每次步进像素点数
lcd_cache_t *lcd_cache;//对应的缓存区
uint8_t first_index_wait_count;//非设置参数,内部变量
uint8_t data_length;//非设置参数,内部变量
uint8_t data[32 * ROLL_DISPLAY_MAX_SIZE];///非设置参数,内部变量
int roll_index;//非设置参数,内部变量
int counter;//非设置参数,内部变量
}lcd_roll_t;
/***************************************************
* @name lcd_cache_init
* @brief 初始化缓存中所有像素点
* @param pola 像素点极性
* @param lcd_cache LCD缓存
* @return null
***************************************************/
void lcd_cache_init(lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache);
/***************************************************
* @name lcd_cache_update
* @brief 将缓存中所有数据更新到LCD
* @param lcd_cache LCD缓存
* @return null
***************************************************/
void lcd_cache_update(lcd_cache_t *lcd_cache);
/***************************************************
* @name lcd_Init
* @brief 初始化LCD
* @param lcd_cache LCD缓存
* @return null
***************************************************/
void lcd_Init(lcd_cache_t *lcd_cache);
/***************************************************
* @name lcd_clear_all
* @brief 清空/同时清空缓存
* @param pola 像素点极性
* @param lcd_cache LCD缓存
* @return null
***************************************************/
void lcd_clear_all(lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache);
/***************************************************
* @name lcd_string
* @brief 显示字符串到LCD
* @param type 显示字符串类型
* @param x 显示字符串左上角坐标(0~127)
* @param y 显示字符串左上角坐标(0~63)
* @param string 要显示的字符串 比如:"hello world"/"你好",汉字的话,要添加汉字到st7565_data中才能显示。
* @param pola 像素点极性
* @param lcd_cache LCD缓存
* @return null
***************************************************/
void lcd_string(uint8_t x,uint8_t y,char *string,lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache);
/***************************************************
* @name lcd_draw_num
* @brief 显示数字到lcd
* @param type 显示字符串类型
* @param x 显示字符串左上角坐标(0~127)
* @param y 显示字符串左上角坐标(0~63)
* @param number 要显示的数字
* @param pola 像素点极性
* @param lcd_cache LCD缓存
* @return null
***************************************************/
void lcd_draw_num(uint8_t x,uint8_t y,int number,uint8_t size,lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache);
/***************************************************
* @name lcd_draw_square
* @brief 画正方形
* @param x 显示方形左上角左边
* @param y 显示方形左上角坐标
* @param x_size x方向长度(0~127)
* @param y_size y方向长度(0~63)
* @param pola 像素点极性
* @param lcd_cache LCD缓存
* @return null
***************************************************/
void lcd_draw_square(uint8_t x,uint8_t y,uint8_t x_size,uint8_t y_size,lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache);
/***************************************************
* @name lcd_draw_point
* @brief 画点
* @param x 显示方形左上角左边
* @param y 显示方形左上角坐标
* @param x_size x方向长度(0~127)
* @param y_size y方向长度(0~63)
* @param pola 像素点极性
* @param lcd_cache LCD缓存
* @return null
***************************************************/
void lcd_draw_point(uint8_t x,uint8_t y,lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache);
/***************************************************
* @name lcd_roll_display
* @brief 设置滚动显示内容
* @param roll_stru 配置滚动显示
* @param string 要显示的字符串
* @return null
***************************************************/
void lcd_roll_display(lcd_roll_t *roll_stru,char *string);
/***************************************************
* @name lcd_roll_run
* @brief 刷新滚动显示 (10~100ms循环调用,一直刷)
* @return null
***************************************************/
void lcd_roll_run(lcd_roll_t *roll_stru);
/***************************************************
* @name lcd_x_get
* @brief 获取最后lcd显示坐标
* @param lcd_cacsh LCD缓存
* @return x坐标值
***************************************************/
uint8_t lcd_x_get(lcd_cache_t *lcd_cache);
/***************************************************
* @name lcd_y_get
* @brief 获取最后lcd显示坐标
* @param lcd_cacsh LCD缓存
* @return y坐标值
***************************************************/
uint8_t lcd_y_get(lcd_cache_t *lcd_cache);
/***************************************************
* @name lcd_data_get
* @brief 获取最后lcd显示数据
* @param lcd_cacsh LCD缓存
* @return 选定区域数据
***************************************************/
uint8_t lcd_data_get(uint8_t row,uint8_t x,lcd_cache_t *lcd_cache);
#endif
数据文件
/**********************************
* @file st7565_data.h
* @author yujinjiang
* @date 2024.01.19get_bit_1_value
* *******************************/
#ifndef __ST_7565_DATA_H_
#define __ST_7565_DATA_H_
#include "st7565_driver.h"
//取模方式:逐列式
const lcd_chinese_16_t lcd_ch_16x16[] = {
{
.word = "天",
.data = {0x00,0x00,0x80,0x40,0x84,0x40,0x84,0x20,0x84,0x10,0x84,0x08,0x84,0x06,0xFC,0x01,0x84,0x06,0x84,0x08,0x84,0x10,0x84,0x20,0x84,0x40,0x80,0x40,0x00,0x00,0x00,0x00},/*"天"*/
},
{
.word = "地",
.data = {0x00,0x00,0x20,0x10,0x20,0x10,0xFE,0x0F,0x20,0x08,0x40,0x00,0xF8,0x3F,0x40,0x40,0x20,0x40,0xFE,0x4F,0x20,0x40,0x10,0x44,0xF8,0x47,0x00,0x70,0x00,0x00,0x00,0x00},/*"地"*/
},
{
.word = "玄",
.data = {0x00,0x00,0x08,0x00,0x08,0x21,0x88,0x21,0x48,0x31,0x28,0x29,0x1A,0x25,0x0C,0x23,0x08,0x21,0x88,0x20,0x48,0x28,0x08,0x30,0x08,0x60,0x08,0x00,0x00,0x00,0x00,0x00},/*"玄"*/
},
{
.word = "黄",
.data = {0x00,0x00,0x20,0x00,0x28,0x40,0xA8,0x2F,0xA8,0x1A,0xBE,0x0A,0xA8,0x0A,0xE8,0x0F,0xA8,0x0A,0xBE,0x0A,0xA8,0x1A,0xA8,0x2F,0x28,0x40,0x20,0x00,0x00,0x00,0x00,0x00},/*"黄"*/
},
{
.word = "宇",
.data = {0x00,0x00,0x18,0x04,0x08,0x04,0x48,0x04,0x48,0x04,0x48,0x44,0x4A,0x44,0xCC,0x7F,0x48,0x04,0x48,0x04,0x48,0x04,0x48,0x04,0x08,0x04,0x18,0x04,0x00,0x00,0x00,0x00},/*"宇"*/
},
{
.word = "宙",
.data = {0x00,0x00,0x38,0x00,0x88,0x7F,0x88,0x24,0x88,0x24,0x88,0x24,0x8A,0x24,0xEC,0x3F,0x88,0x24,0x88,0x24,0x88,0x24,0x88,0x24,0x88,0x7F,0x38,0x00,0x00,0x00,0x00,0x00},/*"宙"*/
},
{
.word = "洪",
.data = {0x00,0x00,0x20,0x30,0x44,0x0C,0x08,0x03,0x00,0x00,0x00,0x42,0x10,0x22,0xFE,0x1B,0x10,0x02,0x10,0x02,0x10,0x02,0xFE,0x0B,0x10,0x12,0x00,0x62,0x00,0x00,0x00,0x00},/*"洪"*/
},
{
.word = "荒",
.data = {0x00,0x00,0x48,0x00,0x48,0x40,0xC8,0x23,0x5E,0x1A,0x48,0x02,0x68,0x02,0x48,0x7A,0x48,0x02,0x48,0x02,0x5E,0x3A,0x48,0x42,0x48,0x40,0x48,0x60,0x00,0x00,0x00,0x00},/*"荒"*/
},
{
.word = "日",
.data = {0x00,0x00,0x00,0x00,0xFE,0x7F,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00},/*"日"*/
},
{
.word = "月",
.data = {0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x30,0xFE,0x0F,0x22,0x02,0x22,0x02,0x22,0x02,0x22,0x02,0x22,0x02,0x22,0x42,0x22,0x42,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00},/*"月"*/
},
{
.word = "盈",
.data = {0x00,0x00,0x80,0x40,0x42,0x40,0x22,0x7E,0x1E,0x42,0x82,0x42,0x5A,0x7E,0x2A,0x42,0xDA,0x7E,0x12,0x42,0x9A,0x42,0x96,0x7E,0x70,0x40,0x00,0x40,0x00,0x00,0x00,0x00},/*"盈"*/
},
{
.word = "昃",
.data = {0x00,0x00,0x00,0x40,0x00,0x30,0x7C,0x4F,0x54,0x41,0x54,0x21,0x54,0x21,0x54,0x11,0x54,0x0D,0x54,0x11,0x54,0x21,0x7C,0x21,0x00,0x41,0x00,0x40,0x00,0x00,0x00,0x00},/*"昃"*/
},
{
.word = "辰",
.data = {0x00,0x00,0x00,0x40,0xFC,0x3F,0x04,0x01,0x24,0x01,0x24,0x7F,0x24,0x41,0x24,0x21,0x24,0x07,0x24,0x09,0x24,0x11,0x24,0x29,0x04,0x45,0x04,0x41,0x00,0x00,0x00,0x00},/*"辰"*/
},
{
.word = "宿",
.data = {0x00,0x00,0x98,0x00,0x48,0x00,0xE8,0x7F,0x18,0x00,0x08,0x00,0x2A,0x7F,0x2C,0x49,0xA8,0x49,0x68,0x49,0x28,0x49,0x28,0x49,0x28,0x7F,0x18,0x00,0x00,0x00,0x00,0x00},/*"宿"*/
},
{
.word = "列",
.data = {0x00,0x00,0x00,0x02,0x04,0x41,0xC4,0x20,0x3C,0x11,0x24,0x0A,0x24,0x06,0xE4,0x01,0x00,0x00,0x00,0x00,0xF0,0x07,0x00,0x40,0x00,0x40,0xFE,0x7F,0x00,0x00,0x00,0x00},/*"列"*/
},
{
.word = "张",
.data = {0x00,0x00,0xE4,0x03,0x24,0x42,0x24,0x42,0x3C,0x3E,0x80,0x00,0x80,0x00,0xFE,0x7F,0x80,0x20,0xA0,0x10,0x90,0x03,0x88,0x0C,0x84,0x10,0x80,0x20,0x00,0x00,0x00,0x00},/*"张"*/
},
};
const lcd_ascii_16_t lcd_ascii_8x16[] = {
{
.word = "a",
.data = {0x00,0x00,0x00,0x19,0x80,0x24,0x80,0x24,0x80,0x12,0x00,0x3F,0x00,0x20,0x00,0x00},/*"a"*/
},
{
.word = "b",
.data = {0x10,0x00,0xF0,0x3F,0x00,0x11,0x80,0x20,0x80,0x20,0x00,0x11,0x00,0x0E,0x00,0x00},/*"b"*/
},
{
.word = "c",
.data = {0x00,0x00,0x00,0x0E,0x00,0x11,0x80,0x20,0x80,0x20,0x80,0x20,0x00,0x11,0x00,0x00},/*"c"*/
},
{
.word = "d",
.data = {0x00,0x00,0x00,0x1F,0x80,0x20,0x80,0x20,0x80,0x20,0x90,0x10,0xF0,0x3F,0x00,0x20},/*"d"*/
},
{
.word = "e",
.data = {0x00,0x00,0x00,0x1F,0x80,0x24,0x80,0x24,0x80,0x24,0x80,0x24,0x00,0x17,0x00,0x00},/*"e"*/
},
{
.word = "f",
.data = {0x00,0x00,0x80,0x20,0x80,0x20,0xE0,0x3F,0x90,0x20,0x90,0x20,0x20,0x00,0x00,0x00},/*"f"*/
},
{
.word = "g",
.data = {0x00,0x00,0x00,0x6B,0x80,0x94,0x80,0x94,0x80,0x94,0x80,0x93,0x80,0x60,0x00,0x00},/*"g"*/
},
{
.word = "h",
.data = {0x10,0x20,0xF0,0x3F,0x00,0x21,0x80,0x00,0x80,0x00,0x80,0x20,0x00,0x3F,0x00,0x20},/*"h"*/
},
{
.word = "i",
.data = {0x00,0x00,0x80,0x20,0x98,0x20,0x98,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00},/*"i"*/
},
{
.word = "j",
.data = {0x00,0x00,0x80,0x21,0x80,0x30,0x80,0x2C,0x80,0x22,0x80,0x21,0x80,0x30,0x00,0x00},/*"z"*/
},
{
.word = "k",
.data = {0x10,0x20,0xF0,0x3F,0x00,0x24,0x00,0x06,0x80,0x29,0x80,0x30,0x80,0x20,0x00,0x00},/*"k"*/
},
{
.word = "l",
.data = {0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00},/*"l"*/
},
{
.word = "m",
.data = {0x80,0x20,0x80,0x3F,0x80,0x20,0x80,0x00,0x80,0x3F,0x80,0x20,0x80,0x00,0x00,0x3F},/*"m"*/
},
{
.word = "n",
.data = {0x80,0x20,0x80,0x3F,0x00,0x21,0x80,0x00,0x80,0x00,0x80,0x20,0x00,0x3F,0x00,0x20},/*"n"*/
},
{
.word = "o",
.data = {0x00,0x00,0x00,0x1F,0x80,0x20,0x80,0x20,0x80,0x20,0x80,0x20,0x00,0x1F,0x00,0x00},/*"o"*/
},
{
.word = "p",
.data = {0x80,0x80,0x80,0xFF,0x00,0x91,0x80,0x20,0x80,0x20,0x00,0x11,0x00,0x0E,0x00,0x00},/*"p"*/
},
{
.word = "q",
.data = {0x00,0x00,0x00,0x0E,0x00,0x11,0x80,0x20,0x80,0x20,0x00,0x91,0x80,0xFF,0x00,0x80},/*"q"*/
},
{
.word = "r",
.data = {0x80,0x20,0x80,0x20,0x80,0x3F,0x00,0x21,0x80,0x20,0x80,0x00,0x80,0x01,0x00,0x00},/*"r"*/
},
{
.word = "s",
.data = {0x00,0x00,0x00,0x33,0x80,0x24,0x80,0x24,0x80,0x24,0x80,0x24,0x80,0x19,0x00,0x00},/*"s"*/
},
{
.word = "t",
.data = {0x00,0x00,0x80,0x00,0x80,0x00,0xE0,0x1F,0x80,0x20,0x80,0x20,0x00,0x10,0x00,0x00},/*"t"*/
},
{
.word = "u",
.data = {0x80,0x00,0x80,0x1F,0x00,0x20,0x00,0x20,0x00,0x20,0x80,0x10,0x80,0x3F,0x00,0x20},/*"u"*/
},
{
.word = "v",
.data = {0x80,0x00,0x80,0x03,0x80,0x0C,0x00,0x30,0x80,0x0C,0x80,0x03,0x80,0x00,0x00,0x00},/*"v"*/
},
{
.word = "w",
.data = {0x80,0x01,0x80,0x0E,0x00,0x30,0x80,0x0C,0x80,0x07,0x00,0x38,0x80,0x06,0x80,0x01},/*"w"*/
},
{
.word = "x",
.data = {0x00,0x00,0x80,0x20,0x80,0x31,0x80,0x0E,0x00,0x2E,0x80,0x31,0x80,0x20,0x00,0x00},/*"x"*/
},
{
.word = "y",
.data = {0x80,0x00,0x80,0x81,0x80,0x86,0x00,0x78,0x00,0x18,0x80,0x06,0x80,0x01,0x80,0x00},/*"y"*/
},
{
.word = "z",
.data = {0x00,0x00,0x80,0x21,0x80,0x30,0x80,0x2C,0x80,0x22,0x80,0x21,0x80,0x30,0x00,0x00},/*"z"*/
},
{
.word = "A",
.data = {0x00,0x20,0x00,0x3C,0xC0,0x23,0x38,0x02,0xE0,0x02,0x00,0x27,0x00,0x38,0x00,0x20},/*"A"*/
},
{
.word = "B",
.data = {0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x20,0x88,0x20,0x70,0x11,0x00,0x0E,0x00,0x00},/*"B"*/
},
{
.word = "C",
.data = {0xC0,0x07,0x30,0x18,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x10,0x38,0x08,0x00,0x00},/*"C"*/
},
{
.word = "D",
.data = {0x08,0x20,0xF8,0x3F,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00},/*"D"*/
},
{
.word = "E",
.data = {0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x20,0xE8,0x23,0x08,0x20,0x10,0x18,0x00,0x00},/*"E"*/
},
{
.word = "F",
.data = {0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x00,0xE8,0x03,0x08,0x00,0x10,0x00,0x00,0x00},/*"F"*/
},
{
.word = "G",
.data = {0xC0,0x07,0x30,0x18,0x08,0x20,0x08,0x20,0x08,0x22,0x38,0x1E,0x00,0x02,0x00,0x00},/*"G"*/
},
{
.word = "H",
.data = {0x08,0x20,0xF8,0x3F,0x08,0x21,0x00,0x01,0x00,0x01,0x08,0x21,0xF8,0x3F,0x08,0x20},/*"H"*/
},
{
.word = "I",
.data = {0x00,0x00,0x08,0x20,0x08,0x20,0xF8,0x3F,0x08,0x20,0x08,0x20,0x00,0x00,0x00,0x00},/*"I"*/
},
{
.word = "Z",
.data = {0x10,0x20,0x08,0x38,0x08,0x26,0x08,0x21,0xC8,0x20,0x38,0x20,0x08,0x18,0x00,0x00},/*"Z"*/
},
{
.word = "K",
.data = {0x08,0x20,0xF8,0x3F,0x88,0x20,0xC0,0x01,0x28,0x26,0x18,0x38,0x08,0x20,0x00,0x00},/*"K"*/
},
{
.word = "L",
.data = {0x08,0x20,0xF8,0x3F,0x08,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x30,0x00,0x00},/*"L"*/
},
{
.word = "M",
.data = {0x08,0x20,0xF8,0x3F,0xF8,0x01,0x00,0x3E,0xF8,0x01,0xF8,0x3F,0x08,0x20,0x00,0x00},/*"M"*/
},
{
.word = "N",
.data = {0x08,0x20,0xF8,0x3F,0x30,0x20,0xC0,0x00,0x00,0x07,0x08,0x18,0xF8,0x3F,0x08,0x00},/*"N"*/
},
{
.word = "O",
.data = {0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00},/*"O"*/
},
{
.word = "P",
.data = {0x08,0x20,0xF8,0x3F,0x08,0x21,0x08,0x01,0x08,0x01,0x08,0x01,0xF0,0x00,0x00,0x00},/*"P"*/
},
{
.word = "Q",
.data = {0xE0,0x0F,0x10,0x10,0x08,0x28,0x08,0x28,0x08,0x30,0x10,0x50,0xE0,0x4F,0x00,0x00},/*"Q"*/
},
{
.word = "R",
.data = {0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x00,0x88,0x03,0x88,0x0C,0x70,0x30,0x00,0x20},/*"R"*/
},
{
.word = "S",
.data = {0x00,0x00,0x70,0x38,0x88,0x20,0x08,0x21,0x08,0x21,0x08,0x22,0x38,0x1C,0x00,0x00},/*"S"*/
},
{
.word = "T",
.data = {0x18,0x00,0x08,0x00,0x08,0x20,0xF8,0x3F,0x08,0x20,0x08,0x00,0x18,0x00,0x00,0x00},/*"T"*/
},
{
.word = "U",
.data = {0x08,0x00,0xF8,0x1F,0x08,0x20,0x00,0x20,0x00,0x20,0x08,0x20,0xF8,0x1F,0x08,0x00},/*"U"*/
},
{
.word = "V",
.data = {0x08,0x00,0x78,0x00,0x88,0x07,0x00,0x38,0x00,0x0E,0xC8,0x01,0x38,0x00,0x08,0x00},/*"V"*/
},
{
.word = "W",
.data = {0x08,0x00,0xF8,0x03,0x00,0x3E,0xF8,0x01,0x00,0x3E,0xF8,0x03,0x08,0x00,0x00,0x00},/*"W"*/
},
{
.word = "X",
.data = {0x08,0x20,0x18,0x30,0x68,0x2C,0x80,0x03,0x80,0x03,0x68,0x2C,0x18,0x30,0x08,0x20},/*"X"*/
},
{
.word = "Y",
.data = {0x08,0x00,0x38,0x00,0xC8,0x20,0x00,0x3F,0xC8,0x20,0x38,0x00,0x08,0x00,0x00,0x00},/*"Y"*/
},
{
.word = "Z",
.data = {0x10,0x20,0x08,0x38,0x08,0x26,0x08,0x21,0xC8,0x20,0x38,0x20,0x08,0x18,0x00,0x00},/*"Z"*/
},
{
.word = "1",
.data = {0x00,0x00,0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00},/*"1"*/
},
{
.word = "2",
.data = {0x00,0x00,0x70,0x30,0x08,0x28,0x08,0x24,0x08,0x22,0x08,0x21,0xF0,0x30,0x00,0x00},/*"2"*/
},
{
.word = "3",
.data = {0x00,0x00,0x30,0x18,0x08,0x20,0x08,0x21,0x08,0x21,0x88,0x22,0x70,0x1C,0x00,0x00},/*"3"*/
},
{
.word = "4",
.data = {0x00,0x00,0x00,0x06,0x80,0x05,0x40,0x24,0x30,0x24,0xF8,0x3F,0x00,0x24,0x00,0x24},/*"4"*/
},
{
.word = "5",
.data = {0x00,0x00,0xF8,0x19,0x88,0x20,0x88,0x20,0x88,0x20,0x08,0x11,0x08,0x0E,0x00,0x00},/*"5"*/
},
{
.word = "6",
.data = {0x00,0x00,0xE0,0x0F,0x10,0x11,0x88,0x20,0x88,0x20,0x90,0x20,0x00,0x1F,0x00,0x00},/*"6"*/
},
{
.word = "7",
.data = {0x00,0x00,0x18,0x00,0x08,0x00,0x08,0x3E,0x88,0x01,0x68,0x00,0x18,0x00,0x00,0x00},/*"7"*/
},
{
.word = "8",
.data = {0x00,0x00,0x70,0x1C,0x88,0x22,0x08,0x21,0x08,0x21,0x88,0x22,0x70,0x1C,0x00,0x00},/*"8"*/
},
{
.word = "9",
.data = {0x00,0x00,0xF0,0x01,0x08,0x12,0x08,0x22,0x08,0x22,0x10,0x11,0xE0,0x0F,0x00,0x00},/*"9"*/
},
{
.word = "0",
.data = {0x00,0x00,0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00},/*"0"*/
},
{
.word = "~",
.data = {0x00,0x00,0x02,0x00,0x01,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x02,0x00,0x00,0x00},/*"~"*/
},
{
.word = "`",
.data = {0x00,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`"*/
},
{
.word = "!",
.data = {0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"!"*/
},
{
.word = "@",
.data = {0xC0,0x07,0x30,0x18,0xC8,0x27,0x28,0x28,0xE8,0x2F,0x10,0x28,0xE0,0x17,0x00,0x00},/*"@"*/
},
{
.word = "$",
.data = {0x00,0x00,0x70,0x18,0x88,0x20,0x88,0x20,0xFC,0xFF,0x08,0x21,0x30,0x1E,0x00,0x00},/*"$"*/
},
{
.word = "%",
.data = {0xF0,0x00,0x08,0x31,0xF0,0x0C,0x80,0x03,0x60,0x1E,0x18,0x21,0x00,0x1E,0x00,0x00},/*"%"*/
},
{
.word = "^",
.data = {0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x00,0x00,0x00,0x00},/*"^"*/
},
{
.word = "&",
.data = {0x00,0x1E,0xF0,0x21,0x08,0x23,0x88,0x2C,0x70,0x19,0x00,0x27,0x00,0x21,0x00,0x10},/*"&"*/
},
{
.word = "*",
.data = {0x40,0x02,0x40,0x02,0x80,0x01,0xF0,0x0F,0x80,0x01,0x40,0x02,0x40,0x02,0x00,0x00},/*"*"*/
},
{
.word = "(",
.data = {0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x18,0x18,0x04,0x20,0x02,0x40,0x00,0x00},/*"("*/
},
{
.word = ")",
.data = {0x00,0x00,0x02,0x40,0x04,0x20,0x18,0x18,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00},/*")"*/
},
{
.word = "_",
.data = {0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80},/*"_"*/
},
{
.word = "-",
.data = {0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00},/*"-"*/
},
{
.word = "+",
.data = {0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0xE0,0x0F,0x00,0x01,0x00,0x01,0x00,0x01},/*"+"*/
},
{
.word = "=",
.data = {0x00,0x00,0x40,0x02,0x40,0x02,0x40,0x02,0x40,0x02,0x40,0x02,0x40,0x02,0x00,0x00},/*"="*/
},
{
.word = "{",
.data = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFC,0x3E,0x02,0x40,0x02,0x40},/*"{"*/
},
{
.word = "[",
.data = {0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0x02,0x40,0x02,0x40,0x02,0x40,0x00,0x00},/*"["*/
},
{
.word = "}",
.data = {0x02,0x40,0x02,0x40,0xFC,0x3E,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}"*/
},
{
.word = "]",
.data = {0x00,0x00,0x02,0x40,0x02,0x40,0x02,0x40,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00},/*"]"*/
},
{
.word = "|",
.data = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00},/*"|"*/
},
{
.word = "'\'",
.data = {0x00,0x00,0x04,0x00,0x38,0x00,0xC0,0x01,0x00,0x06,0x00,0x38,0x00,0xC0,0x00,0x00},/*"\"*/
},
{
.word = ":",
.data = {0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0xC0,0x30,0x00,0x00,0x00,0x00,0x00,0x00},/*":"*/
},
{
.word = ";",
.data = {0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*";"*/
},
{
.word = "\"",
.data = {0x00,0x00,0x10,0x00,0x0C,0x00,0x02,0x00,0x10,0x00,0x0C,0x00,0x02,0x00,0x00,0x00},/*"""*/
},
{
.word = "'",
.data = {0x00,0x00,0x12,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'"*/
},
{
.word = "<",
.data = {0x00,0x00,0x00,0x01,0x80,0x02,0x40,0x04,0x20,0x08,0x10,0x10,0x08,0x20,0x00,0x00},/*"<"*/
},
{
.word = ",",
.data = {0x00,0x00,0x00,0x90,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*","*/
},
{
.word = ">",
.data = {0x00,0x00,0x08,0x20,0x10,0x10,0x20,0x08,0x40,0x04,0x80,0x02,0x00,0x01,0x00,0x00},/*">"*/
},
{
.word = ".",
.data = {0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"."*/
},
{
.word = "?",
.data = {0x00,0x00,0x70,0x00,0x48,0x00,0x08,0x30,0x08,0x37,0x88,0x00,0x70,0x00,0x00,0x00},/*"?"*/
},
{
.word = "/",
.data = {0x00,0x00,0x00,0x60,0x00,0x18,0x00,0x07,0xC0,0x00,0x38,0x00,0x04,0x00,0x00,0x00},/*"/"*/
},
{
.word = " ",
.data = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" "*/
},
};
#endif
C文件
/**********************************
* @file st7565_driver.c
* @author yujinjiang
* @date 2024.01.19
* *******************************/
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include "hc32f460keta.h"
#include "hc32f460_gpio.h"
#include "hc32f460_clk.h"
#include "hc32f460_utility.h"
#include "hc32f460_spi.h"
#include "hc32f460_pwc.h"
#include "chip-def.h"
#include "st7565_driver.h"
#include "st7565_data.h"
void lcd_xy_set(uint8_t row,uint8_t col);
uint8_t lcd_draw(uint8_t x, uint8_t y, uint8_t x_size, uint8_t y_size, uint8_t *data,lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache);
void lcd_write_16x16(uint8_t x,uint8_t y,uint8_t *hz,lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache);
void lcd_write_8x16(uint8_t x,uint8_t y,uint8_t *hz,lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache);
void lcd_cache_init(lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache)
{
memset(lcd_cache,(pola == LCD_POLA_POS)?0xff:0x00,sizeof(lcd_cache_t));
}
static void lcd_spi_init(void)
{
//gpio init
stc_port_init_t stcPortInit;
memset(&stcPortInit,0,sizeof(stc_port_init_t));
stcPortInit.enPinMode = Pin_Mode_Out;
stcPortInit.enPinOType = Pin_OType_Cmos;
stcPortInit.enExInt = Enable;
stcPortInit.enPullUp = Enable;
PORT_Init(LCD_A0_PORT, LCD_A0_PIN, &stcPortInit);
PORT_Init(LCD_RESET_PORT, LCD_RESET_PIN, &stcPortInit);
PORT_Init(LCD_BACK_LIGHT_PORT, LCD_BACK_LIGHT_PIN, &stcPortInit);
PORT_ResetBits(LCD_BACK_LIGHT_PORT, LCD_BACK_LIGHT_PIN);//点亮背光
//spi init
stc_spi_init_t stcSpiInit;
/* configuration structure initialization */
MEM_ZERO_STRUCT(stcSpiInit);
/* Configuration peripheral clock */
PWC_Fcg1PeriphClockCmd(PWC_FCG1_PERIPH_SPI1, Enable);
/* Configuration SPI pin */
PORT_SetFunc(LCD_SPI_CS_PORT, LCD_SPI_CS_PIN, Func_Spi1_Nss0, Disable);
PORT_SetFunc(LCD_SPI_SCK_PORT, LCD_SPI_SCK_PIN, Func_Spi1_Sck, Disable);
PORT_SetFunc(LCD_SPI_MOSI_PORT, LCD_SPI_MOSI_PIN, Func_Spi1_Mosi, Disable);
/* Configuration SPI structure */
stcSpiInit.enClkDiv = SpiClkDiv8;
stcSpiInit.enFrameNumber = SpiFrameNumber1;
stcSpiInit.enDataLength = SpiDataLengthBit8;
stcSpiInit.enFirstBitPosition = SpiFirstBitPositionMSB;
stcSpiInit.enSckPolarity = SpiSckIdleLevelLow;//CPOL = 0
stcSpiInit.enSckPhase = SpiSckOddSampleEvenChange;//CPHA = 0
stcSpiInit.enReadBufferObject = SpiReadReceiverBuffer;
stcSpiInit.enWorkMode = SpiWorkMode4Line;
stcSpiInit.enTransMode = SpiTransOnlySend;
stcSpiInit.enCommAutoSuspendEn = Disable;
stcSpiInit.enModeFaultErrorDetectEn = Disable;
stcSpiInit.enParitySelfDetectEn = Disable;
stcSpiInit.enParityEn = Disable;
stcSpiInit.enParity = SpiParityEven;
stcSpiInit.enMasterSlaveMode = SpiModeMaster;
SPI_Init(LCD_SPI_UNIT, &stcSpiInit);
SPI_Cmd(LCD_SPI_UNIT, Enable);
}
static void lcd_command_write(uint8_t data)
{
PORT_ResetBits(LCD_A0_PORT,LCD_A0_PIN);
SPI_SendData8(LCD_SPI_UNIT,data);
while (Reset == SPI_GetFlag(LCD_SPI_UNIT, SpiFlagSendBufferEmpty));
}
static void lcd_data_write(uint8_t data)
{
PORT_SetBits(LCD_A0_PORT,LCD_A0_PIN);
SPI_SendData8(LCD_SPI_UNIT,data);
while (Reset == SPI_GetFlag(LCD_SPI_UNIT, SpiFlagSendBufferEmpty));
}
void lcd_Init(lcd_cache_t *lcd_cache)
{
//LCD_SPI_INIT
lcd_spi_init();
//LCD_RESET
PORT_ResetBits(LCD_RESET_PORT,LCD_RESET_PIN);
Ddl_Delay1ms(25);
PORT_SetBits(LCD_RESET_PORT,LCD_RESET_PIN);
Ddl_Delay1ms(25);
//LCD
lcd_command_write(LCD_CMD_RESET); //Reset
Ddl_Delay1ms(2);
lcd_command_write(LCD_CMD_DISP_OFF); //DISP OFF
lcd_command_write(LCD_CMD_COM0); //DISP START LINE SET 40-7F(31shi 60)
lcd_command_write(LCD_CMD_BS); //LCD Bias Set,A2=1/9,A3=1/7
lcd_command_write(LCD_CMD_MX); //Segment Driver Direction Select A0=NORMAL,A1=REVERSE(a0)
lcd_command_write(LCD_CMD_MY); //Common Output Mode Select,C0=C0-C63,C8=C63-C0(c8)
lcd_command_write(LCD_CMD_INV); //Display Normal/Reverse,A6=NORMAL,A7=REVERSE
lcd_command_write(LCD_CMD_RA); //V0 Voltage Regulator Internal Resistor Ratio Set, Rb/Ra Ratio 20-27
lcd_command_write(LCD_CMD_VOP_MODE); //VOP SET
lcd_command_write(LCD_CMD_VOP_VALUE); //00-3F
lcd_command_write(0xf8); //Booster Ratio Select Mode Set
lcd_command_write(0xBL); //Booster ratio select00=2X,3X,4X 01=5X 03=6X
lcd_command_write(0xa4); //Display All Points ON/OFF ,A4=NORMAL display mode,A5=Display all points ON
lcd_command_write(LCD_CMD_POWER_CTRL); //Power Controller Set
lcd_command_write(LCD_CMD_DISPLAY_ON); //DISP ON
lcd_cache_init(LCD_POLA_NEG,lcd_cache);
lcd_clear_all(LCD_POLA_POS,lcd_cache);
lcd_clear_all(LCD_POLA_NEG,lcd_cache);
}
static void lcd_xy_set(uint8_t row,uint8_t col)
{
uint8_t cbyte;
cbyte=row;
cbyte=cbyte | 0XB0; /* 合成命令 */
lcd_command_write(cbyte); /* 写入页地址 */
cbyte =(((col+LCD_OFFSET)>>4) | 0X10); /* 合成命令 */ //EXCURSION 为地址修正,从SO开始为0,S1开始为1
lcd_command_write(cbyte); /*写入列地址的高4位*/
cbyte =(((col+LCD_OFFSET) & 0x0F) | 0X00); /* 合成命令 */
lcd_command_write(cbyte); /* 写入列地址的低4位 */
}
/********************************** lcd function **************************************/
void lcd_clear_all(lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache)
{
lcd_cache_init(pola,lcd_cache);
for(int i = 0;i < LCD_PAGE;i++){
lcd_xy_set(i,0); /* 写入页首地址 */
for (int j = 0; j < LCD_W; j++)
{
lcd_data_write((pola == LCD_POLA_POS)?0xff:0x00);
}
}
}
void lcd_write_16x16(uint8_t x,uint8_t y,uint8_t *hz,lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache)
{
lcd_draw(x,y,16,16,hz,pola,lcd_cache);
}
void lcd_write_8x16(uint8_t x,uint8_t y,uint8_t *hz,lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache)
{
lcd_draw(x,y,8,16,hz,pola,lcd_cache);
}
uint8_t *lcd_find_ch16(char *word)
{
for (uint32_t i = 0; i < sizeof(lcd_ch_16x16)/sizeof(lcd_chinese_16_t); i++)
{
if((memcmp(word,lcd_ch_16x16[i].word,strlen("字"))) == 0){
return (uint8_t *)lcd_ch_16x16[i].data;
}
}
return (uint8_t *)lcd_ch_16x16[0].data;
}
uint8_t *lcd_find_ascii16(char *word)
{
for (uint32_t i = 0; i < sizeof(lcd_ascii_8x16)/sizeof(lcd_ascii_16_t); i++)
{
if((memcmp(word,lcd_ascii_8x16[i].word,strlen("A"))) == 0){
return (uint8_t *)lcd_ascii_8x16[i].data;
}
}
return (uint8_t *)lcd_ascii_8x16[0].data;
}
void lcd_string(uint8_t x,uint8_t y,char *string,lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache)
{
for(int i = 0;string[i] != 0;){
if((string[i] & 0x80) == 0){//非汉字
lcd_write_8x16(x + 8 * i,y,lcd_find_ascii16(&string[i]),pola,lcd_cache);
i++;
}
else{//汉字
lcd_write_16x16(x + 8 * i,y,lcd_find_ch16(&string[i]),pola,lcd_cache);
i+=2;
}
}
}
void lcd_draw_square(uint8_t x,uint8_t y,uint8_t x_size,uint8_t y_size,lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache)
{
lcd_draw(x,y,x_size,y_size,0,pola,lcd_cache);
}
void lcd_draw_point(uint8_t x,uint8_t y,lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache)
{
lcd_draw(x,y,1,1,0,pola,lcd_cache);
}
void lcd_cache_update(lcd_cache_t *lcd_cache)
{
for (int i = 0; i < LCD_PAGE; i++) {//扫行
lcd_xy_set(i, 0);
for (int j = 0; j < LCD_W; j++) {//扫列
lcd_data_write(lcd_cache->buffer[i][j]);
}
}
}
void lcd_draw_num(uint8_t x,uint8_t y,int number,uint8_t size,lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache)
{
char string[6];
string[0] = (char)(number/10000 + 0x30);
string[1] = (char)(number%10000/1000 + 0x30);
string[2] = (char)(number%1000/100 + 0x30);
string[3] = (char)(number%100/10 + 0x30);
string[4] = (char)(number%10 + 0x30);
string[5] = '\0';
lcd_string(x,y,&string[5 - size],pola,lcd_cache);
}
void lcd_roll_display(lcd_roll_t *roll_stru,char *string)
{
roll_stru->counter = 0;
roll_stru->roll_index = 0;
roll_stru->first_index_wait_count = 0;
//将数据提出装入数组
int i = 0;
for(i = 0;string[i] != 0;){
if((string[i] & 0x80) == 0){//非汉字
memcpy(&roll_stru->data[i*16],lcd_find_ascii16(&string[i]),16);
i++;
}
else{//汉字
memcpy(&roll_stru->data[i*16],lcd_find_ch16(&string[i]),32);
i+=2;
}
}
roll_stru->data_length = i;
}
void lcd_roll_run(lcd_roll_t *roll_stru)
{
roll_stru->counter += roll_stru->spead;
if(1000 <= roll_stru->counter){
roll_stru->counter = 0;
if(roll_stru->roll_index == 0)roll_stru->first_index_wait_count++;
lcd_draw(roll_stru->x,roll_stru->y,roll_stru->x_size,16,roll_stru->data + roll_stru->roll_index*2,LCD_POLA_POS,roll_stru->lcd_cache);
if(roll_stru->first_index_wait_count > 3)roll_stru->roll_index += roll_stru->step;
if(roll_stru->roll_index > roll_stru->data_length*8){
roll_stru->roll_index = 0;
roll_stru->first_index_wait_count = 0;
}
}
}
static uint8_t lcd_draw(uint8_t x, uint8_t y, uint8_t x_size, uint8_t y_size, uint8_t *data,lcd_display_polarity_enum_t pola,lcd_cache_t *lcd_cache)
{
int row_start = y / 8;
int row_end = (y + y_size - 1) / 8;
int write_data_bit_index = 0;
uint8_t old_cache_data = 0;
lcd_cache->x_index = x + x_size - 1;
lcd_cache->y_index = y + y_size - 1;
for (int i = x; i < x + x_size; i++) {//扫行
for (int j = row_start; j <= row_end; j++) {//扫列
int bit_start = (y < (j * 8)) ? 0 : y % 8;
int bit_end = ((y + y_size - 1) > ((j + 1) * 8 - 1)) ? 7 : (y + y_size - 1) % 8;
old_cache_data = lcd_cache->buffer[j][i];
for (int k = bit_start; k <= bit_end; k++) {//写数据
char get_data = data[write_data_bit_index / 8];
if(data == 0){
get_data = (pola == LCD_POLA_NEG)?0x00:0xff;
}
else{
if(pola == LCD_POLA_NEG)get_data = ~data[write_data_bit_index / 8];
}
lcd_cache->buffer[j][i] &= ~(1 << k);
lcd_cache->buffer[j][i] |= ((get_data>> (write_data_bit_index % 8)) & 1) << k;
write_data_bit_index++;
}
if(old_cache_data != lcd_cache->buffer[j][i]){//需要更新
lcd_xy_set(j, i);
lcd_data_write(lcd_cache->buffer[j][i]);
}
}
}
return 1;
}
uint8_t lcd_x_get(lcd_cache_t *lcd_cache)
{
return lcd_cache->x_index;
}
uint8_t lcd_y_get(lcd_cache_t *lcd_cache)
{
return lcd_cache->y_index;
}
uint8_t lcd_data_get(uint8_t row,uint8_t x,lcd_cache_t *lcd_cache)
{
return lcd_cache->buffer[row][x];
}
/********************************** lcd test case **************************************/
#if 0
void lcd_test_case_run(lcd_cache_t *lcd_test_cache,char *string_ascii)
{
static uint8_t i = 0;
if(i < 4){
i++;
}
else{
i = 5;
}
switch (i)
{
case 1:
//清屏
lcd_clear_all(LCD_POLA_NEG,lcd_test_cache);
break;
case 2:
//文字
lcd_string(0,0,"天地玄黄宇宙洪荒",LCD_POLA_POS,lcd_test_cache);
lcd_draw(16 * 0, 40-10,16,16,lcd_find_ch16("日"),LCD_POLA_NEG,lcd_test_cache);
lcd_draw(16 * 1, 38-10,16,16,lcd_find_ch16("月"),LCD_POLA_NEG,lcd_test_cache);
lcd_draw(16 * 2, 36-10,16,16,lcd_find_ch16("盈"),LCD_POLA_NEG,lcd_test_cache);
lcd_draw(16 * 3, 34-10,16,16,lcd_find_ch16("昃"),LCD_POLA_NEG,lcd_test_cache);
lcd_draw(16 * 4, 32-10,16,16,lcd_find_ch16("辰"),LCD_POLA_NEG,lcd_test_cache);
lcd_draw(16 * 5, 30-10,16,16,lcd_find_ch16("宿"),LCD_POLA_NEG,lcd_test_cache);
lcd_draw(16 * 6, 28-10,16,16,lcd_find_ch16("列"),LCD_POLA_NEG,lcd_test_cache);
lcd_draw(16 * 7, 26-10,16,16,lcd_find_ch16("张"),LCD_POLA_NEG,lcd_test_cache);
lcd_draw_num(88,34,12345,5,LCD_POLA_POS,lcd_test_cache);
break;
case 3:
//画边框
lcd_draw_square(0,0,1,64,LCD_POLA_POS,lcd_test_cache);
lcd_draw_square(0,63,128,1,LCD_POLA_POS,lcd_test_cache);
lcd_draw_square(0,0,128,1,LCD_POLA_POS,lcd_test_cache);
lcd_draw_square(127,0,1,63,LCD_POLA_POS,lcd_test_cache);
break;
case 4:
break;
case 5:
lcd_string(1,47,string_ascii,LCD_POLA_POS,lcd_test_cache);
break;
default:
break;
}
}
//static lcd_roll_t roll2;
void lcd_test_case2_run(lcd_cache_t *lcd_test_cache)
{
static int initFlag = 0;
static lcd_roll_t roll;
if(initFlag == 0){
roll.lcd_cache = lcd_test_cache;
roll.roll_index = 0;
roll.spead = 1000;
roll.step = 1;
roll.x = 1;
roll.y = 16;
roll.x_size = 126;
lcd_roll_display(&roll, "ABCDEFGHIZKLMNOPQRSTUVWXYZabcdefghizklmnopqrstuvwxyz1234567890");
initFlag = 1;
}
lcd_roll_run(&roll);
// static int initFlag2 = 0;
// if(initFlag2 == 0){
// roll2.lcd_cache = lcd_test_cache;
// roll2.roll_index = 0;
// roll2.spead = 1000;
// roll2.step = 1;
// roll2.x = 1;
// roll2.y = 32;
// roll2.x_size = 128;
// lcd_roll_display(&roll2, "abcdefghizklmnopqrstuvwxyzABCDEFGHIZKLMNOPQRSTUVWXYZ1234567890");
// initFlag2 = 1;
// }
// lcd_roll_run(&roll2);
}
#endif //CHIP_DEBUG