陕西科技大学 显示器驱动课程设计任务书 电信 学院 电子 专业 141 班级 学生: 曹 帅
题目: 点阵字符LCD静态数字显示
课程设计从 2017 年 12月 25 日起到 2018 年 1 月 7 日
1、课程设计的内容和要求(包括原始数据、技术要求、工作要求等):
熟悉51系列(兼容)单片机软件开发系统Keil C51集成开发环境(u Vison系列编译器)和Proteus电路分析与实物仿真软件。
了解点阵字符LCD模块的内部结构及字符字模,熟悉点阵字符LCD显示器驱动的基本原理。设计点阵字符LCD显示器的驱动电路,编写程序实现在点阵字符LCD显示器上的静态数字显示。
电路方面主要包括以下3部分。(a)设计单片机的最小系统(包括复位电路和外接的晶振电路),并确定相关元器件参数。(b)设计单片机与点阵字符LCD模块间的控制线,主要包括控制字符LCD显示器的数据/指令寄存器选择、读/写选择、使能信号和I/O数据传输线等连线。(c)采用直接访问时单片机P0口的上拉电阻; LCD模块的电源及偏压电路。
编写点阵字符LCD显示器静态数字显示程序,实现数字(0—9)的信息显示。显示内容自定,如显示学号。
2、对课程设计成果的要求〔包括图表、实物等硬件要求〕:
(1)利用电路设计软件(Proteus 软件)绘制阵字符LCD模块驱动电路的原理图,并列出元器件清单。原理图应包括标题栏。
(2)编写阵字符LCD显示器静态数字显示的汇编语言或C语言源程序,并给出程序流程图。
(3)在Keil C51与Proteus的联机调试下完成的阵字符LCD显示器静态数字显示的仿真结果或制作实物。
(4)在课程设计报告中对上述内容作适当说明。
3、课程设计工作进度计划:
时间 | 设计任务及要求 | 12.25-12.26
| 查阅资料,确定设计方案
| 12.27-12.28
| 熟悉点阵字符LCD模块的结构及工作原理
| 12.29-12.30
| 熟悉设计软件(Keil C51和Proteus)
| 12.31
| 设计点阵字符LCD模块的驱动电路
| 1.1-1.2
| 编写点阵字符LCD显示器的静态数字显示程序
| 1.3-1.4
| 硬件电路与驱动程序的调试、仿真/实物制作(选作)
| 1.5-1.6
| 撰写课程设计报告
| 1.7
| 验收设计成果,交课程设计报告
|
指导教师: 日期:
教研室主任: 日期:
目 录
1 选题背景
2 方案论证
2.1设计原理
2.2硬件方案
2.3软件方案
2.4方案特点
3 点阵字符LCD静态数字显示设计过程论述
3.1系统硬件框图设计
3.2系统原理图设计
3.3系统软件设计
3.3.1程序流程图
3.3.2软件代码
4 结果分析
5 总结
6 设计体会
参考文献
1 选题背景本课程设计命题为点阵字符LCD静态数字显示,涉及显示技术、电子技术、单片微型计算机、程序设计等相关课程内容,针对LCD显示器设计驱动电路,编写驱动程序。要求学生熟悉51系列(兼容)单片机软件开发系统Keil C51集成开发环境(u Vison系列编译器)和Proteus电路分析与实物仿真软件。了解点阵字符LCD模块的内部结构及字符字模,熟悉点阵字符LCD显示器驱动的基本原理。设计点阵字符LCD显示器的驱动电路,编写程序实现在点阵字符LCD显示器上的静态数字显示。通过本次课设,使学生运用上述专业知识,进行一次综合性训练。既有助于巩固学生所学专业知识、培养独立设计能力、工程绘图能力、编写技术报告,提高综合运用知识的能力,也能为毕业设计以及未来工作打下基础。 2 方案论证2.1设计原理 以AT89C51单片机为核心,编写相应的软件程序,设计复位电路以及外界晶振电路、上拉电阻、偏压电路等使单片机与点阵字符LCD模块(LM016L)相连接最终实现静态数字(201412040112)的显示。 2.2硬件方案硬件电路由三部分组成,即单片机复位电路、外接的晶振电路、LCD显示电路。各部分实现功能及设计概要如下。 - 单片机复位电路、外接的晶振电路:单片机正常工作需要
- LCD显示电路:显示数字字符信息
- 复位电路设计概要:采用手动按钮复位采用方法是在RST端和正电源Vcc之间 接一个按键开关而本设计晶振采用的是1MHz因此起振时间为10ms,由于人的动作再快也会使按钮保持接通达数十毫秒,所以完全满足复位的时间要求。
- LCD显示电路设计概要:本次课设任务是点阵字符静态数字显示,因此选择LM016L具备字符发生器的显示器件。
表2-1 LM016L引脚功能 编 号 | 符 号 | 引脚说明 | 编 号 | 符 号 | 引脚说明 | 1 | VSS | 电源地 | 9 | D2 | 数据 | 2 | VDD | 电源正极 | 10 | D3 | 数据 | 3 | VEE | 负电压供电 | 11 | D4 | 数据 | 4 | RS | 数据/命令 | 12 | D5 | 数据 | 5 | R/ W | 读/写选择 | 13 | D6 | 数据 | 6 | E | 使能信号 | 14 | D7 | 数据 | 7 | D0 | 数据 |
|
|
| 8 | D1 | 数据 |
|
|
|
2.3软件方案本设计软件部分的主要完成功能是定义1602控制引脚、确定要显示的数字字符内容即学号、读指令数据操作、写指令数据操作、LCD初始化。根据软件的功能划分软件设计模块结构,如图2-1所示。
图2-1 软件功能模块结构(见附件)
各个模块具体任务如下: - LCD初始化模块:设置显示模式,开光标和光标闪烁,清屏。
- 读指令数据操作:判断是否忙碌
- 写指令数据操作:完成写指令和写数据操作,实现字符的显示
2.4方案特点该方案软件方面采用C语言进行编译,相对于汇编语言其具有更加灵活,可移植性强,库函数多等特点。硬件方面选用LM016L作为LCD显示屏是因为,用LCD显示一个字符时比较复杂,但LM016L内带字符发生器,显示字符就变得简单,让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。 3 点阵字符LCD静态数字显示设计过程论述3.1系统硬件框图设计根据确定的硬件方案设计系统硬件框图,包含晶振电路为单片机提供时钟信号,复位电路保证可以进行复位操作以及LCD显示电路进行数字显示。如图3-1所示。 图3-1系统硬件框图(见附件)
3.2系统原理图设计根据设计要求和硬件框图设计系统原理图,如图3-2所示。 
图3-2 系统原理图 单片机的管脚资源分配:其中P0口为作为LCD数据信号口,P3.4口作为使能信号端 P3.5口作为数据/命令选择端,P3.6口作为读/写选择端,硬件系统元器件清单如下表3-1所示。 表3-1硬件系统元器件清单 编 号 | 符 号 | 属性 | 1 | R1 | 10K | 2 | R2 | 10K | 3 | C1 | 10uf | 4 | C2 | 30pf | 5 | C3 | 30pf | 6 | U1 | AT89C51 | 7 | LCD1 | LM016L | 8 | RP1 | 10K | 9 | X1 | 4pf |
|
|
| 3.3系统软件设计3.3.1程序流程图 该设计流程大致包括液晶屏初始化、清屏、确定显示字符地址、定位光标位置、字符显示等具体流程如下图3-3所示。
      
 
   图3-3 程序流程图 3.3.2软件代码 1) LCD头文件功能2) LCD显示子程序文件功能- 保证LCD处于空闲状态
- 根据MODE类型执行写数据或写指令操作
- 执行清屏、光标显示设置等操作
- 确定光标位置,写字符串数据
最后通过使用keil uvison4软件将编辑好的程序文件录入protues软件中的硬件原理图的AT89C51单片机中进行仿真,并成功得到学号的显示,完成设计任务。 4 结果分析该设计最终将软件程序录入单片机后进行仿真测试,成功的在液晶显示屏上进行持续稳定的静态数字即201412040112学号的显示。因此可以得出该设计的硬件方案与软件方案的正确性,更进一步论证了硬件电路原理图的合理性,包括其中的电容、电阻、晶振等基本元器件参数确定是完全符合设计要求的。同时也验证了软件程序的功能性是满足要求的,可以成功实现所定义的数字显示功能并且不会出现其他内容的显示,没有出现花屏等其他错误的显示效果,足以看出该软件程序的正确性。进而更加验证了以AT89C51单片机为核心,编写相应的软件程序,设计复位电路以及外界晶振电路、上拉电阻、偏压电路等使单片机与点阵字符LCD模块(LM016L)相连接最终实现静态数字(201412040112)的显示设计原理的正确性。仿真结果图如图4-1所示。 图4-1 仿真结果图 5 总结此次课设虽然已经成功完成仿真要求,但其中的关键步骤的正确性是该设计能够成功实现的基础,最重要的两点就是,单片机与液晶的接口要满足液晶的时序要求,软件编程中是要进行正确的初始化、操作及写入显示内容的代码。因此将这两个关键步骤的设计内容成功确定是本次课设的工作重点,在完成了大体的方案步骤后,接下来便是对硬件方案中的一些细节进行优化,参数进行确定,对软件程序进行功能性测试等工作,最终成功完成课设设计任务。 6 设计体会本次课设从 2017 年 12月 25 日起到 2018 年 1 月 7 日历时两周,从开始的查阅资料,初步确定设计方案,然后学习protues以及keil uvison4软件的基本功能操作,在具备了一定的软件使用能力后便开始进行硬件电路的设计以及软件程序的编写,最后进行电路与驱动程序的调试与仿真并成功得出结果,整个设计过程中遇到过一些问题,但在老师的两次课设指导,并且查阅资料以及与同学的交流下都得以解决,而我认为课设得出结果是重要的,但是在这个查阅、学习、交流、集各方面知识为自己所用的这个过程才是我最大的收获,因为这个过程不单单是学习一定的书本知识那样简单,其对于我们以后的生活和工作的是具有巨大的帮助的,此次课设虽然已经完成,但是它所带给我的启发与解决问题的思路和方法将会在我以后的工作和生活中一直帮助着我.
参考文献
[1]作者袁东 周新国.51单片机典型应用30例.清华大学出版社.出版时间2016年7月1日 [2]作者徐爱钧 徐阳 Keil C51单片机高级语言应用编程与实践.电子工业出版社.出版时间2013年12月1日
- #include <reg52.h>
- typedef unsigned char uchar;
- typedef unsigned int uint;
-
- sbit En = P3^4;
- sbit Rs = P3^5;
- sbit Wr = P3^6; //定义1602控制引脚
- uchar code D[]={"2014120404112"};
-
- /*===========================================================
- 1602需要的函数
- ========================================================== */
- void Read_Busy() //读1602指令,判断是否忙碌
- {
- uchar busy;
- P0 = 0xff;
- Rs = 0;
- Wr = 1;
- do
- {
- En = 1;
- busy = P0;
- En = 0;
- }while(busy & 0x80);
- }
-
- void WrOrder_1602(uchar order) //1602写指令
- {
- Read_Busy();
- Rs = 0;
- Wr = 0;
- P0 = order;
- En = 1;
- En = 0;
- }
- void Init_1602() //液晶初始化
- {
- WrOrder_1602(0x38); //设置显示模式
- WrOrder_1602(0x0f); // 开光标和光标闪烁
- WrOrder_1602(0x01); //清屏
-
- WrOrder_1602(0x06); //写一数据后光标自动加一
- }
-
- void WrData_1602(uchar Data) //写一个数据
- {
- Read_Busy();
- Rs = 1;
- Wr = 0;
- P0 = Data;
- En = 1;
- En = 0;
- }
-
- void WrD_1602(uchar x, uchar n, uchar *D) //第x行第n(取0~15)个位置开始写一个字符串
- {
- uchar i=0;
- if(x==1)
- {
- WrOrder_1602(0x80|n);//第一行第n个位置开始
- }
- else
- {
- WrOrder_1602(0x80|0x40|n);//第二行第n个位置开始
- }
- while(D[i]!='\0')
- {
- Read_Busy();
- Rs = 1;
- Wr = 0;
- P0 = D[i];
- En = 1;
- En = 0;
- i++;
- }
- }
-
-
- void main(void)
- {
- Init_1602(); //液晶初始化
- WrOrder_1602(0x38); //设置显示模式
- WrOrder_1602(0x0f); // 开光标和光标闪烁
- WrOrder_1602(0x01); //清屏
- WrOrder_1602(0x06); //写一数据后光标自动加一
-
-
- …………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
全部资料51hei下载地址:
点阵字符LCD静态数字显示.rar
(2.55 MB, 下载次数: 57)
|