版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 . . . I / 23摘摘 要要本文介绍了基于 STM32 的汉字显示系统设计。现如今 LCD 显示屏的技术和产业都取得了长足的发展,作为重要的现代信息发布媒体之一,LCD 显示屏在证券交易、金融、交通、体育、广告等领域被广泛的应用。基于 STM32 的 LCD 显示可以更好的满足各种需求,也更便于操作和实现。通电后,复位到初始化状态可显示本次课程设计题目与成员等基本信息,可人为操作对显示信息的汉字进行自定义大小颜色与字体等等;通过字库制作软件制作相应的字库经过 SD 卡将自己所制作的字库中的汉字在屏幕中依次显示出来,同时可以通过按键控制实现显示汉字的速度、暂停、继续以与更新字库。本系统是
2、利用 STM32 开发板配合 SD 卡实现将已存入字库中的汉字完整的显示在 LCD 彩色显示屏上。关键词:STM32; LCD 液晶显示; 开关; 汉字显示目 录1 引言 .12 总体设计 .22.1 汉字显示的基本原理.22.2 汉字显示设计分析.22.3 系统的结构框图.33 详细设计 .43.1 硬件设计 43.1.1 ALIENTEK MiniSTM32 开发板简介 43.1.2 功能简介 43.2 软件设计.83.2.1 录字软件 83.2.2 主函数部分 93.2.3 硬件部分程序 123.2.4 字库相关程序 143.2.5FAT 系统 19 . . . II / 233.2.6
3、 程序流程图 204 实验结果与分析 .214.1 硬件实验结果 214.2 结果分析 215 结论 22参考文献 .23 . . . 1 / 231 引言进入新世纪 LCD 显示屏的技术和产业都取得了长足的发展,作为重要的现代信息发布媒体之一,LCD 显示屏在证券交易、金融、交通、体育、广告等领域被广泛的应用。伴随社会信息化进程的推进,LCD 显示屏技术也在不断的推出新,应用领域愈加广阔。基于 STM32 的 LCD 显示可以更好的满足各种需求,也更便于操作和实现。现基于 STM32在液晶显示屏幕上显示文本与图形。目前,显示技术和显示工业的发展迅速。显示技术是传递视觉的信息技术。液晶显示器件
4、 LCD 是当今最有发展前途的一种平板显示器件,它具有很多独到的优异特性。它具有显示信息多、易于多彩化、体积小、重量轻、功耗低、寿命长、价格低、无辐射、无污染、接口控制方便等优点。实际的 LCD 应用中要显示的汉字一般很有限,并不需要完整的汉字库,再加上完整字库在程序中要占用大量空间,因而非完整汉字库的研究就有了其自身的现实必要性。本次课程设计主要以 TFTLCD 的 LCD 显示模块,完整的实现了汉字库的建立与显示。2 总体设计2.1 汉字显示的基本原理制作一个 GBK 字库,制作好的字库放在 SD 卡里面,然后通过 SD 卡,将字库文件复制到 W25X16 里,这样,W25X16 就相当于
5、一款汉字字库芯片了。 汉字在液晶上的显示其实就是一些点的显示与不显示,这就相当于我们的笔一样,有笔经过的地方就画出来,没经过的地方就不画。所以要显示汉字,我们首先要知道汉字的点阵数据,这些数据可以由专门的软件来生成。只要知道了一个汉字点阵的生成方法,那么我们在程序里面就可以把这个点阵数据解析成一个汉字。知道显示了一个汉字,就可以推与整个汉字库了。汉字在电脑里面存储不是以点阵数据的形式存储的,而是以码的形式存储的,每个汉字对应着一个码,在知道了码之后再去字库里面查找这个汉字的点阵数据,然后在液晶上显示出来。这个过程我们是看不到,但是计算机是要去执行的。 嵌入式要显示汉字也与此类似:汉字码-查找点
6、阵库-解析-显示。 所以只要我 . . . 2 / 23们有了整个汉字库的点阵,就可以把电脑上的文本信息在嵌入式上显示出来了。2.2 汉字显示设计分析设计一个基于 STM32 系统,开机的时候先检测 W25X16 中是否已经存在字库,如果存在,则按次序显示汉字。如果没有,则检测 SD 卡和文件系统,并查找 SYSTEM 文件夹下的 FONT 文件夹,在该文件夹查找 UNI2GBK.SYS 和 GBK16.FON。在检测到这些文件之后,就开始更新字库,更新完毕才开始显示汉字。具体要实现的目标如下:1.更新字库,即文档可进行变换;2. 初始状态显示本次课设的基本信息;3.可以将输出的文字进行字体、
7、颜色、大小的变换;4. 可对显示过的汉字进行计数;5. 显示显每个汉字所对应的存字节;6. 在运行过程中可实现暂停、继续、变速等功能。7. 每显示一个汉字后,LED0 小灯会闪烁提示一下。2.3 系统的结构框图 按键控制图 2.1 系统结构框图3 详细设计3.1 硬件设计3.1.1 ALIENTEK MiniSTM32 开发板简介ALIENTEK MiniSTM32 开发板是一款迷你型的开发板,小巧而不小气,简约而不简暂停继续更新字库显示调速STM32F103RB芯片 SD 卡创建字库在 LCD 上显示汉字 . . . 3 / 23单。它的外观尺寸只有 8cm*10cm 大小,板子的设计充分考
8、虑了成本与功能这两个矛盾面,再结合实际使用的经验与 STM32 的特点,可有可无的选择性价比最高的留下,最终确定了这样的设计。其资源丰富,设计灵活。 特点包括: 1)小巧。整个板子尺寸为 8cm*10cm*2cm。 2)灵活。板上除晶振外的所有的 IO 口全部引出,特别还有 GPIOA 和 GPIOB 的IO 口是按顺序引出的,可以极大的方便大家扩展与使用,另外板载独特的一键下载功能,避免了频繁设置 B0、B1 带来的麻烦,直接在电脑上一键下载。 3)资源丰富。板载十多种外设与接口,可以充分挖掘 STM32 的潜质。 4)质量过硬。沉金 PCB+全新优质元器件+定制全铜镀金排针/排座+ 电源
9、TVS 保护,坚若磐石。3.1.2 功能简介开机的时候先检测 W25X16 中是否已经存在字库,如果存在,则按次序显示汉字。如果没有,则检测 SD 卡和文件系统,并查找 SYSTEM 文件夹下的 FONT 文件夹,在该文件夹查找 UNI2GBK.SYS 和 GBK16.FON。在检测到这些文件之后,就开始更新字库,更新完毕才开始显示汉字。每显示一个汉字 LED0 小灯会闪烁一下。WK_UP 按键调整显示汉字的速度;key1 控制继续和暂停;key0 更新 SD 卡。所要用到的硬件资源如下: 1)STM32F103RBT6。 2)外部 LED0。 3)TFTLCD 液晶模块。 4)按键 WK_U
10、P、key1、key0。 5)W25X16。 6) SD 卡。1、 STM32 的简单介绍 . . . 4 / 23图 3.1 STM32 原理图选择 STM32F103RBT6 作为 MCU,原因是其性价比高,128K FLASH、20K SRAM、2 个 SPI、3 个串口、1 个 USB、1 个 CAN、2 个 12 位的 ADC、RTC、51 个可用 IO 脚,所以我们选择了它作为我们的主芯片。2、 外部 LED0图 3.2 外部 LED0 原理图其中 PWR 是系统电源指示灯,为蓝色。LED0 和 LED1 分别接在 PA8 和 PD2 上, . . . 5 / 23PA8 还可以通
11、过 TIM1 的通道 1 的 PWM 输出来控制 DS0 的亮度。3、 TFTLCD 液晶模块图 3.3 TFTLCD 液晶显示原理图TFT_LCD 是一个通用的液晶模块接口。OLED 是一个给 OLED 显示模块供电的接口,它和 TFT_LCD 拼接在一起。当使用 2.4/2.8的 LCD 时,我们接到 TFT_LCD 上就可以了,而当我们使用 ALIENTEK 的 OLED 模块时,则接 OLED 排阵做电源,同时会连接到 TFT_LCD 上的部分管脚,从而实现 OLED 与 MCU 的连接。4、 按键图 3.4 按键输入原理图KEY0 和 KEY1 用作普通按键输入,分别连接在 PA13
12、 和 PA15 上,他们都连接在了JTAG 相关的引脚上(KEY0 还连接在 SWDIO 上) ,KEY0 和 KEY1 还和 PS/2 的 DAT 和CLK 线共用,他们都通过 JTAG 的上拉电阻来提供上拉。 WK_UP 按键连接到 PA0(STM32 的 WKUP 引脚),它除了可以用作普通输入按键外, . . . 6 / 23还可以用作 STM32 的唤醒输入。这个按键是高电平触发的。5、 W25X16图 3.5 25X16 原理图这是 ALIENTEK MiniSTM32 开发板板载的一颗 FLASH 芯片,型号为 W25X16。这颗芯片的容量为 16M bit,也就是 2M 字节,
13、容量和 AT45DB161 一样。适合存储不常修改的数据,比如字库等。6、 SD 卡图 3.6 SD 卡部分原理图插入 SD 卡可以外扩大容量存储设备,可以用来记录数据。SD 卡我们使用的是 . . . 7 / 23SPI 模式通信,SD 卡的 SPI 接口连接到 STM32 的 SPI1 上,SD_CS 接在 PA3 上。3.2 软件设计汉字显示系统需要有 STM32 开发板配合 SD 卡使用,因此其程序需要分为以下几个文件夹,用来读取 SD 卡上的字库和 UNICODE 到 GBK 的转换码表的 FAT 系统文件,硬件组成文件 HARDWARE 系统文,汉字字库存储,与读取相应的文件 TE
14、XT 文件,以与存放主程序文件 USER 文件件,和 STM32 的系统文件。3.2.1 录字软件双击如图所示的软件,进入主界面,如图 3.7。选择中文小字库开始输入文本创建确定,如图 3.8。完成后,将生成的文件拷入 SD 卡中。图 3.7 点阵字库生成器 . . . 8 / 23图 3.8 创建字库3.2.2 主函数部分int main(void)u32 fontcnt;u8 i,j;u16 fx,fy;u8 fontx2;u8 key;u16 t,ts;Stm32_Clock_Init(9);delay_init(72);uart_init(72,9600);LCD_Init(); KE
15、Y_Init();LED_Init();SPI_Flash_Init();if(Font_Init()UPD: . . . 9 / 23POINT_COLOR=BLACK;LCD_Clear(WHITE);LCD_ShowString(60,50, STM32 );LCD_ShowString(60,70,Font Updating.);SD_Initialize(); while(FAT_Init()LCD_ShowString(60,90,FAT SYS ERROR); i= SD_Initialize();if(i)LCD_ShowString(60,110,SD_CARD ERROR)
16、; delay_ms(500);LCD_Fill(60,90,240,126,WHITE);delay_ms(500);LED0=!LED0; LED1=!LED1; while(Update_Font()!=0)LCD_ShowString(60,110,SYSTEM FILE LOST);delay_ms(500);LCD_ShowString(60,130,Please Check.);delay_ms(500);LED0=!LED0;LED1=!LED1; LCD_Clear(WHITE); RESET:LCD_Clear(WHITE); POINT_COLOR=RED;Show_St
17、r(5,5,电子系统设计,16,0);Show_Str(140,5,汉字显示系统,16,0); POINT_COLOR=BLUE; Show_Str(10,40,码:高字节 ,16,0);Show_Str(130,40,低字节,16,0);Show_Str(10,60,对应汉字,16,0);Show_Str(130,60,计数器,16,0);Show_Str(60,270, 政马舒阳佳萍 ,16,0); . . . 10 / 23Show_Str(90,290, 2015 年 7 月 9 日,16,0);POINT_COLOR=BLACK;fx=15;fy=80;ts=600;while(1)
18、fontcnt=0;for(i=0 x81;i0 xp;i+)fontx0=i;LCD_ShowNum(100,40,i,3,16);for(j=0 x40;j=220)fx=5;fy+=20;if(fy130)POINT_COLOR=RED;while(1)key=KEY_Scan();if(key=1)goto UPD;if(key=2)goto RESET;LCD_ShowString(60,190,Show Over);delay_ms(500);LCD_ShowString(60,210,Please Check.);delay_ms(500);LCD_Fill(60,210,220
19、,230,WHITE); Show_Font(100,60,fontx,16,0);Show_Font(fx,fy,fontx,16,0);t=ts;while(t-)delay_ms(1); . . . 11 / 23key=KEY_Scan();if(key=1)goto UPD;else if(key=2)while(1)key=KEY_Scan();if(key=1)goto UPD;if(key=2) break;break;else if(key=3)if(ts=600)ts=200;elsets=600;LED0=!LED0;3.2.3 硬件部分程序void KEY_Init(v
20、oid) / 键盘相应程序RCC-APB2ENR|=1CRL&=0XFFFFFFF0; GPIOA-CRL|=0X00000008; GPIOA-CRH&=0X0F0FFFFF; GPIOA-CRH|=0X80800000; GPIOA-ODR|=1ODR|=1APB2ENR|=1APB2ENR|=1CRH&=0XFFFFFFF0; GPIOA-CRH|=0X00000003; GPIOA-ODR|=1CRL&=0XFFFFF0FF;GPIOD-CRL|=0X00000300; GPIOD-ODR|=1APB2ENR|=1APB2ENR|=1CRL&=0
21、X000FFFFF; GPIOA-CRL|=0XBBB00000; GPIOA-ODR|=0X7CR1|=0CR1|=1CR1|=1CR1|=1CR1|=0CR1|=1CR1|=1CR1|=7CR1|=0CR1|=1CR1&=0XFFC7;switch(SpeedSet)case SPI_SPEED_2:SPI1-CR1|=0CR1|=1CR1|=2CR1|=3CR1|=7CR1|=1SR&1200)return 0; SPI1-DR=TxData; retry=0;while(SPI1-SR&1200)return 0; return SPI1-DR; 3.2.4 字
22、库相关程序u32 FONT16ADDR ;u32 FONT12ADDR ;u32 UNI2GBKADDR; #ifdef EN_UPDATE_FONTu8 temp512;u8 Update_Font(void)u32 fcluster=0;u32 i;u32 tempsys2; float prog;u8 t;FileInfoStruct FileTemp; . . . 14 / 23if(FAT32_Enable)fcluster=FirstDirClust;else fcluster=0; FileTemp=F_Search(fcluster,(unsigned char *)folde
23、r0,T_FILE);if(FileTemp.F_StartCluster=0)return 1; FileTemp=F_Search(FileTemp.F_StartCluster,(unsignedchar*)folder1,T_FILE);if(FileTemp.F_StartCluster=0)return 2; fcluster=FileTemp.F_StartCluster; FileTemp=F_Search(fcluster,(unsigned char *)sysfile2,T_SYS);if(FileTemp.F_StartCluster=0)return 3; LCD_S
24、howString(20,90,Write UNI2GBK to FLASH.);LCD_ShowString(108,110,%);F_Open(&FileTemp);i=0; while(F_Read(&FileTemp,temp)if(i100)t=100;LCD_ShowNum(84,110,t,3,16);UNI2GBKADDR=100000;tempsys0=UNI2GBKADDR;tempsys1=FileTemp.F_Size; SPI_Flash_Write(u8*)tempsys,0,8); delay_ms(1000);FONT16ADDR=FileTem
25、p.F_Size+UNI2GBKADDR;FileTemp=F_Search(fcluster,(unsigned char*)sysfile0,T_FON); . . . 15 / 23if(FileTemp.F_StartCluster=0)return 4;LCD_ShowString(20,90,Write FONT16 to FLASH. );F_Open(&FileTemp);i=0; while(F_Read(&FileTemp,temp)if(i100)t=100;LCD_ShowNum(84,110,t,3,16); tempsys0=FONT16ADDR;t
26、empsys1=FileTemp.F_Size;SPI_Flash_Write(u8*)tempsys,8,8);delay_ms(1000);FONT12ADDR=FileTemp.F_Size+FONT16ADDR;t=0XAA; SPI_Flash_Write(&t,24,1);LCD_ShowString(20,90, Font Update Successed ); return 0; #endif u8 Font_Init(void)u32 tempsys2;u8 fontok=0;SPI_Flash_Read(&fontok,24,1);if(fontok!=0X
27、AA)return 1;SPI_Flash_Read(u8*)tempsys,0,8); UNI2GBKADDR=tempsys0; SPI_Flash_Read(u8*)tempsys,8,8); FONT16ADDR=tempsys0; SPI_Flash_Read(u8*)tempsys,16,8); FONT12ADDR=tempsys0;return 0; /获取字库资源信息void Get_HzMat(unsigned char *code,unsigned char *mat,u8 size) . . . 16 / 23unsigned char qh,ql;unsigned c
28、har i; unsigned long foffset;qh=*code;ql=*(+code);if(qh0 x81|ql0 x40|ql=0 xff|qh=0 xff) for(i=0;i(size*2);i+)*mat+=0 x00;return; if(ql0 x7f)ql-=0 x40;else ql-=0 x41;qh-=0 x81; foffset=(unsigned long)190*qh+ql)*(size*2);if(size=16)SPI_Flash_Read(mat,foffset+FONT16ADDR,32);else SPI_Flash_Read(mat,foff
29、set+FONT12ADDR,24); void Show_Font(u16 x,u16 y,u8 *font,u8 size,u8 mode)u8 temp,t,t1;u16 y0=y;u8 dzk32;u16 tempcolor; Get_HzMat(font,dzk,size);if(mode=0)for(t=0;tsize*2;t+) temp=dzkt;for(t1=0;t18;t1+)if(temp&0 x80)LCD_DrawPoint(x,y); else tempcolor=POINT_COLOR;POINT_COLOR=BACK_COLOR;LCD_DrawPoin
30、t(x,y);POINT_COLOR=tempcolor;temp=1;y+;if(y-y0)=size)y=y0;x+;break; . . . 17 / 23elsefor(t=0;tsize*2;t+) temp=dzkt; for(t1=0;t18;t1+)if(temp&0 x80)LCD_DrawPoint(x,y); temp0 x80)bHz=1;else if(x(LCD_W-size/2)y+=size;x=0; if(y(LCD_H-size) break; if(*str=13) y+=size;x=0;str+; else LCD_ShowChar(x,y,*
31、str,size,mode);str+; x+=size/2; else bHz=0; if(x(LCD_W-size)y+=size;x=0; if(y(LCD_H-size)break; Show_Font(x,y,str,size,mode);str+=2; x+=size; u16 my_strlen(u8*str)u16 len=0;while(*str!=0)str+;len+; . . . 18 / 23return len;void my_stradd(u8*str1,u8*str2)while(*str1!=0)str1+;while(*str2!=0)*str1=*str2
32、;str2+;str1+;*str1=0; void Show_Str_Mid(u16 x,u16 y,u8*str,u8 size,u8 len) u16 strlenth=0;strlenth=my_strlen(str);strlenth*=size/2;if(strlenthlen)Show_Str(x,y,str,size,1);elsestrlenth=(len-strlenth)/2;Show_Str(strlenth+x,y,str,size,1); 3.2.5FAT 系统/用来读取 SD 卡上的字库 FAT 系统相关程序:DWORD FirstDirClust; DWORD
33、FirstDataSector;WORD BytesPerSector; DWORD FATsectors;WORD SectorsPerClust;DWORD FirstFATSector;DWORD FirstDirSector;fat32DWORD RootDirSectors;DWORD RootDirCount;BYTE FAT32_Enable;DWORD Cur_Dir_Cluster; FAT_TABLE FAT_TAB; FileInfoStruct F_Info3;u8 fat_buffer512; . . . 19 / 23u8 LongNameBufferMAX_LONG_NAME_SIZE;BOOL LongNameFlag = 0;const unsigned char *filetype23= MP1,MP2,MP3,MP4,M4A,3GP,3G2,OGG,ACC,WMA,WAV,MID,FLA,LRC,TXT,C ,H , ,FON,SYS,BMP,JPG,JPE ;3.2.6 程序流程图 . . . 20 / 23结束复制 SD 卡创建
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省深圳市宝安区重点名校2026届初三4月第二次模拟考试生物试题含解析
- 2026年陕西省安康市名校初三培优班考前测验(化学试题)试题(2)含解析
- 江苏省南通市海安市市级名校2026届初三下学期第二次阶段性过关考试生物试题含解析
- 南京市2024江苏省农业科学院第一批招聘高层次人才35人笔试历年参考题库典型考点附带答案详解
- 北京市2024天津职业技术师范大学第二批招聘41人博士或高级专业技术职务岗位笔试历年参考题库典型考点附带答案详解
- 北京市2024中国国土勘测规划院招聘应届博士毕业生6人笔试历年参考题库典型考点附带答案详解
- AI化学实验设计中的变量控制策略与高中教学研究教学研究课题报告
- 云南省2024云南楚雄州南华县农业农村局紧缺人才公开招聘(1人)笔试历年参考题库典型考点附带答案详解
- 以人工智能为驱动构建城乡教育一体化人才培养的产学研合作模式研究教学研究课题报告
- 2026年服装行业创新测试报告
- 2026智慧水利一体化建设方案
- 施工现场节后复工安全教育培训
- 车辆智能共享出行技术课件 第1章 绪论
- 苏教版科学六年级下册全册练习附答案
- 《石油化工项目可行性研究投资估算编制办法》
- 2022上海金融信息产业发展报告
- 宠物行为与心理基础-行为获得(宠物心理与行为)
- 房地产项目环境影响评价报告(优秀环评报告)
- 健身休闲综合体可行性研究报告
- FZ/T 10025-2022本色布技术要求规范
- 概率与统计(英文)chapter 2 probability
评论
0/150
提交评论