STM32F103xx TFT液晶显示ASCII字符串、中文、图片带有镜像和旋转功能
编译器平台及例程说明
编译器说明
1. Toolchain : MDK-ARM Community Version: 5.36.0.0(Kile V5)
2. Encoding : Encode in UTF-8 without signature
3. Device Specific Packs : Keil.STM32F1xx_DFP.2.3.0.pack
4. C/C++ Preprocessor Symbols : STM32F10X_HD,USE_STDPERIPH_DRIVER
USE_STDPERIPH_DRIVER :允许使用标准外设驱动
STM32F10X_HD :STM32F10x大容量产品
5. Chip Type :ARM Cortex-M3 STM32F103RET6, 72MHZ, Flash:512KByte, ROM:64KByte, LQFP144
6. 在stm32hf10x.h文件中HSE_VALUE为外部高速振荡器,默认8MHZ。此值必须与硬件保持一致。
例程说明
1. STM32F103xx OLED旋转显示图片。
2. 显示图片可实现0度旋转、90度旋转、180度旋转、270度旋转。
3. 提供两种图片取模方式的显示。
参考例程
STM32F103xx OLED旋转显示图片
STM32F103xx OLED镜像显示图片
一、镜像显示说明

- 镜像前后图片显示的宽和高保持不变
- 不管何种镜像方式显示,图片的横坐标都要完全显示
- 不管何种镜像方式显示,需要先处理完一列的纵坐标,然后再处理横坐标
- 当图片的高度不为8的整数倍时,只需要显示完图片的实际高度即可,多余部分不用显示
- 原图显示原理。先显示完第一列,在显示第二例,依次类推直到最后一列;先显示第一列第一个像素,然后纵坐标加1,显示第一列第二个像素,依次类推直到显示完第一列最后一个像素;然后横坐标加一,纵坐标回归原始值,开始显示第二列第一个像素,显示第二列第二个像素,依次类推直到显示完第二列最后一个像素,按照此规律显示完最后一列最后一个像素。
二、旋转显示说明
- 横轴为图片实际宽度,纵轴为图片显示宽度,图片显示宽度大于等于图片实际宽度。
- 按列显示,先显示第一列,在显示第二列,以此类推,每显示列中的一个像素纵轴加一,横轴不变,直到纵轴加的数量等于图片显示宽度为止,然后横轴加一,纵轴重设为初始值,开始显示第二列,依次类推,直到显示完最后一列。
- 90度显示 :纵轴为图片实际高度,横轴为图片显示宽度,图片显示宽度大于等于图片实际宽度。行显示,先显示第一行,在显示第二行,以此类推,每显示行中的一个像素横轴加一,纵轴不变,直到横轴加的数量等于图片显示宽度为止,然后纵轴加一,横轴重设为初始值,开始显示第二行,依次类推,直到显示完最后一行。
三、数据结构和宏定义
/* 液晶显示方向 (0)竖屏 (1)横屏 */
#define LCD_SHOW_DIR (0)
#if ( LCD_SHOW_DIR == 0 )
#define LCD_PHY_SIZE_WIDTH_MAX (320)
#define LCD_PHY_SIZE_HEIGHT_MAX (480)
#else
#define LCD_PHY_SIZE_WIDTH_MAX (480)
#define LCD_PHY_SIZE_HEIGHT_MAX (320)
#endif
/* 镜像模式 */
typedef enum
{
MIR_MODE_NORMAL = 0, /* 正常模式(0度) */
MIR_MODE_LEFT_RIGHT = 1, /* 左右镜像(90度) */
MIR_MODE_LEFT_RIGHT_UP_DOWN = 2, /* 左右上下镜像(180度) */
MIR_MODE_UP_DOWN = 3, /* 上下镜像(270度) */
MIR_MODE_MAX
}eMirrorMode;
/* 旋转模式 */
typedef enum
{
ROTAT_MODE_DEG_0 = 0, /* 旋转0度 */
ROTAT_MODE_DEG_90 = 1, /* 旋转90度 */
ROTAT_MODE_DEG_180 = 2, /* 旋转180度 */
ROTAT_MODE_DEG_270 = 3, /* 旋转270度 */
ROTAT_MODE_MAX
}eRotateMode;
/* 显示模式 */
typedef enum
{
DIS_MODE_NORMAL = 0, /* 正常模式 */
DIS_MODE_OPPOSITE = 1, /* 反显示 */
DIS_MODE_MAX
}eDisMode;
/* 字节对齐 */
#pragma pack(1)
typedef struct app_lcd
{
u16 xWidth; /* 宽度 */
u16 yHeight; /* 高度 */
u32 ID; /* ID */
u8 ShowDir; /* 显示方向 */
u16 BackColor; /* 背景色 */
u16 ForeColor; /* 前景色 */
eDisMode DisplayMode; /* 显示模式 */
eMirrorMode MirrorMode; /* 镜像模式 */
eRotateMode RotateMode; /* 旋转模式 */
}LCD_DeviceTypeDef, * pLCD_DeviceTypeDef, * LCD_DeviceTypeDef_t, pLCD_DeviceTypeDef_t;
#pragma pack()
LCD_DeviceTypeDef AppDevLCD =
{
.xWidth = LCD_PHY_SIZE_WIDTH_MAX,
.yHeight = LCD_PHY_SIZE_HEIGHT_MAX,
.ID = 0,
.ShowDir = LCD_SHOW_DIR,
.BackColor = WHITE,
.ForeColor = BLACK,
.DisplayMode = DIS_MODE_NORMAL,
.MirrorMode = MIR_MODE_NORMAL,
.RotateMode = ROTAT_MODE_DEG_0
};
四、显示的ASCII、中文、图片点阵库
ASCII点阵库
/****************************************************************************************************
(0) !(1) "(2) #(3) $(4) %(5) &(6) '(7) ((8) )(9) *(10) +(11) ,(12) -(13) .(14) /(15)
0(16) 1(17) 2(18) 3(19) 4(20) 5(21) 6(22) 7(23) 8(24) 9(25) :(26) ;(27) <(28) =(29) >(30) ?(31)
@(32) A(33) B(34) C(35) D(36) E(37) F(38) G(39) H(40) I(41) J(42) K(43) L(44) M(45) N(46) O(47)
P(48) Q(49) R(50) S(51) T(52) U(53) V(54) W(55) X(56) Y(57) Z(58) [(59) \(60) ](61) ^(62) _(63)
`(64) a(65) b(66) c(67) d(68) e(69) f(70) g(71) h(72) i(73) j(74) k(75) l(76) m(77) n(78) o(79)
p(80) q(81) r(82) s(83) t(84) u(85) v(86) w(87) x(88) y(89) z(90) {(91) |(92) }(93) ~(94)
* ASCII常规字符集:
* !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
*
* 1. PCtoLCD2018.exe : 宋体 + 阴码 + 逐列式 + 逆向(低位在前) + C51格式 + 等比缩放
* 2. 英文长宽点阵集(6x12),字宽(12),字高(12)
****************************************************************************************************/
const unsigned char ASCII_FONT_1206[95][12] =
{
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
{
0x00,0x00,0x00,0x00,0x7C,0x02,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/
{
0x00,0x00,0x04,0x00,0x03,0x00,0x04,0x00,0x03,0x00,0x00,0x00},/*""",2*/
{
0x90,0x00,0xFC,0x03,0x90,0x00,0xFC,0x03,0x90,0x00,0x00,0x00},/*"#",3*/
{
0x18,0x01,0x24,0x02,0xFE,0x07,0x44,0x02,0x88,0x01,0x00,0x00},/*"$",4*/
{
0x38,0x00,0x44,0x03,0xF8,0x00,0xD0,0x01,0x2C,0x02,0xC0,0x01},/*"%",5*/
{
0xC0,0x01,0x38,0x02,0xE4,0x02,0x18,0x01,0xE0,0x02,0x20,0x01},/*"&",6*/
..............................
};
/****************************************************************************************************
* ASCII常规字符集:
* !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
*
* 1. PCtoLCD2018.exe : 宋体 + 阴码 + 逐列式 + 逆向(低位在前) + C51格式 + 等比缩放
* 2. 英文长宽点阵集(6x16),字宽(16),字高(16)
****************************************************************************************************/
const unsigned char ASCII_FONT_1608[95][16] =
{
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
{
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/
{
0x00,0x00,0x10,0x00,0x0C,0x00,0x02,0x00,0x10,0x00,0x0C,0x00,0x02,0x00,0x00,0x00},/*""",2*/
..............................
};
/****************************************************************************************************
* ASCII常规字符集:
* !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
*
* 1. PCtoLCD2018.exe : 宋体 + 阴码 + 逐列式 + 逆向(低位在前) + C51格式 + 等比缩放
* 2. 英文长宽点阵集(12x24),字宽(24),字高(24)
****************************************************************************************************/
const unsigned char ASCII_FONT_2412[95][36] =
{
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x77,0x1C,0xF0,0x0F,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/
{
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x60,0x00,0x00,0x30,0x00,0x00,0x1C,0x00,0x00,0x8C,0x00,0x00,0x60,0x00,0x00,0x30,0x00,0x00,0x1C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00},/*""",2*/
..............................
};
中文点阵库
/* (16 X 16 , 宋体 ) */
const unsigned char ChineseDemo[10][54] =
{
// 岑(0) 凌(1) 盛(2) 羽(3) 汉(4) 字(5) 显(6) 示(7) 例(8) 程(9)
{
0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x02,0x00,0x0E,0x02,0x00,0x08,0x01,0x00

本文介绍STM32F103xx系列微控制器如何通过TFT液晶屏显示ASCII字符串、中文及图片,并实现镜像和旋转功能。文中详细阐述了不同显示模式下字符与图片的绘制方法,包括镜像显示、旋转显示等,提供了丰富的代码实例。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



