ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:1.87MB ,
资源ID:5867637      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5867637.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于ARM的汉字显示系统设计毕业设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于ARM的汉字显示系统设计毕业设计.docx

1、基于ARM的汉字显示系统设计毕业设计(此文档为word格式,下载后您可任意编辑修改!)摘 要本文介绍了基于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.5 FAT系统 193.2.6 程序流程图

3、204 实验结果及分析 214.1 硬件实验结果 214.2 结果分析 215 结论 22参考文献 231 引言进入新世纪LCD显示屏的技术和产业都取得了长足的发展,作为重要的现代信息发布媒体之一,LCD显示屏在证券交易、金融、交通、体育、广告等领域被广泛的应用。伴随社会信息化进程的推进,LCD显示屏技术也在不断的推陈出新,应用领域愈加广阔。基于STM32的LCD显示可以更好的满足各种需求,也更便于操作和实现。现基于STM32在液晶显示屏幕上显示文本及图形。目前,显示技术和显示工业的发展迅速。显示技术是传递视觉的信息技术。液晶显示器件LCD是当今最有发展前途的一种平板显示器件,它具有很多独到的

4、优异特性。它具有显示信息多、易于多彩化、体积小、重量轻、功耗低、寿命长、价格低、无辐射、无污染、接口控制方便等优点。实际的LCD应用中要显示的汉字一般很有限,并不需要完整的汉字库,再加上完整字库在程序中要占用大量空间,因而非完整汉字库的研究就有了其自身的现实必要性。本次课程设计主要以TFTLCD的LCD显示模块,完整的实现了汉字库的建立与显示。2 总体设计2.1 汉字显示的基本原理制作一个GBK字库,制作好的字库放在 SD 卡里面,然后通过 SD 卡,将字库文件复制到W25X16里,这样,W25X16就相当于一款汉字字库芯片了。 汉字在液晶上的显示其实就是一些点的显示与不显示,这就相当于我们的

5、笔一样,有笔经过的地方就画出来,没经过的地方就不画。所以要显示汉字,我们首先要知道汉字的点阵数据,这些数据可以由专门的软件来生成。只要知道了一个汉字点阵的生成方法,那么我们在程序里面就可以把这个点阵数据解析成一个汉字。知道显示了一个汉字,就可以推及整个汉字库了。汉字在电脑里面存储不是以点阵数据的形式存储的,而是以内码的形式存储的,每个汉字对应着一个内码,在知道了内码之后再去字库里面查找这个汉字的点阵数据,然后在液晶上显示出来。这个过程我们是看不到,但是计算机是要去执行的。 嵌入式要显示汉字也与此类似:汉字内码-查找点阵库-解析-显示。 所以只要我们有了整个汉字库的点阵,就可以把电脑上的文本信息

6、在嵌入式上显示出来了。2.2 汉字显示设计分析设计一个基于STM32系统,开机的时候先检测 W25X16中是否已经存在字库,如果存在,则按次序显示汉字。如果没有,则检测 SD卡和文件系统,并查找 SYSTEM 文件夹下的FONT 文件夹,在该文件夹内查找UNI2GBK.SYS和GBK16.FON。在检测到这些文件之后,就开始更新字库,更新完毕才开始显示汉字。具体要实现的目标如下:1.更新字库,即文档可进行变换;2. 初始状态显示本次课设的基本信息;3.可以将输出的文字进行字体、颜色、大小的变换;4. 可对显示过的汉字进行计数;5. 显示显每个汉字所对应的内存字节;6. 在运行过程中可实现暂停、

7、继续、变速等功能。7. 每显示一个汉字后,LED0 小灯会闪烁提示一下。2.3 系统的结构框图暂停继续更新字库显示调速 按键控制图2.1 系统结构框图3 详细设计3.1 硬件设计3.1.1 ALIENTEK MiniSTM32 开发板简介ALIENTEK MiniSTM32 开发板是一款迷你型的开发板,小巧而不小气,简约而不简单。它的外观尺寸只有8cm*10cm 大小,板子的设计充分考虑了成本与功能这两个矛盾面,再结合实际使用的经验及STM32的特点,可有可无的选择性价比最高的留下,最终确定了这样的设计。其资源丰富,设计灵活。 特点包括: 1)小巧。整个板子尺寸为8cm*10cm*2cm。 2

8、)灵活。板上除晶振外的所有的IO 口全部引出,特别还有GPIOA 和GPIOB 的IO 口是按顺序引出的,可以极大的方便大家扩展及使用,另外板载独特的一键下载功能,避免了频繁设置B0、B1 带来的麻烦,直接在电脑上一键下载。 3)资源丰富。板载十多种外设及接口,可以充分挖掘STM32 的潜质。 4)质量过硬。沉金PCB+全新优质元器件+定制全铜镀金排针/排座+ 电源TVS 保护,坚若磐石。3.1.2 功能简介开机的时候先检测 W25X16中是否已经存在字库,如果存在,则按次序显示汉字。如果没有,则检测 SD卡和文件系统,并查找 SYSTEM 文件夹下的FONT 文件夹,在该文件夹内查找UNI2

9、GBK.SYS和GBK16.FON。在检测到这些文件之后,就开始更新字库,更新完毕才开始显示汉字。每显示一个汉字LED0 小灯会闪烁一下。WK_UP按键调整显示汉字的速度;key1控制继续和暂停;key0更新SD卡。所要用到的硬件资源如下: 1)STM32F103RBT6。 2)外部LED0。 3)TFTLCD 液晶模块。 4)按键WK_UP、key1、key0。 5)W25X16。 6) SD卡。1、 STM32的简单介绍图3.1 STM32原理图选择STM32F103RBT6 作为MCU,原因是其性价比高,128K FLASH、20K SRAM、2 个SPI、3 个串口、1 个USB、1

10、个CAN、2 个12 位的ADC、RTC、51 个可用IO 脚,所以我们选择了它作为我们的主芯片。2、 外部LED0图3.2 外部LED0原理图其中PWR 是系统电源指示灯,为蓝色。LED0 和LED1 分别接在PA8 和PD2 上,PA8 还可以通过TIM1 的通道1 的PWM 输出来控制DS0 的亮度。3、 TFTLCD 液晶模块图3.3 TFTLCD 液晶显示原理图TFT_LCD 是一个通用的液晶模块接口。OLED 是一个给OLED 显示模块供电的接口,它和TFT_LCD 拼接在一起。当使用2.4/2.8的LCD 时,我们接到TFT_LCD 上就可以了,而当我们使用ALIENTEK的OL

11、ED 模块时,则接OLED 排阵做电源,同时会连接到TFT_LCD 上的部分管脚,从而实现OLED 与MCU 的连接。4、 按键图3.4 按键输入原理图KEY0 和KEY1 用作普通按键输入,分别连接在PA13 和PA15 上,他们都连接在了JTAG相关的引脚上(KEY0 还连接在SWDIO 上),KEY0 和KEY1 还和PS/2 的DAT 和CLK 线共用,他们都通过JTAG 的上拉电阻来提供上拉。 WK_UP 按键连接到PA0(STM32 的WKUP 引脚),它除了可以用作普通输入按键外,还可以用作STM32 的唤醒输入。这个按键是高电平触发的。5、 W25X16图3.5 25X16原理

12、图这是ALIENTEK MiniSTM32 开发板板载的一颗 FLASH芯片,型号为W25X16。这颗芯片的容量为16M bit,也就是 2M字节,容量和AT45DB161 一样。适合存储不常修改的数据,比如字库等。6、 SD 卡图3.6 SD卡部分原理图插入SD 卡可以外扩大容量存储设备,可以用来记录数据。SD 卡我们使用的是SPI 模式通信,SD 卡的SPI 接口连接到STM32 的SPI1 上,SD_CS 接在PA3 上。3.2 软件设计汉字显示系统需要有STM32开发板配合SD卡使用,因此其程序需要分为以下几个文件夹,用来读取SD卡上的字库和UNICODE到GBK的转换码表的FAT系统

13、文件,硬件组成文件HARDWARE系统文,汉字字库存储,及读取相应的文件TEXT文件,以及存放主程序文件USER文件件,和STM32的系统文件。3.2.1 录字软件双击如图所示的软件,进入主界面,如图3.7。选择中文小字库开始输入文本创建确定,如图3.8。完成后,将生成的文件拷入SD卡中。图3.7 点阵字库生成器图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);LCD_Init();

14、 KEY_Init(); LED_Init(); SPI_Flash_Init(); if(Font_Init() UPD: POINT_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) delay_ms(500); delay_ms(500); LED0

15、=!LED0; LED1=!LED1; while(Update_Font()!=0) delay_ms(500); delay_ms(500); LED0=!LED0; LED1=!LED1; ; LCD_Clear(WHITE); RESET: LCD_Clear(WHITE); POINT_COLOR=RED; Show_Str(5,5,电子系统设计,16,0); Show_Str(140,5,汉字显示系统,16,0); POINT_COLOR=BLUE; Show_Str(10,40,内码:高字节 ,16,0); Show_Str(10,60,对应汉字,16,0); POINT_COL

16、OR=BLACK; fx=15; fy=80; ts=600; while(1) fontcnt=0; for(i=0x81;i0xp;i+) for(j=0x40;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; delay_ms(500); delay_ms(500); Show_Font(fx,fy,fontx,16,0); t=ts; while(t-) delay_ms(1); key=KEY_Scan(); i

17、f(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; else ts=600; LED0=!LED0; 3.2.3 硬件部分程序void KEY_Init(void) / 键盘相应程序 RCC-APB2ENR|=1CRL&=0XFFFFFFF0; GPIOA-CRH&=0X0F0FFFFF; GPIOA-ODR|=1ODR|=1APB2ENR|=1APB2ENR|=1CRH&=0X

18、FFFFFFF0; GPIOA-ODR|=1CRL&=0XFFFFF0FF;void SPIx_Init(void) /SD卡驱动程序 RCC-APB2ENR|=1APB2ENR|=1CRL&=0X000FFFFF; 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&12

19、00)return 0; SPI1-DR=TxData; retry=0; while(SPI1-SR&1200)return 0; return SPI1-DR; 3.2.4 字库相关程序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; if(FAT32_Enable) fclus

20、ter=FirstDirClust; else fcluster=0; FileTemp=F_Search (fcluster, (unsigned char *) folder0, T_FILE); if(FileTemp.F_StartCluster=0) return 1; FileTemp=F_Search(FileTemp.F_StartCluster, (unsigned char*)folder1, T_FILE); if(FileTemp.F_StartCluster=0) return 2; fcluster=FileTemp.F_StartCluster; FileTemp

21、=F_Search (fcluster, (unsigned char *) sysfile2, T_SYS); if(FileTemp.F_StartCluster=0) return 3; LCD_ShowString (20,90,Write UNI2GBK to FLASH.); F_Open(&FileTemp);i=0; while (F_Read (&FileTemp,temp) ) if (i100) t=100; UNI2GBKADDR = 100000; tempsys0 = UNI2GBKADDR; tempsys1 = FileTemp.F_Size; SPI_Flas

22、h_Write(u8*)tempsys,0,8); delay_ms(1000); FONT16ADDR = FileTemp.F_Size+UNI2GBKADDR;FileTemp = F_Search(fcluster, (unsigned char*)sysfile0 , T_FON); if (FileTemp.F_StartCluste r= 0) return 4; LCD_ShowString (20,90,Write FONT16 to FLASH. ); F_Open(&FileTemp); i=0; while(F_Read(&FileTemp,temp) if(i100)

23、t=100; tempsys0=FONT16ADDR; tempsys1=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

24、_Read(&fontok,24,1) ; if(fontok!=0XAA) 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) u

25、nsigned char qh,ql; unsigned char i; unsigned long foffset; qh=*code;ql=*(+code); if(qh0x81 |ql0x40 |ql=0xff |qh=0xff) for(i=0;i(size*2);i+)*mat+=0x00;return; if(ql0x7f)ql-=0x40; else ql-=0x41; qh-=0x81; foffset=(unsigned long)190*qh+ql)*(size*2); if(size=16)SPI_Flash_Read (mat,foffset+FONT16ADDR,32); else SPI_Flash_Read (mat,foffset+FONT12ADDR,24); void Show_Font (u16 x,u16 y,u8 *font,u8 size

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1