【正点原子阿波罗STM32F767开发板试用体验】+汉字显示学习

  • qq1328512480
  • LV5工程师
  • |      2018-03-04 15:44:20
  • 浏览量 2025
  • 回复:1
学习汉字显示原理,掌握字库制作以及LCD显示汉字的方法 准备和思路如下 1,DS0(连接在PB1) 2,串口1(波特率:115200,PA9/PA10连接在板载USB转串口芯片CH340上面) 3,ALIENTEK 2.8/3.5/4.3/7寸LCD模块(包括MCU屏和RGB屏,都支持) 4,SD卡,通过SDMMC1(SDMMC_D0~D4(PC8~PC11),SDMMC_SCK(PC12),SDMMC_CMD(PD2))连接 5,W25Q256(SPI FLASH芯片,连接在QSPI上) 6,按键KEY0(PH3) 开机的时候先检测W25Q256中是否已经存在字库,如果存在,则按次序显示汉字(四种字体都显示)。如 果没有,则检测SD卡和文件系统,并查找SYSTEM文件夹下的FONT文件夹,在该文件夹内查找UNIGBK.BIN、 GBK12.FON、GBK16.FON、GBK24.FON和GBK32.FON(这几个文件的由来,见STM32F429开发指南)。在检测到 这些文件之后,就开始更新字库,更新完毕才开始显示汉字。通过按按键KEY0,可以强制更新字库。同样我们 也是用DS0来指示程序正在运行。 主程序部分
int main(void)

{   

	u8 led0sta=1;

	u32 fontcnt;		  

	u8 i,j;

	u8 fontx;//gbk码

	u8 key,t;

	Stm32_Clock_Init(432,25,2,9);//设置时钟,216Mhz

    delay_init(216);			//延时初始化  

	uart_init(108,115200);		//初始化串口波特率为115200  

	usmart_dev.init(108);		//初始化USMART

	LED_Init();		  			//初始化与LED连接的硬件接口

	MPU_Memory_Protection();	//保护相关存储区域

	SDRAM_Init();				//初始化SDRAM 

	LCD_Init();					//初始化LCD

	KEY_Init();					//初始化按键

	W25QXX_Init();				//初始化W25Q256 

	my_mem_init(SRAMIN);		//初始化内部内存池

	my_mem_init(SRAMEX);		//初始化外部内存池

	my_mem_init(SRAMTCM);		//初始化TCM内存池

	exfuns_init();				//为fatfs相关变量申请内存  

 	f_mount(fs,"0:",1); 		//挂载SD卡 

 	f_mount(fs,"1:",1); 		//挂载FLASH. 

	while(font_init()) 			//检查字库

	{

UPD:    

		LCD_Clear(WHITE);		   	//清屏

 		POINT_COLOR=RED;			//设置字体为红色	   	   	  

		LCD_ShowString(30,30,200,16,16,"Apollo STM32F4/F7");

		while(SD_Init())			//检测SD卡

		{

			LCD_ShowString(30,50,200,16,16,"SD Card Failed!");

			delay_ms(200);

			LCD_Fill(30,50,200+30,50+16,WHITE);

			delay_ms(200);		    

		}								 						    

		LCD_ShowString(30,50,200,16,16,"SD Card OK");

		LCD_ShowString(30,70,200,16,16,"Font Updating...");

		key=update_font(20,90,16,"0:");//更新字库

		while(key)//更新失败		

		{			 		  

			LCD_ShowString(30,90,200,16,16,"Font Update Failed!");

			delay_ms(200);

			LCD_Fill(20,90,200+20,90+16,WHITE);

			delay_ms(200);		       

		} 		  

		LCD_ShowString(30,90,200,16,16,"Font Update Success!   ");

		delay_ms(1500);	

		LCD_Clear(WHITE);//清屏	       

	}  

	POINT_COLOR=RED;       

	Show_Str(30,30,200,16,"阿波罗STM32F767试用",16,0);				    	 

	Show_Str(30,50,200,16,"云汉电子社区",16,0);				    	 

	Show_Str(30,70,200,16,"帅鸭",16,0);				    	 

	Show_Str(30,90,200,16,"2018年2月22日",16,0);

	Show_Str(30,110,200,16,"按KEY0,更新字库",16,0);

 	POINT_COLOR=BLUE;  

	Show_Str(30,130,200,16,"内码高字节:",16,0);				    	 

	Show_Str(30,150,200,16,"内码低字节:",16,0);				    	 

	Show_Str(30,170,200,16,"汉字计数器:",16,0);



	Show_Str(30,200,200,32,"对应汉字为:",32,0); 

	Show_Str(30,232,200,24,"对应汉字为:",24,0); 

	Show_Str(30,256,200,16,"对应汉字(16*16)为:",16,0);			 

	Show_Str(30,272,200,12,"对应汉字(12*12)为:",12,0);			 

	while(1)

	{

		fontcnt=0;

		for(i=0x81;i<0xff;i++)

		{		

			fontx=i;

			LCD_ShowNum(118,130,i,3,16);		//显示内码高字节    

			for(j=0x40;j<0xfe;j++)

			{

				if(j==0x7f)continue;

				fontcnt++;

				LCD_ShowNum(118,150,j,3,16);	//显示内码低字节	 

				LCD_ShowNum(118,170,fontcnt,5,16);//汉字计数显示	 

			 	fontx=j;

				Show_Font(30+176,200,fontx,32,0);

				Show_Font(30+132,232,fontx,24,0);	  

				Show_Font(30+144,256,fontx,16,0);	  		 		 

				Show_Font(30+108,272,fontx,12,0);	  		 		 

				t=200;

				while(t--)//延时,同时扫描按键

				{

					delay_ms(1);

					key=KEY_Scan(0);

					if(key==KEY0_PRES)goto UPD;

				}

				LED0(led0sta^=1);

			}   

		}	

	} 

}

调用的库有
#include "sys.h"

#include "delay.h" 

#include "led.h" 

#include "mpu.h"   

#include "usart.h"  

#include "lcd.h"  

#include "ltdc.h" 

#include "sdram.h"   

#include "key.h"

#include "usmart.h"  

#include "malloc.h"     

#include "nand.h"    

#include "ftl.h" 

#include "w25qxx.h"    

#include "sdmmc_sdcard.h" 

#include "ff.h"  

#include "exfuns.h" 

#include "text.h"
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
13510587642 2018-03-26
坐个板凳。
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子