• 4.合宙Air32F103_LCD


    一、简介

    1.1本章目的

    在上一章已经实现串口不定长接收帧的基础上,完成LCD相关的显示功能,使用串口发送任意字符串,在LCD屏幕上进行显示。

    显示相关需要完成的内容包括:

    1. 英文字符、中文汉字、画图等基础显示函数
    2. 画图、画线、画圆等GUI

    1.2LCD模块

    LCD模块也是合宙的LCD扩展板,分辨率是160*80的,驱动是ST7735,这款屏之前在启光电子的STM32F103高级版C8开发板上见过,所以相关的控制函数将主要移植自启光的相关例程,对其进行简单优化。
    在这里插入图片描述

    二、例程移植

    打开合宙的SPI文件夹,里面含有LCD的例程:ModuleDemo\SPI\SPI_Air10x_LCD\USER\SPI.uvprojx。
    在这里插入图片描述
    打开启光电子的相关例程:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mu9PIuqZ-1658585522317)(C:\Users\wuzjjj\AppData\Roaming\Typora\typora-user-images\image-20220723212738198.png)]

    三、移植

    3.1st7735v.c

    主要包括底层的驱动:引脚初始化、SPI初始化、SPI读写、写数据、写命令等函数。方便后面在上层GUI中进行调用。

    #include "st7735v.h" 
    #include "delay.h"
    
    void SPI_WriteByte(u8 TxData) //TxData 可以是8位或16位的,在启用SPI之前就确定好数据帧格式
    {		
    	u8 retry = 0;				 	      
    	while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) //0:发送缓冲非空  等待发送缓冲器变空
    	{
    		retry++;
    		if(retry>200)return;
    	}
    	SPI_I2S_SendData(SPI1, TxData);
    	return;			    
    }
    
    /******************************************************************************
          函数说明:LCD写入数据
          入口数据:dat 写入的数据
          返回值:  无
    ******************************************************************************/
    void LCD_WR_DATA8(u8 dat)
    {
    	LCD_DC_Set();//写数据	
    	SPI_WriteByte(dat);
    }
    
    
    /******************************************************************************
          函数说明:LCD写入数据
          入口数据:dat 写入的数据
          返回值:  无
    ******************************************************************************/
    void LCD_WR_DATA(u16 dat)
    {
    	LCD_DC_Set();//写数据
    	SPI_WriteByte(dat>>8);
    	SPI_WriteByte(dat);
    }
    
    
    /******************************************************************************
          函数说明:LCD写入命令
          入口数据:dat 写入的命令
          返回值:  无
    ******************************************************************************/
    void LCD_WR_REG(u8 dat)
    {
    	LCD_DC_Clr();//写命令
    	SPI_WriteByte(dat);
    }
    
    
    /******************************************************************************
          函数说明:设置起始和结束地址
          入口数据:x1,x2 设置列的起始和结束地址
                    y1,y2 设置行的起始和结束地址
          返回值:  无
    ******************************************************************************/
    void LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2)
    {
    	LCD_CS_Clr();  //打开屏幕片选
    	if(USE_HORIZONTAL==0)
    	{
    		LCD_WR_REG(0x2a);//列地址设置
    		LCD_WR_DATA(x1+LCD_OFFSET_X);
    		LCD_WR_DATA(x2+LCD_OFFSET_X);
    		LCD_WR_REG(0x2b);//行地址设置
    		LCD_WR_DATA(y1+LCD_OFFSET_Y);
    		LCD_WR_DATA(y2+LCD_OFFSET_Y);
    		LCD_WR_REG(0x2c);//储存器写
    	}
    	else if(USE_HORIZONTAL==1)
    	{
    		LCD_WR_REG(0x2a);//列地址设置
    		LCD_WR_DATA(x1+LCD_OFFSET_X);
    		LCD_WR_DATA(x2+LCD_OFFSET_X);
    		LCD_WR_REG(0x2b);//行地址设置
    		LCD_WR_DATA(y1+LCD_OFFSET_Y);
    		LCD_WR_DATA(y2+LCD_OFFSET_Y);
    		LCD_WR_REG(0x2c);//储存器写
    	}
    	else if(USE_HORIZONTAL==2)
    	{
    		LCD_WR_REG(0x2a);//列地址设置
    		LCD_WR_DATA(x1+LCD_OFFSET_X);
    		LCD_WR_DATA(x2+LCD_OFFSET_X);
    		LCD_WR_REG(0x2b);//行地址设置
    		LCD_WR_DATA(y1+LCD_OFFSET_Y);
    		LCD_WR_DATA(y2+LCD_OFFSET_Y);
    		LCD_WR_REG(0x2c);//储存器写
    	}
    	else
    	{
    		LCD_WR_REG(0x2a);//列地址设置
    		LCD_WR_DATA(x1+LCD_OFFSET_X);
    		LCD_WR_DATA(x2+LCD_OFFSET_X);
    		LCD_WR_REG(0x2b);//行地址设置
    		LCD_WR_DATA(y1+LCD_OFFSET_Y);
    		LCD_WR_DATA(y2+LCD_OFFSET_Y);
    		LCD_WR_REG(0x2c);//储存器写
    	}
    	LCD_CS_Set();  //关闭屏幕片选
    }
    
    void SPI1_Init(void)
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    	SPI_InitTypeDef  SPI_InitStructure;
    	
    	RCC_APB2PeriphClockCmd(	RCC_APB2Periph_GPIOA, ENABLE );//PORT时钟使能 
    	RCC_APB2PeriphClockCmd(	RCC_APB2Periph_SPI1,  ENABLE );//SPI时钟使能 	
    
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出 
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO
    
    	GPIO_SetBits(GPIOA,GPIO_Pin_5 | GPIO_Pin_7);
    
    	SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
    	SPI_InitStructure.SPI_Mode = SPI_Mode_Master;		//设置SPI工作模式:设置为主SPI
    	SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;		//设置SPI的数据大小:SPI发送接收8位帧结构
    	SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;		//串行同步时钟的空闲状态为低电平
    	SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;	//串行同步时钟的第一个跳变沿(上升或下降)数据被采样
    	SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;		//NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
    	SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;		//定义波特率预分频的值:波特率预分频值为256
    	SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;	//指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
    	SPI_InitStructure.SPI_CRCPolynomial = 0;
    	SPI_Init(SPI1, &SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器
    
    	SPI_Cmd(SPI1, ENABLE); //使能SPI外设
    }   
    //SPI 速度设置函数
    //SpeedSet:
    //SPI_BaudRatePrescaler_2   2分频   
    //SPI_BaudRatePrescaler_8   8分频   
    //SPI_BaudRatePrescaler_16  16分频  
    //SPI_BaudRatePrescaler_256 256分频 
    void SPI_SetSpeed(u8 SPI_BaudRatePrescaler)
    {
    	assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));
    	SPI1->CR1&=0XFFC7;
    	SPI1->CR1|=SPI_BaudRatePrescaler;
    	SPI_Cmd(SPI1,ENABLE); 
    }
    
    void ST7735V_GPIO_Init(void)
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    	RCC_APB2PeriphClockCmd(	RCC_APB2Periph_GPIOA, ENABLE );
    
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_6; 
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOA, &GPIO_InitStructure);
    	GPIO_SetBits(GPIOA,GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_6);
    
    	SCREEN_CS_1;
    }
    
    //屏幕初始化
    void ST7735V_Init(void)
    {
    	ST7735V_GPIO_Init();
    	SPI1_Init();		   	//初始化SPI
    	SPI_SetSpeed(SPI_BaudRatePrescaler_2);
    
    	SCREEN_BL_0;
    
    	SCREEN_DC_1;
    	SCREEN_RST_0;
    	delay_ms(100);
    	SCREEN_RST_1;
    	delay_ms(120);
    
    	SCREEN_CS_0;
    	LCD_WR_REG(0x11);
    
    	delay_ms(120);//ms
    
    	LCD_WR_REG(0x20);//lcd_inv_off如果颜色错了就用0x21
    
    	LCD_WR_REG(0xB1);
    	LCD_WR_DATA8(0x05);
    	LCD_WR_DATA8(0x3A);
    	LCD_WR_DATA8(0x3A);
    
    	LCD_WR_REG(0xB2);
    	LCD_WR_DATA8(0x05);
    	LCD_WR_DATA8(0x3A);
    	LCD_WR_DATA8(0x3A);
    
    	LCD_WR_REG(0xB3);
    	LCD_WR_DATA8(0x05);
    	LCD_WR_DATA8(0x3A);
    	LCD_WR_DATA8(0x3A);
    	LCD_WR_DATA8(0x05);
    	LCD_WR_DATA8(0x3A);
    	LCD_WR_DATA8(0x3A);
    
    	LCD_WR_REG(0xB4);//Dotinversion
    	LCD_WR_DATA8(0x03);
    
    	LCD_WR_REG(0xC0);
    	LCD_WR_DATA8(0x62);
    	LCD_WR_DATA8(0x02);
    	LCD_WR_DATA8(0x04);
    
    	LCD_WR_REG(0xC1);
    	LCD_WR_DATA8(0xC0);
    
    	LCD_WR_REG(0xC2);
    	LCD_WR_DATA8(0x0D);
    	LCD_WR_DATA8(0x00);
    
    	LCD_WR_REG(0xC3);
    	LCD_WR_DATA8(0x8D);
    	LCD_WR_DATA8(0x6A);
    
    	LCD_WR_REG(0xC4);
    	LCD_WR_DATA8(0x8D);
    	LCD_WR_DATA8(0xEE);
    
    	LCD_WR_REG(0xC5);//VCOM
    	LCD_WR_DATA8(0x0E);
    
    	LCD_WR_REG(0xE0);
    	LCD_WR_DATA8(0x10);
    	LCD_WR_DATA8(0x0E);
    	LCD_WR_DATA8(0x02);
    	LCD_WR_DATA8(0x03);
    	LCD_WR_DATA8(0x0E);
    	LCD_WR_DATA8(0x07);
    	LCD_WR_DATA8(0x02);
    	LCD_WR_DATA8(0x07);
    	LCD_WR_DATA8(0x0A);
    	LCD_WR_DATA8(0x12);
    	LCD_WR_DATA8(0x27);
    	LCD_WR_DATA8(0x37);
    	LCD_WR_DATA8(0x00);
    	LCD_WR_DATA8(0x0D);
    	LCD_WR_DATA8(0x0E);
    	LCD_WR_DATA8(0x10);
    
    	LCD_WR_REG(0xE1);
    	LCD_WR_DATA8(0x10);
    	LCD_WR_DATA8(0x0E);
    	LCD_WR_DATA8(0x03);
    	LCD_WR_DATA8(0x03);
    	LCD_WR_DATA8(0x0F);
    	LCD_WR_DATA8(0x06);
    	LCD_WR_DATA8(0x02);
    	LCD_WR_DATA8(0x08);
    	LCD_WR_DATA8(0x0A);
    	LCD_WR_DATA8(0x13);
    	LCD_WR_DATA8(0x26);
    	LCD_WR_DATA8(0x36);
    	LCD_WR_DATA8(0x00);
    	LCD_WR_DATA8(0x0D);
    	LCD_WR_DATA8(0x0E);
    	LCD_WR_DATA8(0x10);
    
    	LCD_WR_REG(0x3A);
    	LCD_WR_DATA8(0x05);
    
    	//direction
    	LCD_WR_REG(0x36);
    	LCD_WR_DATA8(0x78);
    
    	LCD_WR_REG(0x29);
    	delay_ms(100);
    	SCREEN_CS_1;
    	SCREEN_BL_1;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
    • 272
    • 273
    • 274

    3.2st7735.h

    #ifndef __ST7735V_H
    #define __ST7735V_H			    
    #include "air32f10x.h"
    
    //gpio
    #define	SCREEN_CS_0 		GPIO_ResetBits(GPIOA,GPIO_Pin_3)
    #define	SCREEN_DC_0 		GPIO_ResetBits(GPIOA,GPIO_Pin_4)
    #define	SCREEN_RST_0 		GPIO_ResetBits(GPIOA,GPIO_Pin_6)
    #define	SCREEN_BL_0 		GPIO_ResetBits(GPIOA,GPIO_Pin_2)
    #define	SCREEN_CS_1 		GPIO_SetBits(GPIOA,GPIO_Pin_3)
    #define	SCREEN_DC_1 		GPIO_SetBits(GPIOA,GPIO_Pin_4)
    #define	SCREEN_RST_1 		GPIO_SetBits(GPIOA,GPIO_Pin_6)
    #define	SCREEN_BL_1 		GPIO_SetBits(GPIOA,GPIO_Pin_2)
    
    #define USE_HORIZONTAL 2  //设置横屏或者竖屏显示 0或1为竖屏 2或3为横屏
    
    #define LCD_DC_Clr() SCREEN_DC_0//DC  RS
    #define LCD_DC_Set() SCREEN_DC_1
     		     
    #define LCD_CS_Clr()  SCREEN_CS_0//CS
    #define LCD_CS_Set()  SCREEN_CS_1
    
    //screen size
    #if USE_HORIZONTAL==0||USE_HORIZONTAL==1
    #define LCD_W 80
    #define LCD_H 160
    #define LCD_OFFSET_X 24//offset
    #define LCD_OFFSET_Y 0
    
    #else
    #define LCD_W 160
    #define LCD_H 80
    #define LCD_OFFSET_X 0//offset
    #define LCD_OFFSET_Y 24
    #endif
    
    
    
    void SPI_WriteByte(u8 TxData);
    void LCD_Writ_Bus(u8 dat);
    void LCD_WR_DATA8(u8 dat);
    void LCD_WR_DATA(u16 dat);
    void LCD_WR_REG(u8 dat);
    void LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2);
    
    void ST7735V_GPIO_Init(void);
    void ST7735V_Init(void);
    
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    3.3gui.c

    主要包括清屏、画点、画线、画图、英文字符显示、中文汉字显示等。在此基础上又增加了混合显示英文和中文的函数,以及自动换行的函数。

    #include 
    #include 
    #include 
    #include "gui.h"
    #include "delay.h"
    #include "st7735v.h" 
    #include "hz16x16.h"
    #include "zifu8x16.h"
    //#include "picture.h"
    
    
    //清屏函数
    //color是背景颜色。
    //说明:使用背景颜色清除TFT模块屏幕的全部显示内容。
    void GUI_Clear(u16 color)
    {
    	u16 i;
    	LCD_Address_Set(0,0,LCD_W-1,LCD_H-1);
    	LCD_CS_Clr();  //打开屏幕片选
    	for(i=0;i<LCD_W*LCD_H;i++)
    	{
    			LCD_WR_DATA(color);
    	}
    	LCD_CS_Set();  //关闭屏幕片选
    }
    
    //画图
    //p_Data为数据指针,需要传160x80个数据,每个数据2个字节
    void GUI_Pic(u16 *p_data)
    {
    	unsigned int i;
    	LCD_Address_Set(0,0,LCD_W-1,LCD_H-1);
    	LCD_CS_Clr();  	//打开屏幕片选
    	for(i=0;i<LCD_W*LCD_H;i++)//显示以存好的图片数据
    	{
    		LCD_WR_DATA(p_data[i]);
    	}
    	LCD_CS_Set();  //关闭屏幕片选
    }
    
    //画点
    //(x,y)是点的坐标
    //color 是点的颜色。
    //说明:用指定的颜色在指定的坐标位置上画出一个点。
    void GUI_Point(u8 x, u16 y, u16 color)
    {  
    	LCD_Address_Set(x,y,x,y);
    	LCD_CS_Clr();  //打开屏幕片选
    	LCD_WR_DATA(color);
    	LCD_CS_Set();  //关闭屏幕片选
    }
    
    //画直线(可以画任意方向直线,包括横线、竖线、斜线)。
    //(x1,y1)起点, (x2,y2)终点, color颜色。
    //说明:用指定的颜色在指定的两点间画出一条直线。
    void GUI_Line(u16 x1,u16 y1,u16 x2,u16 y2,u16 color)  
    {
    	u16 t;
    	int xerr=0,yerr=0,delta_x,delta_y,distance;
    	int incx,incy;
    	u16 row,col;
    	delta_x = x2-x1;//计算坐标增量
    	delta_y = y2-y1;
    	col=x1;
    	row=y1;
    	if(delta_x>0) incx=1;//设置单步方向
    	else
    	{
    	if(delta_x==0) incx=0;//垂直线
    	else {incx=-1;delta_x=-delta_x;}
    	}
    	if(delta_y>0)incy=1;
    	else
    	{
    	if(delta_y==0) incy=0;//水平线
    	else {incy=-1;delta_y=-delta_y;}
    	}
    	if(delta_x>delta_y) distance=delta_x;//选取基本增量坐标轴
    	else distance=delta_y;
    
    	for(t=0;t<=distance+1;t++)
    	{                                     //画线输出
    		GUI_Point(col, row, color);
    		xerr+=delta_x;
    		yerr+=delta_y;
    		if(xerr>distance)
    		{
    			xerr-=distance;
    			col+=incx;
    		}
    		if(yerr>distance)
    		{
    		yerr-=distance;
    		row+=incy;
    		}
    	}
    }
    
    //画8点(Bresenham算法)		  
    //(rx,ry,a,b):参数
    //color:颜色
    void GUI_Circle8(u16 rx,u16 ry,int a,int b,u16 color)
    {
    	GUI_Point(rx+a,ry-b,color);              
    	GUI_Point(rx+b,ry-a,color);                       
    	GUI_Point(rx+b,ry+a,color);                           
    	GUI_Point(rx+a,ry+b,color);             
    	GUI_Point(rx-a,ry+b,color);                  
    	GUI_Point(rx-b,ry+a,color);               
    	GUI_Point(rx-b,ry-a,color);                      
    	GUI_Point(rx-a,ry-b,color);                  
    }
    
    //在指定位置画一个指定大小的圆
    //(rx,ry):圆心
    //r    :半径
    //color:颜色
    //mode :0,不填充;1,填充
    void GUI_Arc(u16 rx,u16 ry,u16 r,u16 color,u8 mode)
    {
    	int a,b,c;
    	int di;	  
    	a=0;b=r;	  
    	di=3-(r<<1);	//判断下个点位置的标志
    	while(a<=b)
    	{
    		if(mode)
    		for(c=a;c<=b;c++)
    		GUI_Circle8(rx,ry,a,c,color);//画实心圆
     		else GUI_Circle8(rx,ry,a,b,color);			//画空心圆
    		a++;
    		//使用Bresenham算法画圆     
    		if(di<0)di +=4*a+6;	  
    		else
    		{
    			di+=10+4*(a-b);   
    			b--;
    		} 							  
    	}
    }
    
    //画实心矩形
    //(sx,sy)左上角顶点坐标, 
    //(ex,ey)右下角顶点坐标, color颜色
    //返回: 无
    //说明:在指定位置上画出实心矩形。
    void GUI_Box(u8 sx,u16 sy,u8 ex,u16 ey,u16 color)
    { 
    	u16 temp,temp1,m,n;   
    	LCD_Address_Set(sx,sy,ex,ey); 
      n=ex-sx+1;
    	m=ey-sy+1;
    
    	for(temp=0;temp<m;temp++)
    	{	 	
    		for(temp1=0;temp1<n;temp1++)
    	 	{	
    			LCD_WR_DATA(color);
    		}
    	}
    }
    
    //画颜色递变巨型  可以是横条 竖条等
    //(sx,sy)左上角顶点坐标, 
    //(ex,ey)右下角顶点坐标, color颜色
    // mode 模式  mode=1  纵向颜色变化 mode=2 横向颜色变化
    void GUI_BoxChange(u8 sx,u16 sy,u8 ex,u16 ey,u16 color,u8 mode)
    { 
    	u16 temp,temp1,m,n,color2;   
    	LCD_Address_Set(sx,sy,ex,ey); 
    	n=ex-sx+1;
    	m=ey-sy+1;
    	if(mode==2)color2=color;
    	for(temp=0;temp<m;temp++)
    	{	 	
    		for(temp1=0;temp1<n;temp1++)
    	 	{	
    			LCD_WR_DATA(color);
    			if(mode==2)color+=15;
    		}
    		if(mode==1)color+=15;
    		if(mode==2)color=color2;
    	}
    }
    
    //填充矩形
    //x0,y0:矩形的左上角坐标
    //width,height:矩形的尺寸
    //color:颜色
    void GUI_FillBox(u16 x0,u16 y0,u16 width,u16 height,u16 color)
    {	  							   
    	if(width==0||height==0)return;//非法.	 
    	GUI_Box(x0,y0,x0+width-1,y0+height-1,color);	   	   
    }
    
    //显示英文或数字字符
    //函数支持 字符的纵向和横向显示 (要配合扫描方式)
    //         支持忽略背景颜色显示 (横向没有开此功能)
    //x  y  要显示字符的初始坐标
    //value 显示字符数据
    //dcolor 显示的字符颜色  bgcolor显示字符的背景颜色
    //                       bgcolor 只给1 说明背景颜色使用 当前屏幕颜色(只适用于纵向显示)
    //mode   0 字符纵向显示  1 字符横向显示
    void GUI_ShowChar(u8 x,u16 y,u8 value,u16 dcolor,u16 bgcolor,u8 mode)	
    {  
    	u8 i,j;
    	u8 *temp=(u8 *)zifu816;    //temp是*temp的地址  这里temp就是zifu的首地址 
    	u8 ma;  
    
    	temp+=(value-32)*16;   //确定要显示的值
    	//用ascii表  前32个ascii没有存入zifu库里 所以要减32
    	//每个字符用16个字节显示 所以在乘以16  就是对应的显示位的首地址
    
    	if(bgcolor!=1)		   //用自己设定的背景色
    	{											   //注意 不管设置哪一显示方向 前提是扫描要对应
    		if(mode==0)LCD_Address_Set(x,y,x+7,y+15);    //设置区域		   
    		if(mode==1)LCD_Address_Set(x,y,x+15,y+7); //设置区域
    		LCD_CS_Clr();  //打开屏幕片选
    		for(j=0;j<16;j++)
    		{
    			for(i=0;i<8;i++)		    //先横扫
    			{
    				if((*temp&(1<<(7-i)))!=0)		   //将1 左移 然后对应位进行相与 				
    				{
    					LCD_WR_DATA(dcolor);		   //显示字符颜色
    				}
    				else
    				{
    					LCD_WR_DATA(bgcolor);		   //显示背景颜色
    				}
    			}
    			temp++;								   //下一字节
    		}
    		LCD_CS_Set();  //关闭屏幕片选
    	}
    	else				  //用屏幕上自有的颜色做背景色 (只支持纵向显示)
    	{
    		ma=x;			  //赋值x的初始值给ma 
    		for(j=0;j<16;j++)
    		{
    			for(i=0;i<8;i++)		    //先横扫
    			{
    				LCD_Address_Set(x,y,x,y);
    				LCD_CS_Clr();  //打开屏幕片选
    				if((*temp&(1<<(7-i)))!=0)	//将1 左移 然后对应位进行相与 
    				{
    					LCD_WR_DATA(dcolor);	//显示字符颜色
    					x++;
    					if((x-ma)==8){x=ma;y++;}	//判断是否到一行
    				}
    				else
    				{
    					x++;						//没有要显示的数据 x自加跳过
    					if((x-ma)==8){x=ma;y++;}	//判断是否到一行
    				}
    				LCD_CS_Set();  //关闭屏幕片选
    			}
    			temp++;							//下一字节
    		}
    	}
    }
    
    //程序汉字显示
    //说明:汉字是用取模软件制作好的 指定的汉字 汉字大小是16x16	 即32个字节存储一个汉字
    // 		这部分汉字是存在程序空间 所以汉字的多少直接影响程序空间的剩余量
    //      主要方便于就显示几个指定的汉字来说就不用调用字库了 
    //x  y  要显示汉字的坐标
    //c[2]  汉字的数据 一个汉字两个字节表示
    //dcolor 汉字的颜色   bgcolor 背景颜色
    void GUI_ShowHZ(u8 x, u16  y, u8 c[2], u16 dcolor,u16 bgcolor)
    {
    	u8 i,j,m;									//定义临时变量
    	u16 k=0;
    	
    	LCD_Address_Set(x,y  ,x+16-1, y+16-1);      //选择坐标位置
    	LCD_CS_Clr();  //打开屏幕片选
    	for (k=0;k<N_codeHZ;k++) 		  //64表示自建汉字库中的个数,循环查询内码	这个数并不确定 取决于存如的汉字个数	  
    	{
    		if ((codeHZ_16[k].Index[0]==c[0])&&(codeHZ_16[k].Index[1]==c[1]))	    //寻找对应汉字	 一个汉字需要两个字节
    		{
    			for(i=0;i<32;i++)
    			{								    //32个字节 每个字节都要一个点一个点处理 所以是处理了32X8次
    				m=codeHZ_16[k].Msk[i];							//读取对应字节数据
    				for(j=0;j<8;j++) 									//显示一个字节  一个字节8位 也就是8个点
    				{
    					if((m&0x80)==0x80) 							//判断是否是要写入点 	 如果是 给字体颜色
    						LCD_WR_DATA(dcolor);				
    					else 											//如果不是 为背景色  给颜色
    						LCD_WR_DATA(bgcolor);
    					m<<=1;										    //左移一位  判断下一点
    				}
    			}
    		}
    	}
    	LCD_CS_Set();  //关闭屏幕片选
    }
    
    //显示汉字及字符  纵向显示
    //x1 y1 显示的初始位置
    //*str 要显示的数据
    //dcolor 显示汉字 字符的颜色
    //bgcolor 显示汉字 字符的背景颜色  当bgcolor=1是 那么背景颜色为屏幕自有颜色
    void GUI_ShowHzChar(u8 x1,u16 y1,char*str1,u16 dcolor,u16 bgcolor)	  
    {
    	u8 *str=(u8*)str1;
    	u8 l=0;
    	while(*str)
    	{
    	  if(*str<0x80)		  //小于128   ascii 都在数组内
    	  {	  
    			GUI_ShowChar(x1+l*8,y1,*str,dcolor,bgcolor,0);
    			l+=1;
    			str++;
    		}
    	  else
    	  {
    			GUI_ShowHZ(x1+l*8,y1,(u8*)str,dcolor, bgcolor);
    			str+=2;l+=2;
    	  }
    	}	
    }
    
    void GUI_ShowHzCharAuto(u8 x1,u16 y1,char*str1,u16 dcolor,u16 bgcolor)
    {
    	u8 *str=(u8*)str1;
    	while(*str)
    	{
    	  if(*str<0x80)		  //小于128   ascii 都在数组内
    	  {
    			if(x1>LCD_W-8)
    			{x1=0;y1+=16;if(y1>LCD_H)y1=0;}
    			GUI_ShowChar(x1,y1,*str,dcolor,bgcolor,0);
    			x1+=8;
    			str++;
    		}
    	  else
    	  {
    			if(x1>LCD_W-16)
    			{x1=0;y1+=16;if(y1>LCD_H)y1=0;}
    			GUI_ShowHZ(x1,y1,(u8*)str,dcolor, bgcolor);
    			str+=2;x1+=16;
    	  }
    	}	
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
    • 272
    • 273
    • 274
    • 275
    • 276
    • 277
    • 278
    • 279
    • 280
    • 281
    • 282
    • 283
    • 284
    • 285
    • 286
    • 287
    • 288
    • 289
    • 290
    • 291
    • 292
    • 293
    • 294
    • 295
    • 296
    • 297
    • 298
    • 299
    • 300
    • 301
    • 302
    • 303
    • 304
    • 305
    • 306
    • 307
    • 308
    • 309
    • 310
    • 311
    • 312
    • 313
    • 314
    • 315
    • 316
    • 317
    • 318
    • 319
    • 320
    • 321
    • 322
    • 323
    • 324
    • 325
    • 326
    • 327
    • 328
    • 329
    • 330
    • 331
    • 332
    • 333
    • 334
    • 335
    • 336
    • 337
    • 338
    • 339
    • 340
    • 341
    • 342
    • 343
    • 344

    3.4gui.h

    #ifndef __GUI_H__
    #define __GUI_H__			    
    #include "air32f10x.h"
    #include "st7735v.h"
    
    
    
    /*定义常用颜色码*/
    #define Red      0xf800	//红
    #define Yellow   0xffe0	//黄
    #define Green    0x07e0	//绿
    #define Cyan     0x07ff	//青
    #define Blue     0x001f	//蓝
    #define Purple   0xf81f	//紫
    #define Black    0x0000	//黑
    #define White    0xffff	//白
    #define Gray     0x7bef	//灰
    #define Blue1    0xa5ff //淡蓝
    #define Blue2	   0x7cdf
    #define Purple1  0x8a9e //淡紫
    #define Green1   0x0410 //墨绿
    #define Green2   0x2616
    #define Blue3	   0x751E
    #define Purple2  0xcd9e //淡紫
    #define Red2	   0XF260	//淡红
    #define Red3	   0X8000	//棕红
    #define window   0XDED7
    
    
    
    void GUI_Clear(u16 color);//清屏
    void GUI_Pic(u16 *p_data);//画图
    void GUI_Point(u8 x, u16 y, u16 color);//画点
    void GUI_Line(u16 x1,u16 y1,u16 x2,u16 y2,u16 color);//画直线
    void GUI_Circle8(u16 rx,u16 ry,int a,int b,u16 color);//画8点(Bresenham算法)	
    void GUI_Arc(u16 rx,u16 ry,u16 r,u16 color,u8 mode);//在指定位置画一个指定大小的圆
    
    void GUI_Box(u8 sx,u16 sy,u8 ex,u16 ey,u16 color);//画实心矩形
    void GUI_BoxChange(u8 sx,u16 sy,u8 ex,u16 ey,u16 color,u8 mode);//画颜色递变巨型  可以是横条 竖条等
    void GUI_FillBox(u16 x0,u16 y0,u16 width,u16 height,u16 color);//填充矩形
    void GUI_ShowChar(u8 x,u16 y,u8 value,u16 dcolor,u16 bgcolor,u8 mode); //显示英文或数字字符
    void GUI_ShowHZ(u8 x, u16  y, u8 c[2], u16 dcolor,u16 bgcolor);//程序汉字显示
    void GUI_ShowHzChar(u8 x1,u16 y1,char*str1,u16 dcolor,u16 bgcolor);//显示汉字及字符  纵向显示
    void GUI_ShowHzCharAuto(u8 x1,u16 y1,char*str1,u16 dcolor,u16 bgcolor);//显示中英文字符串,自动换行
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    3.5英文字库

    用到了中英文显示,当然也少不了字库的需要。

    /*16x8英文字符点阵数据文件*/
    /*纵向取模*/
    
    //包括以下字符的点阵数据:
    //sp
    //!"#$%&'()*+,-./
    //0123456789
    //:;<=>?@
    //ABCDEFGHIJKLMNOPQRSTUVWXYZ
    //[\]^_'
    //abcdefghijklmnopqrstuvwxyz
    //{|}~
    
    #ifndef __ZIFU8X16_H
    #define __ZIFU8X16_H 
    
    #include  "air32f10x.h"
    
    
    const unsigned char zifu816[]={
    
    /*                 sp                 */
    
    /*空格*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    
    
    /*--  文字:  !  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x18,0x18,0x00,0x00,
    
    /*--  文字:  "  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x12,0x36,0x24,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    
    /*--  文字:  #  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x24,0x24,0x24,0xFE,0x48,0x48,0x48,0xFE,0x48,0x48,0x48,0x00,0x00,
    
    /*--  文字:  $  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x10,0x38,0x54,0x54,0x50,0x30,0x18,0x14,0x14,0x54,0x54,0x38,0x10,0x10,
    
    /*--  文字:  %  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x44,0xA4,0xA8,0xA8,0xA8,0x54,0x1A,0x2A,0x2A,0x2A,0x44,0x00,0x00,
    
    /*--  文字:  &  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x30,0x48,0x48,0x48,0x50,0x6E,0xA4,0x94,0x88,0x89,0x76,0x00,0x00,
    
    /*--  文字:  '  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x60,0x60,0x20,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    
    /*--  文字:  (  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x02,0x04,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x08,0x08,0x04,0x02,0x00,
    
    /*--  文字:  )  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x40,0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x40,0x00,
    
    /*--  文字:  *  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x10,0x10,0xD6,0x38,0x38,0xD6,0x10,0x10,0x00,0x00,0x00,0x00,
    
    /*--  文字:  +  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0xFE,0x10,0x10,0x10,0x10,0x00,0x00,0x00,
    
    /*--  文字:  ,  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x20,0xC0,
    
    /*--  文字:  -  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    
    /*--  文字:  .  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,
    
    /*--  文字:  /  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x01,0x02,0x02,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,
    
    
    
    /*                 0123456789                */
    
    
    /*--  文字:  0  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,
    
    /*--  文字:  1  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,
    
    /*--  文字:  2  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00,
    
    /*--  文字:  3  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00,
    
    /*--  文字:  4  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00,
    
    /*--  文字:  5  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00,
    
    /*--  文字:  6  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00,
    
    /*--  文字:  7  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
    
    /*--  文字:  8  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,
    
    /*--  文字:  9  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00,
    
    
    
    /*                    :;<=>?@                          */
    
    
    /*--  文字:  :  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,
    
    /*--  文字:  ;  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x20,
    
    /*--  文字:  <  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x02,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x02,0x00,0x00,
    
    /*--  文字:  =  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,
    
    /*--  文字:  >  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x20,0x40,0x00,0x00,
    
    /*--  文字:  ?  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x3C,0x42,0x42,0x62,0x02,0x04,0x08,0x08,0x00,0x18,0x18,0x00,0x00,
    
    /*--  文字:  @  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x38,0x44,0x5A,0xAA,0xAA,0xAA,0xAA,0xB4,0x42,0x44,0x38,0x00,0x00,
    
    
    
    /*               ABCDEFGHIJKLMNOPQRSTUVWXYZ                         */
    
    
    /*--  文字:  A  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x10,0x10,0x18,0x28,0x28,0x24,0x3C,0x44,0x42,0x42,0xE7,0x00,0x00,
    
    /*--  文字:  B  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xF8,0x44,0x44,0x44,0x78,0x44,0x42,0x42,0x42,0x44,0xF8,0x00,0x00,
    
    /*--  文字:  C  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x3E,0x42,0x42,0x80,0x80,0x80,0x80,0x80,0x42,0x44,0x38,0x00,0x00,
    
    /*--  文字:  D  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xF8,0x44,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x44,0xF8,0x00,0x00,
    
    /*--  文字:  E  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xFC,0x42,0x48,0x48,0x78,0x48,0x48,0x40,0x42,0x42,0xFC,0x00,0x00,
    
    /*--  文字:  F  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xFC,0x42,0x48,0x48,0x78,0x48,0x48,0x40,0x40,0x40,0xE0,0x00,0x00,
    
    /*--  文字:  G  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x3C,0x44,0x44,0x80,0x80,0x80,0x8E,0x84,0x44,0x44,0x38,0x00,0x00,
    
    /*--  文字:  H  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,
    
    /*--  文字:  I  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,
    
    /*--  文字:  J  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x88,0xF0,
    
    /*--  文字:  K  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xEE,0x44,0x48,0x50,0x70,0x50,0x48,0x48,0x44,0x44,0xEE,0x00,0x00,
    
    /*--  文字:  L  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xE0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0xFE,0x00,0x00,
    
    /*--  文字:  M  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xEE,0x6C,0x6C,0x6C,0x6C,0x54,0x54,0x54,0x54,0x54,0xD6,0x00,0x00,
    
    /*--  文字:  N  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xC7,0x62,0x62,0x52,0x52,0x4A,0x4A,0x4A,0x46,0x46,0xE2,0x00,0x00,
    
    /*--  文字:  O  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x38,0x44,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x44,0x38,0x00,0x00,
    
    /*--  文字:  P  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xFC,0x42,0x42,0x42,0x42,0x7C,0x40,0x40,0x40,0x40,0xE0,0x00,0x00,
    
    /*--  文字:  Q  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x38,0x44,0x82,0x82,0x82,0x82,0x82,0xB2,0xCA,0x4C,0x38,0x06,0x00,
    
    /*--  文字:  R  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xFC,0x42,0x42,0x42,0x7C,0x48,0x48,0x44,0x44,0x42,0xE3,0x00,0x00,
    
    /*--  文字:  S  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x3E,0x42,0x42,0x40,0x20,0x18,0x04,0x02,0x42,0x42,0x7C,0x00,0x00,
    
    /*--  文字:  T  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xFE,0x92,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,
    
    /*--  文字:  U  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,
    
    /*--  文字:  V  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xE7,0x42,0x42,0x44,0x24,0x24,0x28,0x28,0x18,0x10,0x10,0x00,0x00,
    
    /*--  文字:  W  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xD6,0x92,0x92,0x92,0x92,0xAA,0xAA,0x6C,0x44,0x44,0x44,0x00,0x00,
    
    /*--  文字:  X  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x18,0x18,0x18,0x24,0x24,0x42,0xE7,0x00,0x00,
    
    /*--  文字:  Y  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xEE,0x44,0x44,0x28,0x28,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,
    
    /*--  文字:  Z  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x7E,0x84,0x04,0x08,0x08,0x10,0x20,0x20,0x42,0x42,0xFC,0x00,0x00,
    
    
    
    /*                               [\]^_'                        */
    
    
    /*--  文字:  [  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x1E,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1E,0x00,
    
    /*--  文字:  \  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x10,0x08,0x08,0x04,0x04,0x04,0x02,0x02,
    
    /*--  文字:  ]  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x78,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x78,0x00,
    
    /*--  文字:  ^  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x1C,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    
    /*--  文字:  _  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
    
    /*--  文字:  '  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x60,0x60,0x20,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    
    
    
    /*                        abcdefghijklmnopqrstuvwxyz                 */
    
    
    /*--  文字:  a  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x1E,0x22,0x42,0x42,0x3F,0x00,0x00,
    
    /*--  文字:  b  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x64,0x58,0x00,0x00,
    
    /*--  文字:  c  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x40,0x40,0x40,0x22,0x1C,0x00,0x00,
    
    /*--  文字:  d  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x06,0x02,0x02,0x02,0x1E,0x22,0x42,0x42,0x42,0x26,0x1B,0x00,0x00,
    
    /*--  文字:  e  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x7E,0x40,0x40,0x42,0x3C,0x00,0x00,
    
    /*--  文字:  f  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x0F,0x11,0x10,0x10,0x7E,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,
    
    /*--  文字:  g  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x44,0x44,0x38,0x40,0x3C,0x42,0x42,0x3C,
    
    /*--  文字:  h  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x5C,0x62,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,
    
    /*--  文字:  i  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,
    
    /*--  文字:  j  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x1C,0x04,0x04,0x04,0x04,0x04,0x04,0x44,0x78,
    
    /*--  文字:  k  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x4E,0x48,0x50,0x68,0x48,0x44,0xEE,0x00,0x00,
    
    /*--  文字:  l  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,
    
    /*--  文字:  m  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x49,0x49,0x49,0x49,0x49,0xED,0x00,0x00,
    
    /*--  文字:  n  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x62,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,
    
    /*--  文字:  o  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,
    
    /*--  文字:  p  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD8,0x64,0x42,0x42,0x42,0x44,0x78,0x40,0xE0,
    
    /*--  文字:  q  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x22,0x42,0x42,0x42,0x22,0x1E,0x02,0x07,
    
    /*--  文字:  r  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEE,0x32,0x20,0x20,0x20,0x20,0xF8,0x00,0x00,
    
    /*--  文字:  s  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x42,0x40,0x3C,0x02,0x42,0x7C,0x00,0x00,
    
    /*--  文字:  t  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x10,0x10,0x10,0x0C,0x00,0x00,
    
    /*--  文字:  u  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x42,0x42,0x42,0x42,0x46,0x3B,0x00,0x00,
    
    /*--  文字:  v  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x28,0x10,0x10,0x00,0x00,
    
    /*--  文字:  w  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0x92,0x92,0xAA,0xAA,0x44,0x44,0x00,0x00,
    
    /*--  文字:  x  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x24,0x18,0x18,0x18,0x24,0x76,0x00,0x00,
    
    /*--  文字:  y  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x28,0x18,0x10,0x10,0xE0,
    
    /*--  文字:  z  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x44,0x08,0x10,0x10,0x22,0x7E,0x00,0x00,
    
    
    
    /*                {|}~               */												   
    
    
    /*--  文字:  {  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x03,0x04,0x04,0x04,0x04,0x04,0x08,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x00,
    
    /*--  文字:  |  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
    
    /*--  文字:  }  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x60,0x10,0x10,0x10,0x10,0x10,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x60,0x00,
    
    /*--  文字:  ~  126--*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x30,0x4C,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    
    
    /*--  向上箭头  --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0x10,0x10,0x18,0x38,0x38,0x3c,0x3C,0x7c,0x7e,0x7e,0xff,0x00,0x00,
    
    
    /*--  向下箭头 --*/
    /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
    0x00,0x00,0x00,0xff,0x7e,0x7e,0x7c,0x3c,0x3c,0x38,0x38,0x18,0x10,0x10,0x00,0x00,
    };
    
    
    //
    //unsigned char code num16x32[]={
    // /*--  文字:  0  --*/
    ///*--  宋体24;  此字体下对应的点阵为:宽x高=16x33   --*/
    //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF0,0x0F,0x78,
    //0x0C,0x18,0x1C,0x1C,0x18,0x0C,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x30,0x06,0x30,0x06,
    //0x30,0x06,0x30,0x06,0x30,0x06,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x18,0x0C,0x1C,0x1C,
    //0x0C,0x18,0x0F,0x78,0x03,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    //
    //
    ///*--  文字:  1  --*/
    ///*--  宋体24;  此字体下对应的点阵为:宽x高=16x33   --*/
    //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x80,
    //0x1F,0x80,0x03,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,
    //0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,
    //0x01,0x80,0x07,0xE0,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    //
    //
    ///*--  文字:  2  --*/
    ///*--  宋体24;  此字体下对应的点阵为:宽x高=16x33   --*/
    //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x1C,0x78,
    //0x30,0x1C,0x30,0x1C,0x30,0x0C,0x30,0x0C,0x30,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x38,
    //0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x04,0x0C,0x04,0x18,0x0C,
    //0x30,0x1C,0x3F,0xFC,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    //
    //
    ///*--  文字:  3  --*/
    ///*--  宋体24;  此字体下对应的点阵为:宽x高=16x33   --*/
    //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0xF0,
    //0x30,0x38,0x30,0x38,0x30,0x18,0x30,0x18,0x00,0x38,0x00,0x38,0x01,0xF0,0x03,0xE0,
    //0x00,0xF0,0x00,0x38,0x00,0x1C,0x00,0x1C,0x00,0x0C,0x30,0x0C,0x30,0x1C,0x30,0x1C,
    //0x30,0x38,0x1C,0xF0,0x0F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    //
    //
    ///*--  文字:  4  --*/
    ///*--  宋体24;  此字体下对应的点阵为:宽x高=16x33   --*/
    //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x70,0x00,0x70,
    //0x00,0xF0,0x00,0xF0,0x01,0xF0,0x03,0x70,0x03,0x70,0x06,0x70,0x0C,0x70,0x0C,0x70,
    //0x18,0x70,0x30,0x70,0x30,0x70,0x60,0x70,0x7F,0xFE,0x00,0x70,0x00,0x70,0x00,0x70,
    //0x00,0x70,0x00,0x70,0x03,0xFE,0x03,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    //
    //
    ///*--  文字:  5  --*/
    ///*--  宋体24;  此字体下对应的点阵为:宽x高=16x33   --*/
    //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFC,0x1F,0xFC,
    //0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x1F,0xF0,0x1E,0x78,0x18,0x18,
    //0x18,0x1C,0x00,0x1C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x30,0x1C,0x30,0x1C,0x30,0x1C,
    //0x30,0x38,0x1C,0xF8,0x0F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    //
    //
    ///*--  文字:  6  --*/
    ///*--  宋体24;  此字体下对应的点阵为:宽x高=16x33   --*/
    //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF8,0x07,0x9C,
    //0x0E,0x0C,0x1C,0x0C,0x18,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x33,0xF8,0x37,0x3C,
    //0x3C,0x0C,0x38,0x0E,0x38,0x0E,0x30,0x06,0x30,0x06,0x38,0x06,0x38,0x0E,0x18,0x0E,
    //0x1C,0x0C,0x0F,0x38,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    //
    //
    ///*--  文字:  7  --*/
    ///*--  宋体24;  此字体下对应的点阵为:宽x高=16x33   --*/
    //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0x3F,0xFC,
    //0x3C,0x08,0x30,0x18,0x30,0x10,0x20,0x30,0x00,0x20,0x00,0x60,0x00,0x40,0x00,0xC0,
    //0x00,0x80,0x01,0x80,0x01,0x80,0x01,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,
    //0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    //
    //
    ///*--  文字:  8  --*/
    ///*--  宋体24;  此字体下对应的点阵为:宽x高=16x33   --*/
    //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x1E,0x78,
    //0x38,0x1C,0x38,0x1C,0x30,0x0C,0x38,0x0C,0x38,0x1C,0x3C,0x1C,0x1F,0x38,0x0F,0xF0,
    //0x0F,0xF0,0x38,0xF8,0x30,0x7C,0x70,0x1C,0x70,0x1C,0x60,0x0C,0x60,0x0C,0x70,0x1C,
    //0x70,0x1C,0x3C,0x78,0x0F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    //
    //
    ///*--  文字:  9  --*/
    ///*--  宋体24;  此字体下对应的点阵为:宽x高=16x33   --*/
    //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,
    //0x38,0x38,0x70,0x18,0x70,0x1C,0x60,0x1C,0x60,0x0C,0x60,0x0C,0x70,0x1C,0x70,0x1C,
    //0x78,0x3C,0x3C,0xFC,0x1F,0xDC,0x00,0x1C,0x00,0x1C,0x00,0x18,0x00,0x38,0x30,0x30,
    //0x30,0x70,0x39,0xE0,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    //
    //
    // };
    
    
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
    • 272
    • 273
    • 274
    • 275
    • 276
    • 277
    • 278
    • 279
    • 280
    • 281
    • 282
    • 283
    • 284
    • 285
    • 286
    • 287
    • 288
    • 289
    • 290
    • 291
    • 292
    • 293
    • 294
    • 295
    • 296
    • 297
    • 298
    • 299
    • 300
    • 301
    • 302
    • 303
    • 304
    • 305
    • 306
    • 307
    • 308
    • 309
    • 310
    • 311
    • 312
    • 313
    • 314
    • 315
    • 316
    • 317
    • 318
    • 319
    • 320
    • 321
    • 322
    • 323
    • 324
    • 325
    • 326
    • 327
    • 328
    • 329
    • 330
    • 331
    • 332
    • 333
    • 334
    • 335
    • 336
    • 337
    • 338
    • 339
    • 340
    • 341
    • 342
    • 343
    • 344
    • 345
    • 346
    • 347
    • 348
    • 349
    • 350
    • 351
    • 352
    • 353
    • 354
    • 355
    • 356
    • 357
    • 358
    • 359
    • 360
    • 361
    • 362
    • 363
    • 364
    • 365
    • 366
    • 367
    • 368
    • 369
    • 370
    • 371
    • 372
    • 373
    • 374
    • 375
    • 376
    • 377
    • 378
    • 379
    • 380
    • 381
    • 382
    • 383
    • 384
    • 385
    • 386
    • 387
    • 388
    • 389
    • 390
    • 391
    • 392
    • 393
    • 394
    • 395
    • 396
    • 397
    • 398
    • 399
    • 400
    • 401
    • 402
    • 403
    • 404
    • 405
    • 406
    • 407
    • 408
    • 409
    • 410
    • 411
    • 412
    • 413
    • 414
    • 415
    • 416
    • 417
    • 418
    • 419
    • 420
    • 421
    • 422
    • 423
    • 424
    • 425
    • 426
    • 427
    • 428
    • 429
    • 430
    • 431
    • 432
    • 433
    • 434
    • 435
    • 436
    • 437
    • 438
    • 439
    • 440
    • 441
    • 442
    • 443
    • 444
    • 445
    • 446
    • 447
    • 448
    • 449
    • 450
    • 451
    • 452
    • 453
    • 454
    • 455
    • 456
    • 457
    • 458
    • 459
    • 460
    • 461
    • 462
    • 463
    • 464
    • 465
    • 466
    • 467
    • 468
    • 469
    • 470
    • 471
    • 472
    • 473
    • 474
    • 475
    • 476
    • 477
    • 478
    • 479
    • 480
    • 481
    • 482
    • 483
    • 484
    • 485
    • 486
    • 487
    • 488
    • 489
    • 490
    • 491
    • 492
    • 493
    • 494
    • 495
    • 496
    • 497
    • 498
    • 499
    • 500
    • 501
    • 502
    • 503
    • 504
    • 505
    • 506
    • 507
    • 508
    • 509
    • 510
    • 511
    • 512
    • 513
    • 514
    • 515
    • 516
    • 517
    • 518
    • 519
    • 520
    • 521
    • 522
    • 523
    • 524
    • 525
    • 526
    • 527
    • 528
    • 529
    • 530
    • 531

    3.6中文字库

    中文字库这部分,是重新做的,是使用的PCtoLCD2002工具取模的,取模方式为阴码、逐行式、顺向。

    #ifndef HZ16x16_H
    #define HZ16x16_H
    
    // ------------------  汉字字模的数据结构定义 ------------------------ //
    struct  typFNT_HZ16                      // 汉字字模数据结构 
    {
    	unsigned char   Msk[32];          // 点阵码数据 	  存放内码后对应的 点阵序列  每个字需要32个字节的点阵序列
    	unsigned char  Index[3];          // 汉字内码索引		   存放内码  如"硕"  但是一个字要两个字节表示
    };
    
    //阴码、逐行式、顺向
    const  struct  typFNT_HZ16 codeHZ_16[] =          // 数据表 
    {
    0x00,0x04,0x27,0xC4,0x14,0x44,0x14,0x54,0x85,0x54,0x45,0x54,0x45,0x54,0x15,0x54,0x15,0x54,0x25,0x54,0xE5,0x54,0x21,0x04,0x22,0x84,0x22,0x44,0x24,0x14,0x08,0x08,"测",
    0x00,0x28,0x20,0x24,0x10,0x24,0x10,0x20,0x07,0xFE,0x00,0x20,0xF0,0x20,0x17,0xE0,0x11,0x20,0x11,0x10,0x11,0x10,0x15,0x10,0x19,0xCA,0x17,0x0A,0x02,0x06,0x00,0x02,"试",
    0x00,0x80,0x00,0x80,0xFC,0x80,0x04,0xFC,0x05,0x04,0x49,0x08,0x2A,0x40,0x14,0x40,0x10,0x40,0x28,0xA0,0x24,0xA0,0x45,0x10,0x81,0x10,0x02,0x08,0x04,0x04,0x08,0x02,"欢",
    0x00,0x00,0x20,0x80,0x13,0x3C,0x12,0x24,0x02,0x24,0x02,0x24,0xF2,0x24,0x12,0x24,0x12,0x24,0x12,0xB4,0x13,0x28,0x12,0x20,0x10,0x20,0x28,0x20,0x47,0xFE,0x00,0x00,"迎",
    0x10,0x40,0x10,0x40,0x1F,0xFE,0x20,0x40,0x20,0x40,0x67,0xFC,0x64,0x44,0xA4,0x44,0x27,0xFC,0x20,0x40,0x22,0x40,0x21,0x40,0x20,0x80,0x21,0x40,0x22,0x30,0x2C,0x0E,"使",
    0x00,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x41,0x08,0x41,0x28,0x80,0x10,"用",
    
    };
    
    #define N_codeHZ (sizeof(codeHZ_16)/sizeof(codeHZ_16[0]))
    
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    按照如下方式取模方式和字体格式,取出来的数据,只需要删掉每行最后的数字即可直接使用,还是多方便。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3WVe9D0t-1658585522318)(C:\Users\wuzjjj\AppData\Roaming\Typora\typora-user-images\image-20220723214639645.png)]

    3.7图像

    在本例程中还用到了一幅五星红旗的图,使用的是启光电子的数据,显示效果非常好。由于手机像素无法拍出较好的效果,使用启光电子的宣传图作为展示。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lnfd5wZt-1658585522319)(C:\Users\wuzjjj\AppData\Roaming\Typora\typora-user-images\image-20220723214927613.png)]
    在这里插入图片描述

    3.8 rcc_clk.c

    在此部分,将系统时钟提高到了216M,所以需要对起时钟进行配置,这个是来自于合宙官方的例程。

    #include 
    #include "rcc_clk.h"
    
    void RCC_ClkConfiguration(void)
    {
    	RCC_DeInit(); //复位RCC寄存器
    
    	RCC_HSEConfig(RCC_HSE_ON); //使能HSE
    	while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //等待HSE就绪
    
    	RCC_PLLCmd(DISABLE);										 //关闭PLL
    	AIR_RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_27, 1); //配置PLL,8*27=216MHz
    
    	RCC_PLLCmd(ENABLE); //使能PLL
    	while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //等待PLL就绪
    
    	RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //选择PLL作为系统时钟
    
    	RCC_HCLKConfig(RCC_SYSCLK_Div1); //配置AHB时钟
    	RCC_PCLK1Config(RCC_HCLK_Div2);	 //配置APB1时钟
    	RCC_PCLK2Config(RCC_HCLK_Div1);	 //配置APB2时钟
    
    	RCC_LSICmd(ENABLE); //使能内部低速时钟
    	while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);				//等待LSI就绪
    	
    	RCC_HSICmd(ENABLE); //使能内部高速时钟
    	while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); //等待HSI就绪
    }
    
    //SYSCLK:72.0Mhz,HCLK:72.0Mhz,PCLK1:36.0Mhz,PCLK2:72.0Mhz,ADCCLK:36.0Mhz
    //SYSCLK:216.0Mhz,HCLK:216.0Mhz,PCLK1:108.0Mhz,PCLK2:216.0Mhz,ADCCLK:108.0Mhz
    void CLK_Printf(void)
    {
    	RCC_ClocksTypeDef clocks;
    	RCC_GetClocksFreq(&clocks); //获取系统时钟频率
    	printf("SYSCLK:%.1fMhz,HCLK:%.1fMhz,PCLK1:%.1fMhz,PCLK2:%.1fMhz,ADCCLK:%.1fMhz\r\n",
    		(float)clocks.SYSCLK_Frequency/1000000,(float)clocks.HCLK_Frequency/1000000,
    		(float)clocks.PCLK1_Frequency/1000000,(float)clocks.PCLK2_Frequency/1000000,(float)clocks.ADCCLK_Frequency/1000000);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    3.9rcc_clk.h

    #ifndef __RCC_CLK_H__
    #define __RCC_CLK_H__
    #include "sys.h"
    #include "air_rcc.h"
    
    
    void CLK_Printf(void);
    void RCC_ClkConfiguration(void);
    
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3.10delay.c

    由于将系统时钟提高到了216M,滴答计时器的相关流程就不准了,需要进行优化。

    首先在system_air32f10x.c中的SystemCoreClock定义中添加216M的部分

    /*******************************************************************************
    *  Clock Definitions
    *******************************************************************************/
    #ifdef SYSCLK_FREQ_HSE
      uint32_t SystemCoreClock         = SYSCLK_FREQ_HSE;        /*!< System Clock Frequency (Core Clock) */
    #elif defined SYSCLK_FREQ_24MHz
      uint32_t SystemCoreClock         = SYSCLK_FREQ_24MHz;        /*!< System Clock Frequency (Core Clock) */
    #elif defined SYSCLK_FREQ_36MHz
      uint32_t SystemCoreClock         = SYSCLK_FREQ_36MHz;        /*!< System Clock Frequency (Core Clock) */
    #elif defined SYSCLK_FREQ_48MHz
      uint32_t SystemCoreClock         = SYSCLK_FREQ_48MHz;        /*!< System Clock Frequency (Core Clock) */
    #elif defined SYSCLK_FREQ_56MHz
      uint32_t SystemCoreClock         = SYSCLK_FREQ_56MHz;        /*!< System Clock Frequency (Core Clock) */
    #elif defined SYSCLK_FREQ_72MHz
      uint32_t SystemCoreClock         = SYSCLK_FREQ_72MHz;        /*!< System Clock Frequency (Core Clock) */
    #elif defined SYSCLK_FREQ_216MHz
      uint32_t SystemCoreClock         = SYSCLK_FREQ_216MHz;        /*!< System Clock Frequency (Core Clock) */
    #else /*!< HSI Selected as System Clock source */
      uint32_t SystemCoreClock         = HSI_VALUE;        /*!< System Clock Frequency (Core Clock) */
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    与此同时,还需要在system_air32f10x.h中将使用的宏进行修改

    //#define SYSCLK_FREQ_HSE    HSE_VALUE
    //#define SYSCLK_FREQ_24MHz  24000000 
    //#define SYSCLK_FREQ_36MHz  36000000
    //#define SYSCLK_FREQ_48MHz  48000000
    //#define SYSCLK_FREQ_56MHz  56000000
    //#define SYSCLK_FREQ_72MHz  72000000
    #define SYSCLK_FREQ_216MHz  216000000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这样改了之后,使用delay_us和delay_ms的延时才是准确的,因为用到了SystemCoreClock这个值。

    但是由于系统时钟的提高,按照之前的计算方式,会导致delay_ms的延时很短,好像只有200多ms(没有计算,感觉出来的,需要确定)。所以按照如下修改,即可实现长时间的延时。

    #include "delay.h"
    
    static uint8_t  UsNumber=0;							   
    //static uint16_t MsNumber=0;							
    
    void DELAY_Init()
    {
    	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);	
    	UsNumber=SystemCoreClock/8000000;//为系统时钟的1/8
    //	MsNumber=(u16)UsNumber*1000;					
    }								    
    
        								   
    void delay_us(u32 nus)
    {		
    	u32 temp;	    	 
    	SysTick->LOAD=nus*UsNumber; 						 
    	SysTick->VAL=0x00;        					
    	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;	
    	do
    	{
    		temp=SysTick->CTRL;
    	}while((temp&0x01)&&!(temp&(1<<16)));		
    	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;	
    	SysTick->VAL =0X00;      					
    }
    
    void delay_ms(u16 nms)
    {	 		  	  
    //	u32 temp;		   
    //	SysTick->LOAD=(u32)nms*MsNumber;				
    //	SysTick->VAL =0x00;							
    //	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;	
    //	do
    //	{
    //		temp=SysTick->CTRL;
    //	}while((temp&0x01)&&!(temp&(1<<16)));		
    //	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;	
    //	SysTick->VAL =0X00;   
    	while(nms--)
    		delay_us(1000);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    3.11main.c

    完成上述工作后,就需要开始使用了。在main.c中主要包括各类初始化、显示图像、接收串口的数据并且显示到屏幕上。

    由于系统时钟发生了变化,所以定时器的配置也需要相应调整。

    #include 
    #include 
    #include 
    #include "delay.h"
    #include "led.h"
    #include "usart.h"
    #include "timer.h"
    #include "gui.h"
    #include "rcc_clk.h"
    #include "picture.h"
    
    char str[50];
    
    int main(void)
    {
    	RCC_ClkConfiguration();						//配置时钟
    	DELAY_Init();											//延时初始化
    	USART1_Init(115200);							//串口1初始化
    	LED_GPIO_Init();									//LED闪烁
    	ST7735V_Init();										//LCD初始化
    	GUI_Clear(Black);									//LCD清屏
    	
    	TIM3_Int_Init(30000-1,72-1);			//定时器3初始化,10ms(216M/30k/72=100k)
    	TIM2_Int_Init(30000-1,36000-1);		//定时器2初始化,5000ms(216M/30k/36k=0.2HZ=5000ms)
    	USART1_ClearBuffer();							//清空串口1接收buffer
    	
    	CLK_Printf();											//打印时钟频率
    	printf("wuzjjj\r\n");							//打印欢迎语句
    	
    	GUI_Pic((u16*)gImage_wxhq);				//LCD显示图片		
    	GUI_ShowHzChar(0,0,"Air32F103_LCD测试",White,Red);
    	while (1)
    	{
    		if(USART1_RX_STA&0x8000)				//收到串口数据
    		{
    			GUI_ShowHzCharAuto(0,16,(char*)USART1_RX_BUF,White,Red);
    			
    			if(strcmp((char*)USART1_RX_BUF,"LEDR_ON")==0)
    				LEDR_ON;
    			else if(strcmp((char*)USART1_RX_BUF,"LEDR_OFF")==0)
    				LEDR_OFF;
    			else if(strcmp((char*)USART1_RX_BUF,"LEDG_ON")==0)
    				LEDG_ON;
    			else if(strcmp((char*)USART1_RX_BUF,"LEDG_OFF")==0)
    				LEDG_OFF;
    			else if(strcmp((char*)USART1_RX_BUF,"LEDB_ON")==0)
    				LEDB_ON;
    			else if(strcmp((char*)USART1_RX_BUF,"LEDB_OFF")==0)
    				LEDB_OFF;
    			USART1_RX_STA = USART1_RX_STA&0x7FFF;		//去掉标志位,剩下数据长度
    			printf("received,%d:",USART1_RX_STA);		//发送辅助信息及收到的数据长度
    			printf("%s\r\n",USART1_RX_BUF);					//将收到的数据发回
    			USART1_ClearBuffer();										//清空串口1接受buffer
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    3.12说明

    此部分有很大的内容来自与参考启光电子的程序,而且我发现合宙的官方例程,包括SPI的读写,初始化等内容都是非常相似的。

    另外在此也发现了合宙官方的一个bug,在SPI写数据的时候,还将数据读了回来,但是在配置SPI的时候却是配置的单向模式,导致每次读写到这里的时候,都需要浪费大量的时间,将其优化后,LCD速度大幅提升。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4pYdU1zB-1658585522321)(C:\Users\wuzjjj\AppData\Roaming\Typora\typora-user-images\image-20220723213934702.png)]
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OnY8bGCG-1658585522321)(C:\Users\wuzjjj\AppData\Roaming\Typora\typora-user-images\image-20220723213811163.png)]

    四、调试

    4.1接线

    需要接线如下:

    A2<------------>BL
    A3<----------->CS
    A4<----------->DC
    A6<----------->RES
    A7<----------->SDA
    A5<----------->SCK
    3.3V<--------->3V3
    GND<------->GND
    可以使用排针直接相连,但是这样MCU的正面就在LCD板的下面了,要操作板上的按键就不是很方便,准备后面画一块小板,用于转接,可以直接将MCU板和LCD板插在底板上。

    4.2调试结果

    下载程序后,显示界面如下。在图像上覆盖字符串“Air32F103_LCD测试”

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p5q6eVsL-1658585522322)(C:\Users\wuzjjj\AppData\Roaming\Typora\typora-user-images\image-20220723220943969.png)]

    在上位机发送“测试12”给MCU,发送的内容是支持中文的,但是需要在中文字库中添加对应的字库

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jKtrB1HO-1658585522323)(C:\Users\wuzjjj\AppData\Roaming\Typora\typora-user-images\image-20220723220802905.png)]
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jJjtmSXb-1658585522324)(C:\Users\wuzjjj\AppData\Roaming\Typora\typora-user-images\image-20220723221025350.png)]
    (手机拍摄效果较差,实际显示效果很好)

  • 相关阅读:
    Roson的Qt之旅#109 QML ListView的成员属性介绍
    R语言ggplot2可视化:使用ggpubr包的ggboxplot函数可视化分组箱图、使用facet函数将分组箱图转化为分面图
    策略模式(Strategy mode)
    C++项目:仿mudou库实现高性能高并发服务器
    学习开发一个RISC-V上的操作系统(汪辰老师) — unrecognized opcode `csrr t0,mhartid‘报错问题
    Java学习之Java基础部分知识点
    vue常见的指令
    iOS 实现类似抖音滚动效果
    开源AI家庭自动化助手-手机控制家庭智能家居服务
    【译】使用保留大小写的查找和替换来保存您的命名方式
  • 原文地址:https://blog.csdn.net/chouye5700/article/details/125953559