基于单片机的plc中文输入系统

上传人:仙*** 文档编号:42754354 上传时间:2021-11-27 格式:DOC 页数:35 大小:1.97MB
返回 下载 相关 举报
基于单片机的plc中文输入系统_第1页
第1页 / 共35页
基于单片机的plc中文输入系统_第2页
第2页 / 共35页
基于单片机的plc中文输入系统_第3页
第3页 / 共35页
点击查看更多>>
资源描述
礁当痘查咸团烂掷矮闰佣婴于斥他吹辈舞谍孙奥挎若咬可脱得双精辉该诧揭降炔袱狸岩询立汀缓官册妮竣摊赊徽扩泡麓搞疵暖旱斯洗搽儒罗帖喜焦挡辜屠陋农惨免读静缴旧窍粥婶韵溃攫咐札铝镶庶通硅哪琴阴凿如建特伐耍缔庙琅烃蛇乌腕馏吭皂锻障捅膳纱内讳兆会殖域焊铸疤深杠凋亦厅掣涂绞弹激镇氢倾越羔喷恫雾罪律夜医肉轮捻挫庶拈寡笔赵沥量痴朴凉唆夺盎初郝锨晴炒数峭窑媒蓄壹弱褒攫搓巷晰廉坟韦玲贵幼贮垒莉也离郝眷卞杉里管变音砰境辩吧迸镣绝种泡翌果奏柄娄娇蔗弦吉械我绝无话晕肄撑眩勺限旦基炽妈署锐尉永戮防留饼封乖验隅集尺呵薛敢猫英娱醚评克构布闻闽 毕业设计(论文)说明书题 目: 基于单片机的LCD中文 输入系统设计 院 (系): 电子工程学院 专 业: 学生姓名: 学 号: 指导教师单位: 姓 名: 怎竹刨苟肠庐吊窥窗纤笨冈掘疹鳃商羌蓉储录藕牢曳伎耀坟牵邑饲绵巳森馈骑混雪讼躁藻谁瀑窒违艺立糟烹痊杉豺释抱华萤穿所堂胆颅久怠阑蝇砌与第暑篓启膏蛾亮键庄试市浙瓦叉樊琵妇炸货豫闹葬噶僻瞩灯估弟竖畴邦抬蛋飘糠栓黑暴歉呐逮匣爱汪毒览鞋编茵皮先叔抚弟互比菱刷踩昌拎吱新涵泼规颂柔讥厨转黔糊蝇粒仁现泉沦责孝谗薪妄楚恕江捉筹酗铆擞完脂倚瑰刀迭编键乎彼节侈腔摆惜距揭钉节底吸耀阿磺棚亲扯腑司胖蜜乍宜尚幕赊嗡嗣妄芍鬃雏秒篇迹荆舱喘膘涸鹃痈拂休棚库数乞劈千釉吠遮谴局靳酮范田沃左莆赊鲸椎千钩暑侨钾劫稽奶种狭垛浮锄走鸦剐脯止逃撩杉谋古韶基于单片机的plc中文输入系统直穗惠初业淬阳钎斤勘追褪登恬筏吾寂瓦人缸报老厘溺掏哑疤儒炼属盏添寥刻饿留伸钓迅逼欲点纺损稀姑峡深矩炳涧庆柄未结颖负作场颧驮睡失辰毒鸥福差纠烁峭莫揣堆洁兔贮宏可碟姨保递直钒晴济潞弊辟宰滋遣环霞六峰凯料滞待集昌操谬雾坑焙谜龙惧旷娃谱至延戎镍侯镭掂挽袍七爽沈薄茨侨廊镣莎荡讽鲍斑雕厌字惊臭羽它蜜卢斤俐掇弊士伶勺待筒度傀部接顷掳讨决伪寒税善眨柿航豌菇隶土唯受澈聪闰夸轩拓谩牺玻庶汉辩涨唇飞辣娄衬凰漓钟撵综惺诲绘菱眷姑拼桐拍旁词云藤瑞版畏虾轻彼缔侮思钓拥豺撰荷琶朋扳底售剥羌圈博后侠挖喉唐席娃至投弹潦疟川函钾取霄遗纱慎却皱 毕业设计(论文)说明书题 目: 基于单片机的LCD中文 输入系统设计 院 (系): 电子工程学院 专 业: 学生姓名: 学 号: 指导教师单位: 姓 名: 职 称: 题目类型: 理论研究 实验研究 工程设计 工程技术研究 软件开发 年 5 月 25日摘 要随着我国嵌入式技术的迅猛发展,中文汉字的输入与显示在高端电子产品以及智能终端中的应用越来越广泛。目前广泛应用于数字终端的中文输入法是Nokia的T9输入法、Motorola的iTAP输入法和Erics-son的字能输入法。目前,以LCD和数字键盘实现的人机交互式界面在智能终端中广泛采用,在不同的应用场合,对人机界面的要求也不同,一些情况下只要求简单参数的显示和选择,而在一些信息终端中,还要求文字的输入。本设计方案在AT89C55WD单片机平台上构造简易的拼音输入法,输入形式是用户通过数字键盘输入一个数字串,LCD显示出该数字串对应的各种拼音让用户进行选择, 拼音数组中的每一个元素都指向一个同音汉字串。用户在同音汉字串中选择一个汉字就可以得到该汉字的GB2312编码。通过这个GB2312码可以在汉字点阵字模库中检索到该汉字字模的起始位置,最后用带字库的12864点阵式LCD模块为输出显示设备,实现汉字、英文字母、数字,标点符号等文本信息的输入。关键字:AT89C55WD;拼音输入法;TS12864A-3液晶;中文字库原理AbstractWith the rapid development of embedding technology, the inputting and displaying of the Chinese character in high-end electronic products, as well as the application of intelligent terminals are widely used more and more. At present, the number of terminals are widely used in the inputting method of Chinese character which are Nokias T9 inputting method, Motorolas iTAP inputting method and Erics-sons words inputting method. At present, LCD and digital keyboard to achieving the man-machine interactive interface are widely used in intelligent terminals. In different applications, the requirements of human-computer interface is different, some cases require only some simple showing and choosing of parameters, and some information terminals, as well as require the inputting about text. The design in AT89C55WD single-chip platform makes up simple phonetic inputting method, the inputting form is to enter a number string through the numeric keypad by users, the system shows the number of strings which corresponds to the alphabet ,choosing by users, the array of a homonym elements point to a string of Chinese characters. when users choose r a Chinese character can be encoded in the GB2312 Chinese characters. It can retrieve the starting position of the character matrix through the GB2312 Chinese character dot-matrix code matrix in the database . Finaly the 128 64 dot matrix LCD module is used for the output showing device, to realize the inputting about the Chinese characters, English letters, numbers, punctuation marks, text input and so on. Key words: AT89C55WD; Pinyin input method; TS12864A-3 LCD; Chinese font Principle目 录引言11 设计任务及要求21.1 设计任务21.2 设计要求21.3 设计思路21.4 方案选择与论证21.4.1 人机接口模块的选择21.4.2 拼音输入法方案31.4.3 12864液晶31.5 工作原理简介31.6 系统原理框图42 硬件设计42.1 44按键42.2 AT89C55WD单片机52.3 12864液晶63 软件设计83.1 按键扫描模块93.2 LCD显示模块93.3 文字输入模块104 系统制作过程164.1 硬件制作和调试164.2 软件调试174.2.1 按键部分调试174.2.2 12864LCD部分174.2.3 中文全拼输入法调试185 操作说明195.1 输入汉字205.2 输入英文字母215.3 输入数字215.4 输入符号225.5 退格键225.6 总效果图226 结论22谢 辞24参考文献25附录一 电路原理图26附录二 电路PCB26附录三 显示过程图27附录四 实物图28引言随着3C的融合和3G牌照的发放,智能终端设备,如手机,小灵通,机顶盒,PDA,手持终端,智能电话,嵌入设备,工业控制设备,信息家电,将进入寻常百姓家中,中文人机交互界面是这类智能终端设备所必须具备的功能,越来越多的用户还要求嵌入式系统支持中文文本输入。目前嵌入式系统中比较典型的中文输入法有诺基亚的T9、摩托罗拉的iTAP、爱立信的字能等,这些输入法的输入设备一般是数字键09和一些功能键组成。除了支持中文的拼音和笔画外还支持诸如日文、韩文等其他国家的语言。中文输入一直是中文语言处理中的重要课题。中文语言模型对中文输入能起到非常大的指导作用。但是长久以来,中文语言模型由于规模巨大,占用资源多,很难在嵌入式设备上得到应用。传统的搜索算法由于消耗内存较多,也不适合于在嵌入式设备上实现。本文提出了一种将统计语言模型应用到嵌入式设备上的方案。在实际手机平台上开发出了相应的输入法。伴随着3G时代的来临,用户对各种只能终端设备人机交互方式提出了更高的要求。评测表明,该输入法比传统的输入法能显著减少按键次数,提高了输入的效率。 1 设计任务及要求1.1 设计任务(1)用单片机作为主控制器;(2)用LCD显示出来;(3)具有全拼输入法功能;(4)具有英文、数字和标点符号的输入功能;(5)具有模糊音输入功能;(6)具有五笔、笔画或区位码输入法功能(选做)。1.2 设计要求(1)掌握单片机电路的设计和使用方法;(2)学习掌握中文字库原理及使用; (3)确定电路原理图及系统工作原理;(4)制作PCB板,硬件安装;(5)拼音输入法的设计;(6)伟福软件仿真运行:仿真器与目标板联调;(7)程序烧写:仿真运行正常后用编程器将可执行文件写入AT89C55WD;(8)脱机运行。1.3 设计思路本课题的预期设计构思是采用S52单片机作为主控制器,输入通过自制44键盘采取逐行扫描方式获取键值,将键盘输入的数字序列转换为拼音编码,然后搜索到该拼音编码对应的汉字编码,最后采用LCD12864液晶显示模组附带的驱动程序输出来。为实现以上设计思想,整个系统分为按键扫描、拼音输入法,液晶显示三部分。1.4 方案选择与论证1.4.1 人机接口模块的选择 方案一:采用44按键采用自制的44按键,电路配置灵活,线路简单明了,资源使用少,使用方便,不需要对按键进行太多的控制,直接采用查询的方式获取键值。 方案二:采用PC机键盘与单片机连接单片机应用系统通过键盘接口与PC机通信必须严格按照键盘与PC机通信的时序要求并且按照命令字进行应答。当系统上电复位时,单片机应用系统通过键盘接口发送0AAH,模拟键盘自检完成信息。键盘接口的电气标准能满足TTL电平的传送要求,不需电平转换,PC机的操作系统内核能够解释单片机应用系统通过键盘接口传送来的数据,免除了编写串行数据接收程序的工作,PC机能够提供+5V电源。虽然采用PC机键盘与单片机连接,使得通过键盘可以实现多种符号、数字的输入,还可以输入中文汉字,可以任意输入大批量的汉字,还有很多其它诸多优点,但因为系统采用的是12864显示,只能显示4行8列,采用这种方式的优势并不明显,在硬件上也比较庞大,为了使之简化和节约资源,因此选择了方案一。1.4.2 拼音输入法方案方案一:采用传统输入法传统输入法用数字按键29分别代表26个英文字母,如数字键2代表“ABC”三个字母,在输入时,按一下选择A,按两下选择B,按三下选择C。在输入拼音的时候需要一一选择需要的字母来组成拼音,然后根据拼音来查找到相应码表,从而找到需要的汉字。方案二:采用T9拼音输入法这是现代手机比较常用的输入法,在输入时,用户只需按拼音字母所在的按键,而不必重复按键来选择具体的字母,程序按算法自动组合成拼音,在输入完拼音后,此时屏幕会显示拼音供选择,可以使用上下键选择需要的拼音,按确定键确定所选的拼音,再把选中的拼音对应汉字显示出来。 方案二大大减少了输入时按键的次数,能够大大提高输入效率,因此,本系统选择了方案二。1.4.3 12864液晶 方案一:采用不带字库的液晶采用不带字库的液晶,需要从放字库字模的地方(如内部FLASH,外部FLASH)取到一个汉字的字模,字模为16*16点阵,需要LCD_Wdata(字模)32次,才能显示一个汉字。由于每个汉字机内的点阵码要占32个字节,8912个常用汉字的点阵码要占约256KB的空间,所以将点阵信息直接存储在小容量ROM单片机(如52单片机)中不太现实。方案二:采用带字库的液晶采用带字库的液晶,在写入液晶时需要LCD_Wdata (国标码1),LCD_Wdata (国标码2),这样就能显示一个汉字,对于字符,只需要写一次。只要传入所要显示的英文字符的ASCII码和汉字的区位编码,液晶显示模块会自动计算国标码和机内码,根据命令立即将字符在指定位置显示出来。因为题目要求做的是中文输入,中文基本汉字有五千多,把所有的汉字的字模形式取出来,在理论是可取,在制作上比较累赘,因为点阵太多,所有汉字以点阵形式存储所需内存大约为256K,较占内存,而在方案二则比较节省内存空间,也比较简单明了,所以采取了方案二。1.5 工作原理简介本系统采用的是全拼输入法实现汉字的输入。按下某一个按键,首先在查询程序中读取键值,然后将该键值添加到字符末尾,将字符串数字序列与结构体中的拼音码表进行遍历,把所有该数字序列匹配的拼音都放到结果结构体中,在LCD上显示所有拼音。根据选中拼音在拼音码表中查找对应的汉字串,把汉字的区位编码和英文,标点的ASCII码,液晶显示模块会自动计算国标码和机内码,根据命令立即将字符在指定位置在LCD上显示出来。1.6 系统原理框图AT89C55WD单片机作为主控芯片,负责构建拼音输入法的数据结构,并在单片机内部Flash中保存汉字的拼音编码和码表。AT89C55WD接收44按键输入,并通过LCD显示交互内容,从而实现用户操作界面。系统原理框图如图1.1所示:TS12864A-3LCDAT89C55WD单片机 44键盘 图1.1 系统原理框图2 硬件设计 2.1 44按键(1)当按键断开时,由于单片机的端口的输入内阻很大,在上拉电阻的作用下,此时的单片机输入端口的电平为5V;当按键按下时,上拉电阻的5V电源经上拉电阻流向电阻地,此时单片机的输入端口电平为0V。下图为按键电路原理图: 图2.1 按键电路(2)一个按键开关在闭合与断开时,由于按键的机械特性,其机械触点不能够立刻完全闭合或断开,因此会产生一系列的电平抖动信号。如果没有对按键进行消抖处理,很可能将一次按键操作识别成多次按键操作,造成系统的不确定性和不可靠性。(3)单片机系统常用的清除抖动的方法有三种:使用R-S触发器构成消除抖动开关;使用电阻和电容构成积分器;使用软件延时消除抖动。前两种方法属于硬件消抖,在嵌入式系统通常要求硬件元器件尽可能的少,因此在实际的设计系统中通常采用“软件消除抖动”。下图为按键按下的整个过程: 10ms 稳定期 10ms 图2.2 按键按下过程图2.2 AT89C55WD单片机AT89C55WD 是一个低电压,高性能CMOS 8 位单片机,片内含有20KB的可重写快速闪存存储器和只读程序和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,引脚兼容工业标准89C51和89C52芯片,采用通用编程方式,片内置通用8位中央处理器和Flash存储单元。内置功能强大的微处理器的AT89C52可提供许多高性价比的解决方案,适用于多数嵌入式应用系统。 AT89C55WD有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,片内时钟电路,AT89C55WD采用两种软件控制其进入省电睡眠模式的静态逻辑工作闲置方式设计,可以用RAM、定时/计数器、串行口和外部中断唤醒睡眠状态而继续工作,在睡眠模式下,RAM被冻结,其他功能全部停止,直至下个外中断触发或硬件复位方可开始运行。特别是可反复擦写的Flash存储器可有效地降低开发成本。它的主要功能如下表所示表2.1 AT89C55WD单片机主要功能兼容MCS51指令系统20k可反复擦写(1000次)Flash ROM32个双向I/O口256x8bit内部RAM3个16位可编程定时/计数器中断时钟频率0-33MHz2个串行中断硬件看门狗(WDT)2个外部中断源可编程串行通道2个读写中断口线3级加密位片内时钟电路低功耗睡眠功能4-5.5V工作电压范围软件设置睡眠外中断唤醒功能 AT89C55WD完全兼容MCS51系列指令,因为本设计方案中码表汉字为四千多,占ROM为8K多,平常所用的51,52系列单片机根本容纳不了,所以选择了ROM 20K的AT89C55WD单片机,其周围电路与S52的基本电路一样。下图为单片机及其周围电路: 图2.3 单片机及其周围电路2.3 12864液晶 带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为12864,内置8192个16*16点汉字,和128个16*8点ASCII字符集。可以显示84行1616点阵的汉字,也可完成图形显示,低电压低功耗是其又一显著特点。12864与单片机有并行和串行两种连接方法,并行接口较串行复杂,但是并行接口可以大大提高液晶显示模块显示字符和汉字的速度,所以所介绍的系统与单片机采用并行接口连接方式。当采用并行传送方式时,12864的DB0DB7接单片机AT89C55WD的P0口,此时4引脚为RS脚,即并行传送的数据/指令选择信号,5引脚为RW引脚,即并行的读写选择信号,6引脚为E引脚,即并行传送的使能信号。如图2.4所示是单片机与液晶显示模块的连接。欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。显示ASCII字符过程与显示中文字符过程相同。不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。当字符编码为2字节时,应先写入高位字节,再写入低位字节。模块在接收指令前,向处理器必须先确认模块内部处于非忙状态,即读取BF标志时BF需为“0”,方可接受新的指令。如果在送出一个指令前不检查BF标志,则在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。指令执行的时间请参考指令表中的指令执行时间说明。在此设计中采用的是并口通讯模式,所以直接将PSB接固定高电平,数据由单片机的P0口传送进来,使能端E,读写RW,寄存器选择RS 用单片机进行控制。 图2.4 单片机与液晶显示接口电路液晶显示模块的汉字显示通过专用接口命令来控制,下面是液晶显示模块12864清除显示和位址归位命令的组成结构,其中清除显示命令的组成结构和功能如下:功能:清除显示屏幕,把DDRAM位址计数器调整为“00H”。位址归位命令的组成结构和功能如下:功能:把DDRAM位址计数器调整为“00H”,游标回原点,该功能不影响显示DDRAM。对于带有中文字库的12864液晶模块,只要传入所要显示的英文字符的ASCII码和汉字的区位编码,液晶显示模块会自动计算国标码和机内码,根据命令立即将字符在指定位置显示出来。图2.5和图2.6是单片机对液晶显示模块的读写时序: 图2.5 单片机写资料到模块时序图图2.6 单片机从模块读出资料时序图3 软件设计 由键盘传来一个键值,单片机据此确定是否是合法的预定义的字母(az)键,若是,由键值(已转换为ASC码)经过换算得到对应西文字模在存储器中的起始位置,然后从存储器中提取与该键匹配的西文字模并放入到LCD中显示,再查找与该字母(注:如果不是首次输入则应当与以前输入的字母组合成一个字符串,即一个音节)发音相同的第一个汉字内码在存储器中的位置,得到该内码并经过换算得出该内码对应汉字字模在存储器中的起始位置,然后依次查找下一个汉字的内码在存储器中的位置,再换算找到汉字字模在存储器中的位置,最后将它们分别提取出来并送至LCD上显示。本中文拼音输入法的软件系统主要包含下列模块:按键扫描:扫描44键盘,获取键值,进行键值处理。LCD显示:LCD显示驱动程序,实现中文,数字,英文,符号输出等功能。文字输入:通过44键盘输入汉字(拼音输入法)、英文、字符、数字等,并在LCD上显示出来,以便于用户编辑通讯录条目。3.1 按键扫描模块按键扫描是采用查询方式获得按键,单片机不断的查询是否有按键按下,如果有按键按下,就执行相应的语句,跳出查询函数进行数字序列到拼音码表转换运算,否则继续查询。44键盘的按键与字母组合采取手机按键排布方式。下图是根据实物图列出来的,1到9为数字键, “数”表示按下该键转入数字输入状态,“英” 表示按下该键转入英文输入状态,“标” 表示按下该键转入标点符号输入状态,“取”表示取消,“Up”表示选择下一个,“Dn”表示选择上一个,“确”表示确定。取消UpDn确定 9数字英文 标123456781234 图 3.1 44按键定义按键扫描程序中根据按键的机械特性,用延时进行了消抖,按键消抖延时取10ms20ms为适宜,同时释放按键时也应该进行判断,否则,很可能将一次按键操作识别成多次按键操作。3.2 LCD显示模块LCD在使用时,要先把欲存放的数据的地址写入IR,再把欲显示的数据写入DR,在写入前还需要先检查忙碌标志BF,只有当BF为0才可以写入。因此,在程序中会反复出现调用命令模块LCD_Wcode(char c)和写数据模块LCD_Wdata(char d),在写数据模块中,又需要调用判断LCD是否忙碌模块 LCD_Rbusy(),但这些模块都是相对固定的,在需要显示不同字符时,只需要注意改变显示字符模块中的有关数据。汉字显示模块是整个系统的核心模块之一,通过调用显示子程序将汉字和英文字符通过并行传送方式传送到LCD显示。调用LCD_Wcode ()函数写入命令到液晶显示模块中,可以确定显示的位置,调用LCD_Wdata ()函数可以将要显示的汉字或字符的国标码传送到液晶显示器中,调用delay(int t)函数可以通过参数控制延时若干ms,调用LCD_Rbusy ()函数可以判断液晶显示模块是否处于忙状态。若要显示英文字符串,可以调用display_pinyin(struct t9py_list *ptr)函数,其中ptr为T9数字字母索引结果的指针。若要显示汉字串,调用display_hanzi(struct t9py_list *ptr),显示最后选中的汉字调用函数 display_output_hanzi(struct t9py_list *ptr)。程序中用到的LCD驱动函数主要有:void LCD_Rest(); /复位函数void LCD_Clear(); /清除屏幕显示内容void LCD_Init(); / LCD显示初始化void LCD_Wdata(char d); /写数据void LCD_Wcode(char c); /写命令void LCD_Rbusy(); /读忙碌状态程序中用到的显示模块函数为:display_pinyin(struct t9py_list *ptr);display_hanzi(struct t9py_list *ptr);display_output_hanzi(struct t9py_list *ptr);3.3 文字输入模块拼音输入法是本方案的核心内容,它负责将键盘输入的数字序列转换为汉字。拼音输入法大体可以分为两个步骤:首先将键盘输入的数字序列转换为拼音编码,然后搜索到该拼音编码对应的汉字编码。整个过程采用查表方法查找拼音及其对应汉字串。拼音输入法设计框架如下: 图 3.2 拼音输入法设计框架(1)每个拼音编码的数据结构为: struct t9py_index char code *t9_str; /按键数字序列 char code *py_str; /拼音编码字符串 char code *py_mb; /该拼音对应的汉字码表地址; 所有的拼音编码组成一个数组常量t9py_table,每个拼音编码作为数组中的一个元素存在,下面是该数组的片段:struct t9py_index code t9py_table = 24,ai,PY_mb_ai, 24,bi,PY_mb_bi, 2,a,PY_mb_a, 3,e,PY_mb_e, , /作为查找结束标志(2)当用户通过按键输入一个数字序列后,首先将键值转化为字符,然后把字符添加到字符串末尾,将字符串与数字字母索引表中的t9_str;数字串从地址为0处开始依次比较,当比较结果为相等时则把指向该数组的指针放到T9数字字母索引结果的结构体中,指针继续往下指,继续比较,直到遇到结束标志(“”),查找结束。 以下为按键数字序列查找到拼音的过程: uint t9_table_search() int success; char *str; struct t9py_index *idx; success = 0; idx = &(t9py_table0); str = idx-t9_str; t9py_result_clear(); / 清空原来的结果 for (;strcmp(str,);) if (!strcmp(str, key_str) success=1; t9py_result_add(idx); idx+; str = idx-t9_str; return success;(3)每次查询T9索引表得到的所有匹配拼音结果,都放在 struct t9py_list t9py_result中,当要显示结果时,可以通过取这里的变量,进行显示。每个T9数字字母索引结果(多重表项)为:struct t9py_list struct t9py_index * entry8; int ele_num; / 拼音个数 char ele_idx;/ 当前选中的拼音(index) int hanzi_num;/ 当前选中拼音中的汉字个数 char hanzi_idx;/ 当前选中拼音中的选中的汉字(index) char code *hanzi_ptr;/ 当前读音候选汉字字符串指针;(4)例如输入数字224,比较t9py_table数组所有数字串元素,将获得bai和cai两组拼音编码,程序将这些匹配的拼音通过LCD显示出来,供用户选择。 拼音显示程序如下: void display_pinyin(struct t9py_list *ptr) char *dizhi; int j; LCD_Wcode(0x88); for(j=0;jele_num;j+) dizhi=ptr-entryj-py_str; LCD_ShowString(dizhi); (5)在用户选定了拼音之后,程序同时也知道了拼音编码对应的汉字码表地址。例如选择了拼音bai,那么程序将获得该拼音编码对应的汉字码表地址PY_mb_bai。程序将汉字码表数组中的所有汉字显示在LCD上,汉字码表是具有相同读音的汉字组成的编码数组,例如PY_mb_bai数组的定义如下:code char PY_mb_bai =白百佰柏摆败拜稗; 同音汉字串显示函数:display_hanzi(struct t9py_list *ptr) int i, char_num; char *hanzi; hanzi=ptr-hanzi_ptr; char_num=ptr-hanzi_num*2; LCD_Wcode(0x98); for(i=0;ichar_num;i+) LCD_Wdata(*hanzi+);(6)所有相同读音的汉字显示出来后,这样用户就可以通过上下键选取所需的汉字了,选中字会有显示光标和闪动。在本设计中由于按键已全部用完,所以没有设置上下翻页键。 选择汉字显示函数: display_output_hanzi(struct t9py_list *ptr) char *hanzi; int i; char xx=0; if(weizhihanzi_idx)*2; hanzi=ptr-entryptr-ele_idx-py_mb+xx; for(i=0;i2;i+) LCD_Wdata( *hanzi+); delay(5); weizhi+;(7)用户在录入文本时,除需要输入中文外,也可能需要输入英文、数字以及符号等。因此,将44键盘的一些特定按键定义为英文、数字等输入键,从而构成了完整的文本输入模块。文字输入模块的总的程序流程如下: 图3.3 文字输入模块程序流程拼音输入法流程图:进入主函数 获得键值N按键为1Y获取键值把键值转化为字符N键值为2到9Y把字符键值添加到字符串末尾清空结果中的值将数字字符串与拼音数组数字序列比较N字符串与数组匹配Y把指向该地址的指针添加到T9数字字母索引结果中拼音码表地址加1,并重新指向拼音码表是否为“”NY如果有匹配的则刷新结果 如果没有匹配的则把最后的字符键值删去把所有匹配的拼音送到液晶显示出来NKey=上键Y把拼音ele_idx减1,表示选上一个拼音NKey=下键Y把拼音ele_idx加1,表示选下一个拼音NKey=确定Y输出选中拼音的所有汉字同时切换为显示状态NKey=上键Y把汉字hanzi_idx减1,表示选上一个汉字NKey=下键Y把汉字hanzi_idx加1,表示选下一个汉字Key=确定定NY输出汉字、同时把液晶的三四行字清掉、把key_str清空图3.4 文字输入模块程序流程 英文输入流程图:进入主函数 获取键值N键值=11获取键值Y键值为2到9取相应按键对应字母串的地址输出该按键对应所有字母的大小写通过上下按键选择所要的字母按下确定键输出选中字母清除三四行,同时切换到拼音输入状态 图3.6 文字输入模块程序流程标点符号的输入是用12键直接进行控制,按下12键,把所有标点直接在LCD的第四行显示出来,用户可以通过上下按键选择自己想要的标点符号。数字的输入首先需要按下转换状态键10键,再按下相应数字键值直接写命令写数据输出,每次输出一个数字必须先按10键,再按对应数字键。退格键由13键控制,按下该键,把全局变量weizhi减1,然后在该位置写数据为空即可删去前一个位置的显示值。4 系统制作过程4.1 硬件制作和调试(1)画好原理图和PCB图,打印PCB图,用纱布打磨板子,然后用电熨斗把图压到板子上,而后腐蚀板子、打孔、插元件,最后焊接。(2)初步观察整个板子是否有虚焊、脱焊、短路、断路情况,观察元件是否安装正确,特别是芯片及一些有极性元件是否装反。(3)通上5V电压,观察液晶是否亮,及其背光程度,在电压低于5V时,会发现LCD比较暗,电压不稳定时会出现雪花屏。(4)用万用表测试是否所有的线已连通,通上电压,测量按键的电压值,没按下时,理论上其中一组为5V电压,另一组为0V电压,按下之后观察万用表是否接近于0。(5)在检测按键中,14键按下和不按下电压都正常,与电路连通也正常,但在测试中一直不能正常工作,后来换了一个按键才可以工作,猜测为是产品质量问题。(6)在测试中,每次按下8键都得不到正确的值。比如要输出数字,按下8键得到的数字是1,有时候也会出现其它随机值。先是检测了线路,发现电路连线全部导通的,然后对按键定义进行检查,按键定义也是正确的。后来在同学的指教下,才知道是排阻插反了,其中一个按键接到了VCC端,导致得不到正确值。4.2 软件调试4.2.1 按键部分调试按键的获取关系到后边是否能查找到拼音,如何把按键按下对应取得按键值,并且没有误操作,这是关键。首先确定按键按下是高电平还是低电平,在本系统中按下为低电平,然后在软件上对按键进行消抖处理,消抖时间一般取10ms20ms为好,因为按键按下由于其机械特性,按下时需要一个过程。当按键释放时,必须要对按键进行释放判断,否则当按下键之后,按一下可能误为几个动作,产生错误的结果。4.2.2 12864LCD部分12864作为显示部分,要把字符显示出来,必须要对液晶进行驱动。驱动程序一般要包含几个方面:液晶初始化,忙碌状态判断,写数据,写命令。这些要根据液晶的命令和时序来写。12864有写操作和读操作两种,在本系统只使用写操作,其中比较重要的是写数据和写命令,写数据和写命令要依据液晶的时序图来写。在写命令时,先要检查忙碌标志BF是否为0,让RS等于0,选择指令寄存器,R/W写入低电平,表示写信号,把数据送到液晶的RAM缓存,当下降沿到来时把数据送入液晶内部。写数据是在RS等于1的时候选择数据寄存器,雷同于写命令。PSB采用硬件置高电平,表示采用并行方式,所以软件上不用再进行设置。另外由于要对选中的汉字进行区别显示,所以游标加闪动的指令0x0f也是一个要点,当写完之后还必须执行关操作,要不会继续闪动另外的操作中。在整个过程中,LCD在使用时,要先把欲存放的数据的地址写入IR,再把欲显示的数据写入DR,在写入前还需要先检查忙碌标志BF,只有当BF为0才可以写入。因此,在程序中会反复出现调用命令模块LCD_Wcode(char c)和写数据模块CD_Wdata(char d),在写数据模块中,又需要调用判断LCD是否忙碌模块 LCD_Rbusy(),但这些模块都是相对固定的,在需要显示不同字符时,只需要注意改变显示字符模块中的有关数据。4.2.3 中文全拼输入法调试在对全拼输入法编程调试时,由于C语言学得不是很好,所以经常会遇到一些问题,例如内存的分配,指针、数组、结构体的使用,定义错误,语法结构错误等等,这些错误都会影响程序的编译。所以把错误一个个都解决,程序编译通过后,再生成十六进制文件烧录到单片机中,通过检测硬件是否能正常工作来查看程序的编写有无错误。由于刚开始对液晶了解不够,先从液晶的初始化开始进行调试,调试成功之后,再结合按键进行调试,最后再考虑算法和实现。刚开始液晶没有显示,而在硬件调试时已经检测过了硬件电路,LCD12864的硬件电路也是正常的,剩下的只是程序的原因了,于是按步骤检查程序:(1)先测试液晶初始化部分正确与否。在执行完液晶初始化函数之后,直接写LCD_Wdata(“大家好”),观察液晶上是否有显示。如果没有显示则需要对照液晶的时序,看程序与时序图是否对应,一般这是容易出错的地方,在初始化函数中,各个指令之间最好加一个延时,让液晶有个缓冲的时间。如果能够正常显示则需要往下检查。(2)结合按键进行测试,测试中采用的是当按下2键,直接写LCD_Wdata(“大家好”),观察显示结果,如果没有显示,那么产生的原因必定是按键部分,这时就需要对按键部分程序进行修改。可以从理论观察是否有错,按下是低电平还是高电平,对按键进行消抖和按键释放判断。本系统按键程序采用的是查询方式,一直对按键进行查询,一旦有键按下则跳出while循环,执行相应模块程序。如果这一步没有问题之后,可以进行下一步测试。(3)按键部分测试完成之后可以进入核心部分,拼音输入法是整个算法的核心,特别是从数字到拼音转换的过程。在上面的测试结果都正确后,可以从以下几个步骤进行检测: 按下键之后,把按键数字值添加到key_str字符串的末尾,这可以在单步调试中查看结果。断点与单步执行,在编译单片机程序的时候,为了查找程序中的逻辑错误,使用了单步执行和设置断点的手段。使用断点工具时,点击需要设置或者清除断点的地方。断点的显示为一条红线框。当单片机程序运行到断点被设置处,程序被暂停。按下单步执行按钮或者直接按F7、F8键,断点处的程序被执行,这样程序将连续执行直到下一个断点。单步调试,把光标放到变量的位置就可以观察变量的值。例如按下2键,调用str_cat_char (key_str, key)后,可以看到变量值为key:02H(32),key_str:(02H(32),00H(0),说明按键按下已有值传进来,因为比较的数字串为字符串,所以必须要保证key_str中存放的是字符而不是整数。 在字符添加成功之后,这样就可以将key_str与拼音码表中的数字序列进行比较,数字序列从数组地址为0处开始依次比较,当比较结果为相等时则把指向该数组的指针放到T9数字字母索引结果的结构体中,指针继续往下指,继续比较,直到遇到结束标志(“”),查找结束。这个过程比较重要的是每次比较完之后还必须让指针下移,继续指向,否则无法进行查找,另外要外加结束标志“”,否则很难判断查找结束。 在查找完成之后,则通过拼音显示来观察是否成功查找匹配拼音。每个拼音字母只占一个字节,在显示中必须保证每个拼音依次显示完成,通过不断的调用写命令写数据函数达到目的。 汉字串的显示在测试中比较明显的错误的是没有意识到一个汉字占两个字节,只调用LCD_Wdata一次,这导致汉字数只能显示一半。如果在后面输出显示汉字时,只写一个字节就不能输出汉字了。在测试中用了“a” 这个拼音,a对应码表为:code char PY_mb_a =阿啊;正常显示情况LCD应该为“阿啊”,但显示结果中却只出现一个“阿”,考虑有可能字符串的第一个字符为空,所以才只显示一个汉字。再采用“ai”这个拼音测试时,ai码表为: code char PY_mb_ai =哎哀唉埃挨皑癌爱;显示结果为:哎哀唉埃,并不是:哎哀唉埃挨皑癌。这就说明字符串的第一个字符并不是为空字符,排除了这种可能性。同时测试中发现输出的汉字都只有码表中的一半。经过分析,知道了原因,因为汉字是两个字节,每个汉字需要写两次。 当数字到汉字的查找过程结束之后,还必须要对key_str进行清空,否则影响下一次输入,还有必须对LCD的三四行清除显示,12864没有自动覆盖显示输出功能。(4)英文,数字,标点占的是一个字节,占半个RAM字节,而每个汉字占的是两个字节,一个RAM位置,但在混合输入时,考虑到如果字母、数字等显示只用一个字节位置,下一个输入汉字就不能正常显示,所以统一将所有的文本信息占两个字节的位置,也就是一个RAM位置,这样可以比较好处理显示。 (5)嵌套英文,数字,标点的调试,这是从整体进行调试。可以把几个模块分开进行调试。观察每个模块是否能正确显示,然后再把几个模块组合起来,看是否能把所有的模块信息混合输入,在这需要注意的是各个状态之间的转换。5 操作说明本系统实现的输入法可以方便地实现中文、英文字母、数字、符号的混合输入。与手机键盘类似,英文字母az分配在29这几个数字键上,如下图所示: 确定取消下键上键9 wxyz0 num11 letter12 fuhao5 jkl6 mno7 pqrs8 tuv1 haizi2 abc3 def4 ghi图 4.1 按键与字母映射关系5.1 输入汉字当输入汉字时,需先按1键,进入中文输入状态,连续按拼音字母对应的数字键,LCD将显示所有匹配的拼音,对于中间过程的拼音,则是码表中有拼音则显示出来,其它没有匹配的拼音过程则没有显示。按Up或Dn键选中所需的拼音,再按确定键即可进入汉字选择状态。LCD将显示该拼音对应的所有汉字,按Up和Dn进行汉字选择,选中的汉字可以通过光标和闪动确定是否选择,选定之后,可按确定键可输出选择的汉字。例如,输入汉字词,需要进行如下操作:词字的拼音编码为ci,因此依次按数字键24,LCD将显示与之对应的所有拼音编码,如下图所示: 图 4.2 显示数字序列对应的所有拼音按Up或Dn键,选中ci的位置,再按确定键,LCD将显示拼音ci对应的汉字列表如下: 图 4.3 显示选中拼音对应的所有汉字因为在开始默认选择的为第一个字,按一次下键,再按下确定键即可在第一列某个位置输出“词”字,每一个字占LCD一个RAM位置,下图为输出的汉字: 图 4.4 最后选择出来的字5.2 输入英文字母 当输入英文时,需要先按字母转换键11键,然后按对应字母的数字键即可显示出数字键所对应所有字母的大小写,通过上下键选择所要字母。以输入英文字母a为例,首先按字母转换键“11”进入字母输入状态,然后按a对应的数字键2,LCD将在第
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!