F103RCT6+tft显示程序
PCtoLCD2013字模软件:
GB2312字模
寻址公式:
pos = ((High8bit-0xa1)*94+Low8bit-0xa1)*16*16/8;
其中:16*16/8 的16*16为矩阵大小,根据自己的配置修改。
工程中读取字模的函数为 bsp_spi_flash.c 文件的 GetGBKCode_from_EXFlash 。
stm32单片机源程序如下:
- /**
- ******************************************************************************
- * @file main.c
- * @author fire
- * @version V1.0
- * @brief 液晶显示汉字实验(字库在外部FLASH)
- ******************************************************************************
- * @attention
- *
- * 实验平台:秉火 F103-MINI STM32 开发板
- ******************************************************************************
- */
-
- #include "stm32f10x.h"
- #include "./usart/bsp_usart.h"
- #include "./lcd/bsp_ili9341_lcd.h"
- #include "./flash/bsp_spi_flash.h"
- static void LCD_Test(void);
- static void Delay ( __IO uint32_t nCount );
- void Printf_Charater(void) ;
- int main(void)
- {
- //LCD 初始化
- ILI9341_Init ();
- /* USART config */
- USART_Config();
-
- printf("\r\n ********** 液晶屏中文显示程序(字库在外部FLASH)*********** \r\n");
- printf("\r\n 若汉字显示不正常,请阅读工程中的readme.txt文件说明,根据要求给FLASH重刷字模数据\r\n");
- //其中0、3、5、6 模式适合从左至右显示文字,
- //不推荐使用其它模式显示文字 其它模式显示文字会有镜像效果
- //其中 6 模式为大部分液晶例程的默认显示方向
- ILI9341_GramScan ( 6 );
-
- Printf_Charater();
-
- while ( 1 )
- {
- LCD_Test();
- }
-
-
- }
- /*用于测试各种液晶的函数*/
- void LCD_Test(void)
- {
- /*演示显示变量*/
- static uint8_t testCNT = 0;
- char dispBuff[100];
-
- testCNT++;
-
- LCD_SetFont(&Font8x16);
- LCD_SetColors(RED,BLACK);
- ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH); /* 清屏,显示全黑 */
- /********显示字符串示例*******/
- ILI9341_DispStringLine_EN_CH(LINE(0),"秉火3.2_2.8寸LCD参数:");
- ILI9341_DispStringLine_EN_CH(LINE(1),"分辨率:240x320 px");
- ILI9341_DispStringLine_EN_CH(LINE(2),"ILI9341液晶驱动");
- ILI9341_DispStringLine_EN_CH(LINE(3),"XPT2046触摸屏驱动");
- /********显示变量示例*******/
- LCD_SetTextColor(GREEN);
- /*使用c标准库把变量转化成字符串*/
- sprintf(dispBuff,"显示变量: %d ",testCNT);
- LCD_ClearLine(LINE(5)); /* 清除单行文字 */
-
- /*然后显示该字符串即可,其它变量也是这样处理*/
- ILI9341_DispStringLine_EN_CH(LINE(5),dispBuff);
- /*******显示图形示例******/
- /* 画直线 */
-
- LCD_ClearLine(LINE(7));/* 清除单行文字 */
- LCD_SetTextColor(BLUE);
- ILI9341_DispStringLine_EN_CH(LINE(7),"画直线:");
-
- LCD_SetTextColor(RED);
- ILI9341_DrawLine(50,170,210,230);
- ILI9341_DrawLine(50,200,210,240);
-
- LCD_SetTextColor(GREEN);
- ILI9341_DrawLine(100,170,200,230);
- ILI9341_DrawLine(200,200,220,240);
-
- LCD_SetTextColor(BLUE);
- ILI9341_DrawLine(110,170,110,230);
- ILI9341_DrawLine(130,200,220,240);
-
- Delay(0xFFFFFF);
-
- ILI9341_Clear(0,16*8,LCD_X_LENGTH,LCD_Y_LENGTH-16*8); /* 清屏,显示全黑 */
-
-
- /*画矩形*/
- LCD_ClearLine(LINE(7)); /* 清除单行文字 */
- LCD_SetTextColor(BLUE);
- ILI9341_DispStringLine_EN_CH(LINE(7),"画矩形:");
- LCD_SetTextColor(RED);
- ILI9341_DrawRectangle(50,200,100,30,1);
-
- LCD_SetTextColor(GREEN);
- ILI9341_DrawRectangle(160,200,20,40,0);
-
- LCD_SetTextColor(BLUE);
- ILI9341_DrawRectangle(170,200,50,20,1);
-
- Delay(0xFFFFFF);
-
- ILI9341_Clear(0,16*8,LCD_X_LENGTH,LCD_Y_LENGTH-16*8); /* 清屏,显示全黑 */
- /* 画圆 */
- LCD_ClearLine(LINE(7)); /* 清除单行文字 */
- LCD_SetTextColor(BLUE);
-
- ILI9341_DispStringLine_EN_CH(LINE(7),"画圆");
-
- LCD_SetTextColor(RED);
- ILI9341_DrawCircle(100,200,20,0);
-
- LCD_SetTextColor(GREEN);
- ILI9341_DrawCircle(100,200,10,1);
-
- LCD_SetTextColor(BLUE);
- ILI9341_DrawCircle(140,200,20,0);
- Delay(0xFFFFFF);
-
- ILI9341_Clear(0,16*8,LCD_X_LENGTH,LCD_Y_LENGTH-16*8); /* 清屏,显示全黑 */
- }
- /**
- * @brief 简单延时函数
- * @param nCount :延时计数值
- * @retval 无
- */
- static void Delay ( __IO uint32_t nCount )
- {
- for ( ; nCount != 0; nCount -- );
-
- }
- /*"当"字符的字模16x16 */
- unsigned char charater_matrix[] =
- { /*"当",0*/
- 0x01,0x00,0x21,0x08,0x11,0x08,0x09,0x10,0x09,0x20,0x01,0x00,0x7F,0xF8,0x00, 0x08,
- 0x00,0x08,0x00,0x08,0x3F,0xF8,0x00,0x08,0x00,0x08,0x00,0x08,0x7F,0xF8,0x00,0x08,
- };
-
- /**
- * @brief 使用串口在上位机打印字模
- * 演示字模显示原理
- * @retval 无
- */
- void Printf_Charater(void)
- {
- int i,j;
- unsigned char kk;
-
- /*i用作行计数*/
- for ( i=0;i<16;i++)
- {
- /*j用作一字节内数据的移位计数*/
- /*一行像素的第一个字节*/
- for(j=0; j<8; j++)
- {
- /*一个数据位一个数据位地处理*/
- kk = charater_matrix[2*i] << j ; //左移J位
- if( kk & 0x80)
- {
- printf("*"); //如果最高位为1,输出*号,表示笔迹
- }
- else
- {
- printf(" "); //如果最高位为0,输出空格,表示空白
- }
- }
- /*一行像素的第二个字节*/
- for(j=0; j<8; j++)
- {
- kk = charater_matrix[2*i+1] << j ; //左移J位
-
- if( kk & 0x80)
- {
- printf("*"); //如果最高位为1,输出*号,表示笔迹
- }
- else
- {
- printf(" "); //如果最高位为0,输出空格,表示空白
- }
- }
- printf("\n"); //输出完一行像素,换行
- }
- printf("\n\n"); //一个字输出完毕
- }
- /* ------------------------------------------end of file---------------------------------------- */
复制代码
所有资料51hei提供下载:
29-液晶显示中英文.rar
(7.49 MB, 下载次数: 169)
|