毕业设计论文范文(液晶显示的乘法口诀测试仪)(6)
资料介绍:
第4章 软件设计
乘法口诀主程序包含了主程序、键盘键值查找子程序、键入数据子程序、数据比较、写指令数据到LCD、写显示数据到LCD、LCD初始化、延时120ms等子程序。各部分系统的配合着完成乘法口诀测试仪的软件部分。
4.1 主程序
4.1.1 主程序流程图
图4-1 主程序流程图
主程序是实现整体功能的核心部分,通过调用其它各个自程序来实现一个完整的乘法口诀测试仪的判断测试者的答案。包括了调用延时、数据比较、写指令数据到LCD、写显示数据到LCD、LCD初始化等功能。
4.2 子程序
子程序包括数据比较子程序、键盘扫描子程序、显示子程序等。
4.2.1 数据比较子程序流程图
图4-2 数据比较子程序图
比较数据的子程序是逐渐从高位到低位的进行的,先看高位有没有“0”,有“0”则直接跳过不比较,没有就继续比较,只有当地位和高位的比较全正确的时候,才能蜂鸣器发出响声。
测试者通过输入键盘按钮的先后主芯片自行判断高低位正误。
4.2.2 写指令数据到LCD子程序流程图
图4-3 写指令数据到LCD流程图
写指令寄存器子程序入口寄存器为R1,程序流程图如图4-3所示。因写入时,要求E出现负调变,所以送出数据后需另E置0,方可完成写入过程。写指令的时候要求E为高脉冲,RS=0,RW=0,D0-D7=指令码。 [资料来源:http://doc163.com]
4.2.3 写显示数据到LCD流程图
图4-4 写显示数据到LCD流程图
写数据寄存器子程序入口寄存器为R2,程序流程图如图4-4所示。写入时同样要求E出现负调变,而且与写指令寄存器IR有相似的地方,所以DR送出数据后和还是要求E置0,方可完成写入过程。写指令的时候要求E为高脉冲,RS=1(不同点)。RW=0,D0-D7=指令码。
4.2.4 检测LCD控制器忙状态,读数据流程图
图4-5 LCD忙检测、读数据流程图
1602内有一个忙标志位STA7,它反映了控制器HD44780内部运行时序状态。当STA7=1时,表示内部操作正在运行,不能接受外部数据
当STA7=0时,表示已准备好接收,可以随时接收CPU发来的数据和命令,这是SMC1602B向CPU发出的唯一联络信号。
CPU对模块的读操作(RS=0,R/W=1,输出:D0-D7=数据),读出来的状态字是忙标志位与7位当前数据地址指针值的组合。因此,对控制器每次进行读写操作之前,都必须进行读写检测,确保STA7为0。
4.2.5 LCD初始化设定子程序流程图
图4-6 LCD初始化设定子程序流程图
第一次延时15s时,等待LCD电源稳定,前几次延时,读写数据之前不需要忙检测,以后每次读写数据之前都必须要进行LCD忙检测。 [资料来源:www.doc163.com]
4.2.6 发送字符串子程序流程图
为了实现字符串的传输,我们必须把数据的头尾设定好,LCD1602的第一排和第二排均只能显示16个字符,因此,在加延时的时候形成滚动,就可能字符在第一行消失。单片机收从开头到字符则认为是数据开始接收字串,直到受到末尾的那个字符才认为是本次传输字符串的完全结束。
图4-7 发送字符串子程序流程图
4.2.7 矩阵键盘键值查找程序流程图
图4-8 矩阵键盘键值查找程序流程图
键盘键值查找必须要先判断按键时否有闭合,用软件使AT89S52的P1.0-P1.3端输出为“0”状态,若P1.4-P1.7若为“1”状态则没有键盘按下,若不全为“1”则表示有按键按下。
用扫描的方法识别键值N。其公式为:N=所在行键首键号+列号。然后是要判断键时否释放,如果释放,则键值送入累加器A中,这样就防止了按一次却进行多次键功能操作,保证每按一次CPU只执行一次处理。
4.2.8 延时120ms子程序流程图
图4-9 延时子程序流程图
为了防止键盘的抖动造成对CPU的影响,就必须设定延时程序来解决这个问题,该子程序对应的晶体频率为12MHz,从程序的设计可以计算出时间为:250×240×2=120000us=120ms。
[来源:http://Doc163.com]
4.2.9 延时5ms子程序使LCD初始化流程图
图4-10 延时5ms子程序使LCD初始化流程图
由对应的程序设定同样可以计算出延时时间,设定循环时间为:250×10×2=5000us=5ms。
4.2.10 数据转换子程序流程图
图4-11 数据转换子程序流程图
十六进制首先转换成十进制,由于十六进制和十进制存放的寄存器不一样,所以进行第一次转换之前必须要把十进制寄存器给初始化,以便存放转换后新的十进制数据,转换成ASCⅡ码的时候把十进制的高低位分别来转化,ASCⅡ码存放在ACC(累加器)中。
4.2.11 模拟出题器子程序流程图
图4-12 模拟出题器子程序流程图
该乘法口诀的设计可以随机产生测试题目,测试者还可以通过按键来检测答案,并可以当自己做错了以后知道正确的答案。
4.3 程序调试
设计用的是汇编语言对单片机进行操作和控制,读起来很好理解,通过编写好的程序进行了用Keill软件进行了调试[14]。调试结果如下图4-13:
图4-13 调试程序图
通过调试可以知道程序没有错误,可以进一步进行仿真和其它的操作。