郭焰昌:基于液晶显示的乘法口诀测试仪的设计
4.2.7 矩阵键盘键值查找程序流程图
开始 有键闭合? 调用防抖动子程序 有键闭合? 计算键值 键值为列数乘以4加上行数 键释放? 被查找键值显示 返回
图4-8 矩阵键盘键值查找程序流程图
键盘键值查找必须要先判断按键时否有闭合,用软件使AT89S52的P1.0-P1.3端输出为“0”状态,若P1.4-P1.7若为“1”状态则没有键盘按下,若不全为“1”则表示有按键按下。
用扫描的方法识别键值N。其公式为:N=所在行键首键号+列号。然后是要判断键时否释放,如果释放,则键值送入累加器A中,这样就防止了按一次却进行多次键功能操作,保证每按一次CPU只执行一次处理。
- 26 -
安徽工程科技学院机电学院毕业设计(论文)
4.2.8 延时120ms子程序流程图
开始 设定循环次数 设定每次循环时间 执行延时 返回
图4-9 延时子程序流程图
为了防止键盘的抖动造成对CPU的影响,就必须设定延时程序来解决这个问题,该子程序对应的晶体频率为12MHz,从程序的设计可以计算出时间为:250×240×2=120000us=120ms。
4.2.9 延时5ms子程序使LCD初始化流程图
开始 设定循环次数 设定每次循环时间 执行LCD延时 返回
图4-10 延时5ms子程序使LCD初始化流程图
由对应的程序设定同样可以计算出延时时间,设定循环时间为:250×10×2=5000us=5ms。
- 27 -
郭焰昌:基于液晶显示的乘法口诀测试仪的设计
4.2.10 数据转换子程序流程图
开始 初始化十进制寄存器 将十六进制转成十进制放入十进制寄存器 将高位转为 ASCⅡ码并存放 将低位转为 ASCⅡ码并存放 返回
图4-11 数据转换子程序流程图
十六进制首先转换成十进制,由于十六进制和十进制存放的寄存器不一样,所以进行第一次转换之前必须要把十进制寄存器给初始化,以便存放转换后新的十进制数据,转换成ASCⅡ码的时候把十进制的高低位分别来转化,ASCⅡ码存放在ACC(累加器)中。
4.2.11 模拟出题器子程序流程图
- 28 -
安徽工程科技学院机电学院毕业设计(论文)
开始 停止T1运行 取T1当前植 取得对应的题号 将题目分组 保存乘数 将题目分组 保存被乘数 计算乘积 分别保存乘积的 高位和低位 将结果转为 ASCⅡ码并存放 返回
图4-12 模拟出题器子程序流程图
该乘法口诀的设计可以随机产生测试题目,测试者还可以通过按键来检测答案,并可以当自己做错了以后知道正确的答案。
4.3 程序调试
设计用的是汇编语言对单片机进行操作和控制,读起来很好理解,通过编写好的程序进行了用Keill软件进行了调试[14]。调试结果如下图4-13:
- 29 -
郭焰昌:基于液晶显示的乘法口诀测试仪的设计
图4-13 调试程序图
通过调试可以知道程序没有错误,可以进一步进行仿真和其它的操作。
- 30 -