基于单片机的硬件字库设计.docx

上传人:b****3 文档编号:2900270 上传时间:2022-11-16 格式:DOCX 页数:15 大小:158.74KB
下载 相关 举报
基于单片机的硬件字库设计.docx_第1页
第1页 / 共15页
基于单片机的硬件字库设计.docx_第2页
第2页 / 共15页
基于单片机的硬件字库设计.docx_第3页
第3页 / 共15页
基于单片机的硬件字库设计.docx_第4页
第4页 / 共15页
基于单片机的硬件字库设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

基于单片机的硬件字库设计.docx

《基于单片机的硬件字库设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的硬件字库设计.docx(15页珍藏版)》请在冰豆网上搜索。

基于单片机的硬件字库设计.docx

基于单片机的硬件字库设计

 

基于单片机的硬件字库设计

作者:

汤美玲

陕西理工学院(物电学院)电子信息科学与技术专业2008级陕西汉中723000

指导教师:

刘东

摘要:

随着液晶显示技术的发展和应用,越来越多的开发人员希望在自己开发的仪器设备中使用液晶屏幕来显示汉字,通常的汉字显示方式是先根据所需要的汉字提取汉字点阵如16x16点阵,将点阵文件存入ROM形成新的汉字编码,而在使用时则需要先根据新的汉字编码组成语句再由MCU根据新编码提取相应的点阵进行汉字显示,在这种显示方式中如果使用的汉字数量较大或语句较多时,利用汉字的新编码组成语句将是一件繁琐而枯燥的工作。

如果有新的汉字加入那么汉字库的维护也成问题,而我们日常生活的一些手持工具上如手机快译通等等它们可以任意输入汉字不仅灵活性大而且检索速度快,这其中的主要原因就是在这些设备中固化了硬件汉字库。

本设计就是通过keil软件编写c语言程序并生成HEX文件联合proteus电路设计仿真软件制作一个简单的硬件字库系统。

关键词:

c语言,单片机,硬件,字库

一.任务

设计并制作一个基于单片机的硬件字库系统.

二.要求

1.基本要求

1.1可显示任何汉字字符.

1.2可实现花样显示.

2.发挥部分

2.1不需要使用专门的字模软件提取固定汉字字模.

2.2可人性化设置.

三.说明

3.1时间要求:

11月12日到11月24日.

3.2完成实际电路,总结报告.

3.3本例将262KB的16x16点阵中文字库文件HZK16拆分为两个128KB文件,分别保存到两片24C1024中,多余6KB被删除,运行时,对于任意输入的汉字或中文标题符号,程序会直接从24C1024所保存的字库中提取点阵并转换为液晶格式,在12864液晶屏上显示。

四.硬件字库系统设计的基本原理及分析

本系统在两块24C1024芯片中内置了16x16点阵汉字库文件HZK16,该文件共262KB(两块芯片各保存128KB),多余的部分被删除。

本例运行时,程序根据汉字内码得到区位码,再根据区位码从硬件字库中提取汉字点阵,所提取的字库点阵进一步转换为本例液晶屏汉字显示所需要的格式后即可显示在液晶屏上。

本例显示任何汉字时,不再需要使用专门的字模软件提取固定汉字字模。

本系统框图如下图4.1图:

图4.1硬件字库系统框图

五.电路的功能单元设计

1.硬件电路的设计

该硬件字库系统是以单片机AT89C51为核心来完成的,在硬件电路方面,电路中采用P0口、P2口的前六个管脚与LCD液晶显示屏连接,这是由于P0口输出驱动电路工作处于开漏状态,它的驱动能力强。

因为在合proteus中找不到更大容量的存储芯片,本系统使用了两片具有128KB空间的24C1024保存汉字库的前半部分与后半部分,拆分字库文件时,也可以自己编写TC程序完成完成,也可以直接使用本书案例压缩包中提供的文件拆分软件。

图5.1为LCD的管脚图。

 

图5.1LCD管脚图

AT89C51是一种带4K字节闪烁可编程可擦除只读存储(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。

在闲置模式下,CPU停止工作。

但RAM,定时器,计数器,串口和中断系统仍在工作。

在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。

电路构成:

(1)单片机最小系统电路。

(2)LCD液晶显示屏驱动电路。

(3)24C1024电路部分。

图5.1为AT89C51的管脚图。

 

图5.1AT89C51管脚图

2.软件程序的设计

本系统程序中读取各汉字内码后,将2B汉字内码分别减去0xa0得到区位码,再根据区位码求出汉字点阵在字库中的位置。

由于汉字存放在94行94列的区域中,每个汉字点阵占32B,根据汉字的区位码,也就是汉字在字库表中的行列位置,可得出汉字在字库中的点阵字节的起始位置,公式为(94x(SectionCode-1)+(PlaceCode-1))x32L,其中SectionCode与PlaceCode分别为区位码和位码。

由于字库中各汉字的32B点阵是逐行取模的,每行16个像素,即2B,从上到下共32B,而本例液晶显示汉字时,需要的汉字点阵取模顺序是从汉字上半部分开始,从左到右垂直取得16B,且各字节是高位在下,低位在上,然后在从左到右取得汉字下半部分的16B,因此,本例还需要将字库点阵格式转换为液晶点阵格式。

六.测试报告

在阅读并调试本例时,可以将其中的液晶屏改为16x16点阵的LCD点阵屏,仍使用本例中的硬件字库,实现任意汉字的滚动显示。

另外,本例仅实现了全角汉字和全角英文及数字字符的显示,可进一步改进,使之能实现全角与半角文字与字符的混合显示。

七.总结

本设计是以单片机80C51芯片为核心部件,实现了硬件字库在液晶屏上显示的功能。

通过这次设计,我熟练掌握了KeilC51集成开发环境和Proteus7仿真环境的使用方法,加深了对单片机常用指令的理解与运用,同时进一步掌握c语言的熟练使用。

在设计过程中,我得到了一次用专业知识、专业技能分析和解决问题、全面系统的锻炼的机会,对于同一个设计,自己经过思考,做出多种方案,并选择其中适用的,合理的,方案进行设计,也使我在需求分析及总体分析设计、单片机的基本原理、单片机应用系统开发过程,和常用编程设计思路技巧(特别是c语言)的掌握方面都能向前迈了一大步。

同时在老师的悉心指导和严格要求下,极大地提高了电路设计与程序分析设计的能力,同时也感受到理论与实践之间的差距,使我们对单片机系统的应用有了更加深刻的认识.

参考文献

[1]梅丽凤,王艳秋,等.单片机原理及接口技术[M]清华大学出版社,2004.

[2]朱定华,刘玉.单片机原理及应用技术学习辅导[M]电子工业出版社,2001.

[3]薛钧义.MCS-51/96系列单片微型机算计及应用[M]西安交通大学出版社,1998.

[4]何立民.MCS-51系列单片机应用系统设计[M]北京航空航天大学出版社,2001.

附录1:

硬件总图,软件仿真图

附录2:

程序清单

 

附录1:

硬件总图

软件仿真图

 

 

 

 

附录2:

程序清单

//-------------------------------------------------------------------------------------------------------------------------------

//说明:

本例将262KB的16x16点阵中文字库文件HZK16拆分为两个128KB文件,分别保存到两

//片24C1024中,多余6KB被删除,运行时,对于任意输入的汉字或中文标题符号,程序会//直接从24C1024所保存的字库中提取点阵并转换为液晶格式,在12864液晶屏上显示。

//-------------------------------------------------------------------------------------------------------------------------------

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineulongunsignedlong

//12864LCD相关函数

voidLCD_Initialize();

voidDisplay_A_Char(uchar,uchar,uchar*);

voidDisplay_A_WORD_String(uchar,uchar,uchar,uchar*);

voidDisplay_A_Image(uchar,uchar,uchar,uchar,uchar*);

//I2C相关函数

voidIIC_24C1024_Init();

ucharRecString(ucharSlave,ulongMem_address,uchar*Buffer,ucharN);

//从汉字库所取得的一个汉字的点阵存放区

ucharWord_Dot_Matrix[32];

_//转换为LCD显示格式的汉字点阵存放区

ucharLCD_Dot_Matrix[32];

//-------------------------------------------------------------------------------------------------------------------------------

//读取汉字点阵并将字库点阵格式转换为液晶屏汉字取模格式

//--------------------------------------------------------------------------------------------------------------------------

voidRead_HZ_dot_Matrix_AND_Convert_TO_LCD_Fmt(ucharc[]);

{

ulongOffset;//汉字在点阵库中的偏移位置

ucharSectionCode,PlaceCode;//汉字区位码与位码

ucharAT24C1024_A1;//标识24C1024芯片编号0,1

uchari,j,LCD_Byte,block;//格式转换变量

ucharIdx[4]={0,1,16,17};//四个板块转换的起始字节索引

SectionCode=c[0]-0xa0;//取得汉字区位码

PlaceCode=c[1]-0xa0;

Offset=(94*(SectionCode-1)+(PlaceCode-1))*32L;//计算偏移

//取得偏移地址Offset的第18位,AT24C1024_A1为0时表示

//该汉字点阵处在字库前半段,即处于第一片24C1024

//否则表示该汉字点阵在字库后半段,即在第二片24C1024中

AT24C1024_A1=Offset>>17;

Offset&=0x0001FFFF;

//从Offset开始读取该汉字32B的点阵数据

if(AT24C1024_A1==0)RecString(0xa0,Offset,Word_Dot_Matrix,32);

elseRecString(0xa4,Offset,Word_Dot_Matrix,32);

//将16x16点阵分为4各8x8点阵区域进行转换(汉字上半部分与下半部分各自占两个区域)

for(block=0;block<4;block++)

{

for(i=0;i<8;i++)

{

LCD_Byte=0x

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

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

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