理论教育 基于LM016L的秒表显示设计

基于LM016L的秒表显示设计

时间:2023-10-19 理论教育 版权反馈
【摘要】:编程实现在字符式液晶显示屏第一行显示“Seconds:”,其后跟一个三位数,初值为0,每隔一秒显示数字加1。图13-9 字符式液晶显示屏与PIC16F877A接口实验原理图题意分析●本题目有两个显示要求。对于大于9的数字,需要分别把百位、十位和个位分别计算出来,并转换成相应字符后按顺序显示在字符式液晶显示屏上。其流程如图13-10所示。本例仅给出一个示意性的液晶模块驱动函数库。3)新建LCD1602.H文件并加入项目中,其内容如下所示。

基于LM016L的秒表显示设计

对于一款液晶显示屏的编程,先要对其实现正确的初始化,然后实现基础的读指令寄存器程序、写指令程序、写数据程序和读数据程序。读者在程序设计时可以把这些基本的代码片段写成函数形式便于代码的复用。下面是采用模块化程序设计方法完成一个简单的字符式液晶显示程序的例子。

【例13-2】电路图如图13-9所示。编程实现在字符式液晶显示屏第一行显示“Seconds:”,其后跟一个三位数,初值为0,每隔一秒显示数字加1。

电路图在光盘位置:“\Example\Chapter13\S131\LCM1602.DSN”。

978-7-111-33274-9-Chapter13-16.jpg

图13-9 字符式液晶显示屏与PIC16F877A接口实验原理图

题意分析

●本题目有两个显示要求。其一是显示一个固定的字符串。其二是显示一个随时间变化的数字。对于固定的字符串显示,为了节省随机存储器(RAM)的空间,建议把此字符串定义成const类型。

●对于动态的数字显示,题意要求每隔一秒钟使显示数字加1,就需要一个变量来保存此数据,由于题意要求是三位数,最大值是999,所以此变量用整型即可满足要求。由于字符式液晶显示屏只能显示字符,所以需要把数字转换为相应字符后才能在液晶显示屏上显示。对于大于9的数字,需要分别把百位、十位和个位分别计算出来,并转换成相应字符后按顺序显示在字符式液晶显示屏上。其流程如图13-10所示。

●本程序重点是编写液晶模块正确初始化、向液晶模块写命令、向液晶模块写数据等基本程序。限于篇幅,这里不能对每个指令都给出具体分析过程。读者可以参考例3-1来自己写出每个液晶模块控制命令的函数。本例仅给出一个示意性的液晶模块驱动函数库。用在实际的字符式液晶模块驱动时需要按照实际元件的数据手册进行简单修改。

978-7-111-33274-9-Chapter13-17.jpg

图13-10 S131主程序流程图

设计过程

1)用MPLAB新建项目S131,语言工具选择为“HI-TECH Universal Toolsuite”,保存在“C:\S131”文件夹下。

2)新建main.c文件并加入项目中,其内容如下所示(本项目所有源码内容参考光盘“\Example\Chapter13\S131”文件夹内容)。

978-7-111-33274-9-Chapter13-18.jpg

978-7-111-33274-9-Chapter13-19.jpg

3)新建LCD1602.H文件并加入项目中,其内容如下所示。

978-7-111-33274-9-Chapter13-20.jpg(www.daowen.com)

978-7-111-33274-9-Chapter13-21.jpg

4)新建LCD1602.C文件并加入项目中,其内容如下所示。

978-7-111-33274-9-Chapter13-22.jpg

978-7-111-33274-9-Chapter13-23.jpg

978-7-111-33274-9-Chapter13-24.jpg

978-7-111-33274-9-Chapter13-25.jpg

5)新建delay.h文件并加入项目中,其内容如下所示。

978-7-111-33274-9-Chapter13-26.jpg

978-7-111-33274-9-Chapter13-27.jpg

6)新建delay.c文件并加入项目中,其内容如下所示。

978-7-111-33274-9-Chapter13-28.jpg

7)把项目保存后成功编译出目标文件。然后用调试工具Proteus VSM加载LCM1602.DSN。启动VSM后运行程序。程序运行效果是先在第一行显示“Seconds:”,然后每隔一秒钟Seconds后显示内容加1。

8)读者可以在此基础上做更复杂的显示应用。

若读者学习过C语言中的sprintf函数,可以先使用sprintf函数进行输出内容格式化,然后使用LCD_Put_String函数输出格式化后的字符串。例如,本题的另外一种主程序写法如下所示。

978-7-111-33274-9-Chapter13-29.jpg

978-7-111-33274-9-Chapter13-30.jpg

使用sprintf函数后主程序代码简单了,但是由于使用了sprintf库函数,带来的副作用是占用了更多的只读存储器(ROM)空间。一般情况下会多占用500B左右的ROM(不使用浮点数输出情况下)。因此,若输出数据比较简单,建议使用LCD_Put_Char函数输出;若复杂再考虑使用sprintf函数。请读者酌情使用。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈