單片機源程序如下:
- /**
- ******************************************************************************
- * @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)
2018-10-6 23:38 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|