单片机源程序如下:
- /**
- ******************************************************************************
- * @file main.c
- * @author fire
- * @version V1.0
- * @date 2013-xx-xx
- * @brief 液晶显示汉字实验(字库在外部FLASH)
- */
-
- #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(&Font16x24);
- LCD_SetColors(BLACK,WHITE); //(字体颜色,背景颜色)
- ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH); /* 清屏,显示全黑 */
- /********显示字符串示例*******/
- //1,单行字
-
- // ILI9341_DispStringLine_EN_CH(LINE(0),"奥");
- // ILI9341_DispStringLine_EN_CH(LINE(1),"运");
- // ILI9341_DispStringLine_EN_CH(LINE(2),"五");
- // ILI9341_DispStringLine_EN_CH(LINE(3),"环");
-
- //2,特定位置字
- //Horizontal and Vertical 水平、垂直
- ILI9341_DisplayStringEx(10,1*10,25,25,(uint8_t *)"angleH:",0); //x坐标,y坐标,几乘几的大小
- // ILI9341_DisplayStringEx(20,1*10,25,25,(uint8_t *)"n",0);
- ILI9341_DisplayStringEx(10,1*100,25,25,(uint8_t *)"angleV:",0);
- // ILI9341_DisplayStringEx(30,1*10,25,25,(uint8_t *)"g",0); //x坐标,y坐标,几乘几的大小
- // ILI9341_DisplayStringEx(40,1*10,25,25,(uint8_t *)"l",0);
- // ILI9341_DisplayStringEx(50,1*10,25,25,(uint8_t *)"e",0);
- // ILI9341_DisplayStringEx(50,1*10,25,25,(uint8_t *)"1",0);
- /********显示变量示例*******/
- LCD_SetTextColor(GREEN);
- /*使用c标准库把变量转化成字符串*/
- // sprintf(dispBuff,"4 ",testCNT);
- // LCD_ClearLine(LINE(5)); /* 清除单行文字 */
-
- /*然后显示该字符串即可,其它变量也是这样处理*/
- ILI9341_DispStringLine_EN_CH(LINE(5),dispBuff);
-
- // /*******显示图形示例******/
- // /* 画直线 */
- // //两点确定一条直线,(x1,y1,x2,y2)
- //
- // LCD_ClearLine(LINE(7));/* 清除单行文字 */
- // LCD_SetTextColor(BLUE);
- // ILI9341_DispStringLine_EN_CH(LINE(7),"5");
- //
- // LCD_SetTextColor(RED);
- // ILI9341_DrawLine(50,170,210,170);
- // ILI9341_DrawLine(50,200,210,200);
- //
- // LCD_SetTextColor(GREEN);
- // ILI9341_DrawLine(100,150,100,270);
- // ILI9341_DrawLine(150,150,150,270);
- //
- // LCD_SetTextColor(BLUE);
- // ILI9341_DrawLine(130,170,110,170);
- // ILI9341_DrawLine(130,200,220,200);
- //
- // Delay(0xFFFFFF);
- //
- // ILI9341_Clear(0,16*8,LCD_X_LENGTH,LCD_Y_LENGTH-16*8); /* 清屏,显示全黑 */
-
-
- // /*画矩形*/
- // //(顶端的x坐标,y坐标,宽度,高度,1:全满/0:边界)
- // LCD_ClearLine(LINE(7)); /* 清除单行文字 */
- //// LCD_SetTextColor(BLUE);
- //// ILI9341_DispStringLine_EN_CH(LINE(7),"6");
- // LCD_SetTextColor(RED);
- // ILI9341_DrawRectangle(0,20,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_SetTextColor(BLACK);
- ILI9341_DrawCircle(120,150,20,0); //圆心X坐标,圆心y坐标,半径,1:圆内全部:0:园边界
-
- LCD_SetTextColor(BLUE);
- ILI9341_DrawCircle(80,150,20,0);
-
- LCD_SetTextColor(RED);
- ILI9341_DrawCircle(160,150,20,0);
- LCD_SetTextColor(GREEN);
- ILI9341_DrawCircle(140,180,20,0);
-
- LCD_SetTextColor(YELLOW);
- ILI9341_DrawCircle(100,180,20,0);
- Delay(0xFFFFFF);
- 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[64+2*i+1] << j ; //左移J位
-
- if( kk & 0x80)
- {
- printf("*"); //如果最高位为1,输出*号,表示笔迹
- }
- else
- {
- printf(" "); //如果最高位为0,输出空格,表示空白
- }
- }
- printf("\n"); //输出完一行像素,换行
- }
- printf("\n\n"); //一个字输出完毕
- }
- /* ------------------------------------------end of file---------------------------------------- */
复制代码
所有资料51hei提供下载:
1-液晶显示中英文(字库在外部FLASH).rar
(341.92 KB, 下载次数: 51)
|