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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(零死角玩转stm32-高级篇5、3.2寸液晶显示(中英文+图片).pdf)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

零死角玩转stm32-高级篇5、3.2寸液晶显示(中英文+图片).pdf

1、 -第 2 页-0 0、友情提示友情提示 零死角玩转零死角玩转 STM32系列教程由初级篇初级篇、中级篇中级篇、高级篇高级篇、系统篇系统篇、四个部分组成,根据野火 STM32 开发板旧版教程升级而来,且经过重新深入编写,重新排版,更适合初学者,步步为营,从入门到精通,从裸奔到系统,让您零死角玩转 STM32。M3 的世界,与野火同行,乐意惬无边。另外,野火团队历时一年精心打造的STM32 库开发实战指南库开发实战指南将于今年 10 月份由机械工业出版社机械工业出版社出版,该书的排版更适于纸质书本阅读以及更有利于查阅资料。内容上会给你带来更多的惊喜。是一本学习 STM32 必备的工具书。敬请期待

2、!-第 3 页-5 5、液晶显示(中、英液晶显示(中、英、PicPic)5.1 实验简介实验简介 在液晶触摸画板中,我们已经成功地实现了驱动 LCD 和触摸屏,并制作了触摸画板小应用,但是若要显示文字或图片文件,则还需要利用文件系统,读取保存在 SD 卡中的字库文件、图片文件。5.2 什么是字模什么是字模 我们知道其实液晶屏就是一个由像素点组成的点阵,若要显示文字,则需要很多像素点的共同构成。见下错误!未找到引用源。错误!未找到引用源。,图中是两个由 16*16的点阵显示的两个汉字。如果我们规定:每个汉字都由这样 16*16 的点阵来显示,把笔迹经过的像素点以“1”表示,没有笔迹的点以“0”表

3、示,每个像素点的状态以一个二进制位来记录,用 16*16/8=32 个字节就可以把这个字记录下来。这 32 个字节数据就称为该文字的字模,还有其它常用字模是 24*24、32*32 的。16*16 的“字”的字模数据为:1./*字*/2.unsigned char code Bmp003=3.4./*-5.;源文件/文字:字 6.;宽高(像素):1616 7.;字模格式/大小:单色点阵液晶字模,横向取模,字节正序/32 字节 8.-*/9.Bit7 Bit0 Bit7 Bit0 每个字16x2Byte -第 4 页-10.0 x02,0 x00,0 x01,0 x00,0 x3F,0 xFC,

4、0 x20,0 x04,0 x40,0 x08,0 x1F,0 xE0,0 x00,0 x40,0 x00,0 x80,11.0 xFF,0 xFF,0 x7F,0 xFE,0 x01,0 x00,0 x01,0 x00,0 x01,0 x00,0 x01,0 x00,0 x05,0 x00,0 x02,0 x00,12.;在这样的字模中,以两个字节表示一行像素点,16 行构成一个字模。如果使用 LCD 的画点函数,按位来扫描这些字模数据,把为 1 的位以黑色来显示(也可以使用其它颜色),即可把整个点阵还原出来,显示在液晶屏上。5.3 制作字模制作字模 我们采用“字模 III-增强版 v3.9

5、1”软件来制作中文字库,步骤如下:1.打开字模软件 2.点击“自动批量生成字库”按钮选项。软件界面左下角将出现一下几个按钮选项:-第 5 页-3.点击选择“二级汉字库”按钮。在“输入批量字符”框里面将会列出二级汉字的所有汉字,其中共收录了6768 个汉字字符,非特殊情况下都能够满足大家的要求,如图:4.点击“字库智能生成”按钮,弹出“字库批量参数确认”对话框。我们在“源字体”选项里面做如下设置,需要注意的是大小问题,因为我们本次的设计目标是实现 16*16 的汉字,所以在此选择小四字体。-第 6 页-设置好之后如下:5.点击“开始转换进程”按钮.就会在安装目录下或者你设置好的目录下生成.c 后

6、缀的字库文件。6.对于 LCD 显示来说,只要能够在指定的位置描写制定颜色的点,那么就能够很好地根据汉字字模信息来描写汉字。在此,为了能够更好的清楚字模的取向和高低位的排列顺序,我们可以现先在 pc 测试我们刚才制作好的库文件。在这里我们取“当”字符的数据来测试。VC6.0 测试源码如下,该代码实现了把字模中为 1 的点都用数字“8”来表示:1.#include 2.3.unsigned char cc=4./*当字符*/5.0 x00,0 x80,0 x10,0 x90,0 x08,0 x98,0 x0C,0 x90,0 x08,0 xA0,0 x00,0 x80,0 x3F,0 xFC,0

7、 x00,0 x04,6.0 x00,0 x04,0 x1F,0 xFC,0 x00,0 x04,0 x00,0 x04,0 x00,0 x04,0 x3F,0 xFC,0 x00,0 x04,0 x00,0 x00 7.;8.9.void main()10.11.int i,j;12.unsigned char kk;13.for(i=0;i16;i+)-第 7 页-14.15.for(j=0;j8;j+)16.17.kk=cc2*i j;/左移 J 位 18.19.if(kk&0 x80)/如果最高位为 1 20.21.printf(8);22.23.else 24.25.printf()

8、;26.27.28.29.for(j=0;j8;j+)30.31.32.kk=cc2*i+1(320-16)22.23./*换行*/24.x=0;25.y+=16;26.27.28.if(y(240-16)29.30./*重新归零*/31.y=0;-第 19 页-32.x=0;33.34.LCD_Char_CH(x,y,str,Color,bkColor);35.str+=2;36.x+=16;37.38.该函数其实没做到什么工作,对超出屏幕范围的显示坐标进行换行处理,并把字符串中的汉字一个一个提取出来调用单字符显示函数LCD_Char_CH()显示出来,LCD_Char_CH()函数的源码如

9、下:1./*2.*函数名:LCD_Char_CH 3.*描述 :显示单个汉字字符 4.*输入 :x:0(319-16)5.*y:0(239-16)6.*str:中文字符串首址 7.*Color:字符颜色 8.*bkColor:背景颜色 9.*输出 :无 10.*举例 :LCD_Char_CH(200,100,好,0,0);11.*注意 :如果输入大于 1 的汉字字符串,显示将会截断,只显示最前面一个汉字 12.*/13.void LCD_Char_CH(u16 x,u16 y,const u8*str,u16 Color,u16 bkColor)14.15.16.#ifndef NO_CHNI

10、SEST_DISPLAY /*如果汉字显示功能没有关闭*/17.u8 i,j;18.u8 buffer32;19.u16 tmp_char=0;20.21.22.GetGBKCode_from_sd(buffer,str);/*取字模数据*/23.24.for(i=0;i16;i+)25.26.tmp_char=bufferi*2;27.tmp_char=(tmp_char8);28.tmp_char|=buffer2*i+1;29.for(j=0;j 15-j)&0 x01=0 x01)32.33.LCD_ColorPoint(x+j,y+i,Color);34.35.else 36.37.

11、LCD_ColorPoint(x+j,y+i,bkColor);38.39.40.41.42.#endif 43.-第 20 页-函数中的条件编译#ifndef NO_CHNISEST_DISPLAY,是用于开关汉字显示功能的,若定义了NO_CHNISEST_DISPLAY,则本函数为空,关闭了显示汉字的功能。在LCD_Char_CH()这个函数中,首先调用GetGBKCode_from_sd()从 SD卡中读出我们需要显示在 LCD 上的指定汉字的字模数据。接着在 2240 行的代码就根据字模数据来描写,把字模中为 1 的数据位,在 LCD 屏中的像素点中使用画点函数LCD_ColorPoi

12、nt()显示特定的颜色。思路和前面 VC 测试部分用数字“8”来显示“当”字是一样的。5.5.4.1 查找字模查找字模 读者现在可能在想,字库里面保存着大量的汉字字幕信息,现在输入GetGBKCode_from_sd(buffer,str)就能够拷贝出这个字符的字模数据,是怎样定位字模信息所在的位置的呢?换句话说,假如现在要显示“吾”字,是怎样根据这个字来确定“吾”字符在字库中的保存位置的呢?其实这里面有一定的映射关系,那就是接下来要说的汉字“区码”和“位码”。在前面生成的HZLIB.bin文件,实际是按国标 GB2312 生成的二级汉字库。在国标 GB231280 中规定,所有的国标汉字及符

13、号在字库中的存储形式是:分配在一个 94 行、94 列的阵列中,阵列的每一行称为一个“区”,共有01 区到 94 区;每一列称为一个“位”,共有 01 位到 94 位,阵列中的每一个汉字和符号所在的区号和位号组合在一起形成的四个阿拉伯数字就是它们的“区位码”。区位码的前两位是它的区号,后两位是它的位号。我们生成的汉字库就是这样按区位码排列的阵列,通过区位码,就能查找出该字的字模。汉字的机内码是指在计算机中表示一个汉字的编码。为避免与 ASCII 码混淆。用机内码的两个字节表示一个汉字,这两个字节分别称为高位字节和低位字节。高位字节=区码+20H+80H(或区码+A0H)低位字节=位码+20H+

14、80H(或位码+AOH)因此,我们就可以通过汉字的机内码,运算得出汉字在字库中的区位码,由区位码查找出该汉字的字模。-第 21 页-下面以 vc6.0 的测试源码来说明机内码、区位码的关系:1.#include 2.void main()3.4.unsigned char*s,*e=A,*c=古;5.unsigned char high_byte,lower_byte;/内码高字节,内码低字节 6.printf(字母%s 的 ASCII 码=,e);7.s=e;8.9.while(*s!=0)/C 的字符串以 0 为结束符*10.11.printf(%3d,*s);12.s+;13.14.pr

15、intf(n 汉字内码(10 进制)%s=,c);15.16.s=c;17.while(*s!=0)18.19.printf(%3d,*s);20.s+;21.22.23.printf(n 汉字内码(16 进制)%s=,c);24.25.s=c;26.while(*s!=0)27.28.printf(%0X,*s);29.s+;30.31.32.33.s=c;34.high_byte=*s;35.36.s+;37.lower_byte=*s;38.39.printf(nn 汉字%s对应的n 内码高字节:%dn 内码低字节:%dn,c,high_byte,lower_byte);40.print

16、f(nn 汉字%s对应的n 区码为:%d-160=%dn 位码为:%d-160=%dn,c,high_byte,high_byte-160,lower_byte,lower_byte-160);41.42.printf(nn 汉字%s在区位码表中的位置为%d%dn,c,high_byte-160,lower_byte-160);43.printf(汉字区位码表可参考网站:http:/ 对应的汉字刚好就是%snn,high_byte-160,lower_byte-160,c);45.46.测试结果如下:-第 22 页-打开汉字区位码表在线查询网站:http:/ 查询“古”汉字的区位码刚好如计算所得,为。上面的测试结果说明了每一个汉字的内码具体作用。回到本实验工程中获取字模函数GetGBKCode_from_sd()中,它的具体定义如下:1./*2.*函数名:GetGBKCode_from_sd 3.*描述 :从 sd 卡上的字库文件中拷贝指定汉字的字模数据 4.*输入 :pBuffer-数据保存地址 5.*c-汉字字符低字节码 6.*输出 :0 (成功)7.*-1 (失败)8.*/9.1

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

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