基于单片机的plc中文输入系统设计(编辑修改稿)内容摘要:
空 ASCII 字符位置。 当字符编码为 2 字节时,应先写入高位字节,再写入低位字节。 第 7 页 共 28 页 模块在接收指令前,向处理器必须先确认模块内部处于非忙状态,即读取 BF 标志时 BF 需为 “0”,方可接受新的指令。 如果在送出一个指令前不检查 BF 标志,则在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。 指令执行的时间请参考指令表中的指令执行时间说明。 在此设计中采用的是并口通讯模式,所以直接将 PSB 接固定高电平,数据由单片机的 P0 口传送进来,使 能端 E,读写RW, 寄存器选择 RS 用单片机进行控制。 图 单片机与液晶显示接口电路 液晶显示模块的汉字显示通过专用接口命令来控制 , 下面是液晶显示模块 12864 清除显示和位址归位命令的组成结构 , 其中清除显示命令的组成结构和功能如下 : 功能 : 清除显示屏幕 , 把 DDRAM 位址计数器调整为“ 00H”。 位址归位命令的组成结构和功能如下 : 功能 : 把 DDRAM 位址计数器调整为“ 00H” , 游标回原点 , 该功能不影响显示DDRAM。 对 于 带有中文字库的 12864 液晶模块 , 只要传入所要显示的英文字符的 ASCII 码和汉字的区位编码 , 液晶显示模块会自动计算国标码和机内码 , 根据命令立即将字符在指 第 8 页 共 28 页 定位置显示出来。 图 和图 是单片机对液晶显示模块的读写时序: 图 单片机 写资料到模块时序图 图 单片机 从模块 读出资料 时序图 3 软件设计 由 键盘传来 一个键值, 单片机据此确定是否是合法的预定义的字母( a~z)键, 若是,由键值(已转换为 ASCⅡ 码)经过换算得到对应西文字模在存储器中的起始位置,然后从存储器中提取与该键匹配的西文字模并放入到 LCD中显示 , 再查找与该字母(注:如果不是首次输入则应当与以前输入的字母组合成一个字符串,即一个音节)发音相同的第一个汉字内码在存储器中的位置,得到该内码并经过换算得出该内码对应汉字字模在存储器中的起始位置 , 然后依次查找下一个汉字的内码在存储器中的位置,再换算找到汉字字模在存储器中的位置,最后 将它们分别提取出来并送至 LCD 上显示。 本 中文拼音输入法 的软件系统主要包含下列模块 : 按键扫描 : 扫描 44 键盘,获取键 值 ,进行键值处理。 LCD 显示 : LCD 显示驱动程序,实现 中文,数字,英文, 符 号 输出 等功能。 文字输入 : 通过 44 键盘输入汉字(拼音输入法 )、英文、 字符、数字等 , 并在 LCD 上显示出来,以便于用户编辑通讯录条目。 第 9 页 共 28 页 按键扫描模块 按键扫描是 采用查询方式获得按键,单片机不断的查询是否有按键按下,如果 有按键按下, 就执行相应的语句 , 跳出查询函数进行数字序列到拼音码表转换运算, 否则继续查询。 44 键盘的 按键与字母组合 采取手机按键排布方式。 下图是根据实物图列出来的 , 1 到 9 为数字键 , “ 数 ” 表示按下该键转入数字输入状 态 , “ 英 ” 表示按下该键转入英文输入状态 , “ 标 ” 表示按下该键转入标点符号输入状态 , “ 取 ” 表示取消 ,“ Up” 表示选择下一个 , “ Dn” 表示选择上一个 , “ 确 ” 表示确定。 图 44 按键定义 按键扫描程序中根据按键的机械特性,用延时 进行了消抖, 按键消抖 延时 取10ms~20ms 为适宜, 同时 释放按键时也应该进行判断,否则, 很可能将一次按键操作识别成多次按键操作。 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()。 //复位函数 4 3 2 1 8 7 6 5 4 3 2 1 确定 Dn Up 取消 标 英文 数字 9 第 10 页 共 28 页 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); 文字输入模块 拼音输入法是本方案的核心内容,它负责将键盘输入的数字序列转换为汉字。 拼音输入法大体可以分为两个步骤:首先将键盘输 入的数字序列转换为拼音编码,然后搜索到该拼音编码对应的汉字编码。 整个过程采用查表方法查找拼音及其对应汉字 串。 拼音输入法设计框架 如下 : 图 拼音输入法设计框架 ( 1) 每个拼音编码的数据结构为: struct t9py_index { char code *t9_str。 //按键数字序列 char code *py_str。 //拼音编码字符串 char code *py_mb。 //该拼音对应的汉字码表地址 }。 所有的拼音编码组成一个数组常量 t9py_table[],每个拼音编码作为数组中的一个元素存在,下面是该数组的片段: 第 11 页 共 28 页 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 = amp。 (t9py_table[0])。 str = idxt9_str。 t9py_result_clear()。 // 清空原来的结果 for (。 strcmp(str,)。 ) { if (!strcmp(str, key_str)) { success=1。 t9py_result_add(idx)。 } idx++。 str = idxt9_str。 } return success。 } ( 3) 每次查询 T9索引表得到的所有匹配拼音结果,都放在 struct t9py_list t9py_result中, 当要显示结果时,可以通过取这里的变量,进行显示。 每个 T9数字字母索引结果(多重表项)为: struct t9py_list { 第 12 页 共 28 页 struct t9py_index * entry[8]。 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。 jptrele_num。 j++) { dizhi=ptrentry[j]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=ptrhanzi_ptr。 char_num=ptrhanzi_num*2。基于单片机的plc中文输入系统设计(编辑修改稿)
相关推荐
智威汤逊培训手册 21 世纪素材资源平台 中国最大素材资料平台 160984104智威汤逊法则这本手册解释了智威汤逊法则的重要性和如何应用在广告的策划及创意中。 它也是智威汤逊法则培训班的每日备忘录。 按这本手册行事,智威汤逊法则会易如反掌,对你的日常工作有真正帮助更全面收集信息、更具洞察力地分析市场及品牌,设定完全可把握,可达到的目标,制订更有针对性的策略,撰写出更完善和更有吸引力的大纲
ency when practical application, thus has the strong usability. Key words: Monolithic microputer,programmable logic controller,piler,blind code, source program, target program 前 言 前人在单片机应用研究和
时钟由定时器 T2 溢出脉冲提高,当 TCLK的值为 0 时,发送脉冲由定时器 T1 的溢出脉冲提高。 RCLK 接收时钟允许。 在 RCLK 的值为 1时,串口的接收时钟由定时器 T2 的溢出脉冲提供,在 RCLK的值为 0 时,接收脉冲由定时器 T1 的溢出脉冲提供。 EXF2 定时器 T2 外部标志位。 在 EXEN2 的值为 1时,还要在脉冲由正变负时作用 于定时器 T2
83。 19 参考文献 20 附录 21 基于单片机的 LED 点阵电子显示屏设计 电子信息工程技术 指导老师 彭高丰 学生姓名 黄慧敏 摘要: 电子显示屏的应用范围越来越广泛,它作为一个重要的宣传平台,已经受到全社会的普遍认可。 本课题以单片机为控制核心,通过 8 8LED 电子显示屏及相关的外围电路,设计制作了一个 16 32 点阵 LED 电子显示屏。 该设计介绍了基于 AT89C55
,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一 的结构,即普林斯顿 (Princeton)结构。 INTEL的 MCS51系列单片机采用的是哈佛结构的形式,而后续产品 16位的 MCS96系列单片机则采用普林斯顿结构。 下图是 MCS51系列单片机的内部结构示意图如图 : 图 内部结构示意图
显示数据 ,此指令把 D7∽ D0写入相应的 DDRAM 单元, Y地指针自动加 1。 (READ DISPLAY DATE) 代码 R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 形式 1 1 D7 D6 D5 D4 D3 D2 D1 D0 此指令把 DDRAM的内容 D7∽ D0读到数据总线 DB7∽ DB0, Y地址指针自动加 1。 读写操作时序 数表 表