51单片机1602移动液晶显示.docx
- 文档编号:13465287
- 上传时间:2023-06-14
- 格式:DOCX
- 页数:19
- 大小:216.45KB
51单片机1602移动液晶显示.docx
《51单片机1602移动液晶显示.docx》由会员分享,可在线阅读,更多相关《51单片机1602移动液晶显示.docx(19页珍藏版)》请在冰点文库上搜索。
51单片机1602移动液晶显示
单
片
机
课
时
设
计
设计主题:
1602移动液晶显示
院系:
工程技术学院
专业:
11级电气自动化一班
学号:
姓名:
指导老师:
孙建延
基于单片机控制的1602液晶显示
1.引言
单片机作为微型计算机发展的一个重要的分支,以其高可靠性、高性价比、低电压、低功耗的优势,赢得了广泛的应用。
单片机技术是一门技术性、应用性很强的学科,在目前和今后相当长的一段时间仍有着广泛的应用。
实验教学作为其极为重要的组成环节,在硬件扩展、接口应用、编程方法以及程序调试等方面,都起到重要作用。
作为学习自动控制专业的学生,单凭课堂理论课学习,不切实认真的进行实践仿真,势必出现理论与实践脱节、学习与应用脱节等局面。
1.1课程设计的思想
此次《单片机原理及系统》课程设计,选择的是利用1602液晶显示,利用AT89C52芯片实现一串滚动字符显示,本次设计使用的1602液晶为5V电压驱动,带背光,可显示两行,每行16个字符,不能显示汉字,内置128个字符的ASCⅡ字符集字库,只有并行接口,无串行接口。
通过C语言编程经keil软件生成可以在proteus软件中仿真装载的.hex文件,进而通过proteus软件进行硬件电路连接以及软件的仿真,利用LM016L显示器替代1602型液晶显示器,最终得出液晶显示。
1.2课程设计的目的
此次程设计是在学习必修课程《单片机原理与系统设计》之后,为加强学生对单片机系统设计和应用能力的培养而开设的综合设计训练环节。
本课程设计应结合《单片机原理与系统设计》课程的基础理论,重点强调实际应用技能训练,包括单片机系统设计的软件和硬件两部分。
其课程设计任务是使学生通过应用单片机系统设计的基本理论,基本知识与基本技能,掌握单片机应用系统各主要环节的设计、调试方法,初步掌握并具备应用单片机进行设备技术改造和产品开发的能力,培养学生的创新意识,提高学生的动手能力和分析问题、解决问题的能力。
1.3课程设计要求
设计要求:
采用单片机控制,通过C语言编程实现在1602液晶的第一行显示”WELCOMETOZDH!
”,然后在第二行显示”K092XWEI”然,定格在屏幕上。
2.设计方案及原理
2.11602型液晶简介
2.1.11602引脚功能
LCD1602引脚如图2.1所示:
图2.1LCD1602引脚图
1602液晶显示屏各端口信号功能如表2.1所示:
表2.11602液晶接口信号说明
编号
符号
引脚说明
编号
符号
引脚说明
1
Vss
电源地
9
D2
数据口
2
Vdd
电源正极
10
D3
数据口
3
Vee
液晶显示对比度调节端
11
D4
数据口
4
RS
数据/指令端(H/L)
12
D5
数据口
5
R/W
读写选择端(H/L)
13
D6
数据口
6
E
使能信号
14
D7
数据口
7
D0
数据口
15
BLA
背光电源正极
8
D1
数据口
16
BLK
背光电源负极
2.21062型液晶初始化设置
使用该液晶显示屏时,应首先对其进行初始化设置。
各初始化设置指令码及功能,如表2.2所示:
表2.2显示开/关及光标设置
指令码
功能
0
0
0
0
1
D
C
B
D=1开显示;D=0关显示
0
0
0
0
1
D
C
B
C=1显示光标;C=0不显示光标
0
0
0
0
1
D
C
B
B=1光标闪烁;B=0光标不显示
0
0
0
0
0
1
N
1
N=1当读或写一个字符后地址光标加1
0
0
0
0
0
1
N
1
N=0当读或写一个字符后地址光标加1
0
0
0
0
0
0
0
1
显示清屏:
数据指针、所有显示清零
0
0
1
1
1
0
0
0
16×2显示、5×7点阵、8位数据接口
2.31602液晶写操作时序流程
(1)通过RS确定是写数据还是写指令。
写指令包括使液晶的光标显示/不显示、光标闪烁/不闪烁、需/不需要移屏、在什么地方显示等。
(2)读/写控制端设为写模式,即低电平。
(3)将数据或指令送达数据线上。
(4)给E一个高脉冲将数据送入液晶控制器,完成操作。
2.4硬件接口设计方案
(1)液晶1、2端为电源;15、16为背光电源(在仿真中可不用)。
(2)液晶3端为液晶对比度调节端,通过一个10千欧电位器接地来调节对比度。
(3)液晶4端为向液晶控制器写数据或写指令选择端,接单片机的P3.5口。
(4)液晶5端为读/写选择端,因为我们不从液晶读取任何数据,只向其写入指令或显示数据,因此此端始终选择为写状态,即为低电平接地。
(5)液晶6端为使能信号,是操作是必需的信号,接单片机的P3.4口。
(6)液晶7~14端口为数据或指令的输入输出口,接单片机P0的8个接口。
3.硬件设计
根据如上分析,在proteus软件环境中搭建硬件电路,采用AT89C52型单片机,LM016L显示器替代1602型液晶显示器。
硬件连接方式(两种)如图3.1、3.2所示:
图3.1系统硬件电路图连接方式一
4.软件设计
4.1源程序清单
见附录1
4.2源程序调试结果
在keil软件中键入4.1中的源程序并给予调试。
调试结果如图4.1所示:
图4.1源程序调试结果
由图可知源程序语法无误,并生成了.hex的文件,为在proteus软件中仿真做准备。
4.3仿真结果
在proteus软件中仿真,屏幕上会出现如下两行字符“ZhongZhouUniversity”和“0123456789A”。
如图4.2所示:
图4.2最终效果图
继而可知仿真成功,软硬件设计合理。
5.总结心得
通过一周的课程设计,让我感受最深的就是学习是一种乐趣。
在这次课程设计中,我们接触了一种新的实现,试验箱,他多样的功能激发了我们去学子它,进而掌握它的兴趣。
从拿到任务书,开始充分利用网络及图书馆等资源,查询资料,了解试验箱的功能。
在之前专业课理论知识的基础上,我们又从模糊到熟悉逐渐了解了什么是单片机编程。
然后面对我们的首要任务,我们的想法,回顾这一周的课设,我学会了单片机编程的一些功能的使用,但只是一小部分而已,我此后将继续研究这么一个强大的工具。
对于仿真软件的使用,非常有成就感,极大的激发了我们对新鲜事物学习的兴趣,从而以积极的心态去面对这次课程设计。
最后,我通过这次课程设计,使我对滤波器有了更深刻的认识。
总之,在这一周的时间,一直是有条不紊的进行着,到最后看到我们的努力得到收获的时候,我们满怀欣慰。
在这次课设中,我们看到了自己的进步,看到了老师和学长对工作的认真负责和对学生的耐心和热情,所以在以后的课程设计中,我将满怀激情,更加努力去面对。
参考文献
1孙建延.基于C语言编程MCS-51单片机原理与应用[M].北京:
清华大学出版社,2011
2蔡美琴,张为民.MCS-51系列单片机系统及其应用.第2版.北京:
高等教育出版社,2004
3李广弟,朱月秀,冷祖祁.单片机基础.第3版.北京:
北京航空航天大学出版社,2007
4周润景,张丽娜.基于PROTEUS的电路及单片机系统设计与仿真[M].北京:
航空航天大学出版社,2006
附录
附录1源程序清单
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitLCD_RS=P3^3;
sbitLCD_RW=P3^4;
sbitLCD_EN=P3^5;
ucharcodedis1[]={"ZhongZhouUniversity"};
ucharcodedis2[]={"0123456789A"};
/*******************************************************************/
/**/
/*延时子程序*/
/**/
/*******************************************************************/
voiddelay(intms)
{
inti;
while(ms--)
{
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/*******************************************************************/
/**/
/*检查LCD忙状态*/
/*lcd_busy为1时,忙,等待。
lcd-busy为0时,闲,可写指令与数据。
*/
/*
/*******************************************************************/
bitlcd_busy()
{
bitresult;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=(bit)(P0&0x80);
LCD_EN=0;
returnresult;
}
/*******************************************************************/
/**/
/*写指令数据到LCD*/
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。
*/
/**/
/*******************************************************************/
voidlcd_wcmd(ucharcmd)
{
while(lcd_busy());
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
P0=cmd;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN=1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN=0;
}
/*******************************************************************/
/**/
/*写显示数据到LCD*/
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。
*/
/**/
/*******************************************************************/
voidlcd_wdat(uchardat)
{
while(lcd_busy());
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN=1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN=0;
}
/*******************************************************************/
/**/
/*设定显示位置*/
/**/
/*******************************************************************/
voidlcd_pos(ucharpos)
{
lcd_wcmd(pos|0x80);//数据指针=80+地址变量
}
/*******************************************************************/
/**/
/*LCD初始化设定*/
/**/
/*******************************************************************/
voidlcd_init()
{
delay(15);//等待LCD电源稳定
lcd_wcmd(0x38);//16*2显示,5*7点阵,8位数据
delay(5);
lcd_wcmd(0x38);
delay(5);
lcd_wcmd(0x38);
delay(5);
lcd_wcmd(0x0c);//显示开,关光标
delay(5);
lcd_wcmd(0x06);//移动光标
delay(5);
lcd_wcmd(0x01);//清除LCD的显示内容
delay(5);
}
/*******************************************************************/
/**/
/*清屏子程序*/
/**/
/*******************************************************************/
voidlcd_clr()
{
lcd_wcmd(0x01);//清除LCD的显示内容
delay(5);
}
/*******************************************************************/
/**/
/*闪动子程序*/
/**/
/*******************************************************************/
voidflash()
{
delay(600);//控制停留时间
lcd_wcmd(0x08);//关闭显示
delay(200);//延时
lcd_wcmd(0x0c);//开显示
delay(200);
lcd_wcmd(0x08);//关闭显示
delay(200);//延时
lcd_wcmd(0x0c);//开显示
delay(200);
}
/*******************************************************************/
/**/
/*主程序*/
/**/
/*******************************************************************/
main()
{
uchari,j;
delay(10);
lcd_init();//初始化LCD
while
(1)
{
lcd_clr();
lcd_pos(0x10);//设置显示位置为第一行第17列
i=0;
while(dis1[i]!
='\0')
{//显示字符""
lcd_wdat(dis1[i]);
i++;
}
lcd_pos(0x50);//设置显示位置为第二行第17列
i=0;
while(dis2[i]!
='\0')
{
lcd_wdat(dis2[i]);//显示字符""
i++;
}
/*for(j=0;j<16;j++)//左移动16格
{
lcd_wcmd(0x18);//字符同时左移一格
delay(100);//控制移动时间
}
flash();*///闪动二次
for(j=0;j<29;j++)//向左移动29格
{
lcd_wcmd(0x18);//字符同时左移一格
delay(100);//控制移动时间
}
for(j=0;j<13;j++)//向右移动13格
{
lcd_wcmd(0x1C);//字符同时左移一格
delay(100);//控制移动时间
}
flash();//闪动二次
}
}
附录2主程序流程图
附图2.1主程序流程图
附图3.1连线方式一情况下的最终效果o
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 1602 移动 液晶显示
![提示](https://static.bingdoc.com/images/bang_tan.gif)