基于51单片机的动态显示屏的设计.docx
《基于51单片机的动态显示屏的设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的动态显示屏的设计.docx(21页珍藏版)》请在冰豆网上搜索。
![基于51单片机的动态显示屏的设计.docx](https://file1.bdocx.com/fileroot1/2023-1/29/8321c9a8-24d1-44b7-b884-b17ab15f79f5/8321c9a8-24d1-44b7-b884-b17ab15f79f51.gif)
基于51单片机的动态显示屏的设计
基于51单片机的动态显示屏的设计
摘要
随着电子技术的发展,计算机在现代科学技术的发展中起着越来越重要的作用,多媒体技术、网络技术、智能信息处理技术、数据挖掘与处理技术等都离不开计算机,而LCD液晶显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。
本次设计的目的在于利用单片机控制LCD来实现显示字幕的功能,这种功能已经被广泛的地应用于我们的生活中,例如公交车站的电子报站显示,计程车上的计价器及很多日常生活中我们所能接触到的电子产品,它的工作范围已经涉及到我们生活中的方方面面。
本人在此利用刚学过的单片机与接口技术中的51单片机与电脑软件相结合控制1602型LCD显示数据。
该方法可以对显示内容进行实时控制,从而实现诸如闪动、滚动、打字等多种动态显示效果。
该方法同时还可以调节动态显示的速度,同时用户也可以在PC机上进行显示效果的预览,显示内容亦可以即时修改。
、
关键词:
LCD1602AT89C51单片机动态显示
前言…………………………………………………………………………………………1
第一章动态显示屏的设计要求与设计方案……………………………
1.1设计方案的论证与确定
1.2动态显示器的设计要求
第二章各单元模块设计
2.1各单元模块功能介绍及电路设计
2.2特殊元器件的介绍
2.3各单元模块的联接
第三章动态显示屏的硬件与软件设计
3.1硬件组成
3.2软件设计
第四章动态显示屏的系统调试与功能
4.1系统的调试
4.2系统的功能
4.3系统功能分析
第五章设计体会与小结
参考文献
附录
前言
随着人们生活环境的不断改善和美化,在许多场合可以看到各种各样的LCD液晶显示器。
液晶显示器(LCD/LiquidCrystalDisplay)的显像原理,是将液晶置于两片导电玻璃之间,靠两个电极间电场的驱动,引起液晶分子扭曲向列的电场效应,以控制光源透射或遮蔽功能,在电源关开之间产生明暗而将影像显示出来,若加上彩色滤光片,则可显示彩色影像。
LCD以其具有功耗低、体积小、重量轻、超薄寿命长,工作稳定可靠等许多其它显示器无法比拟的优点,而成为众多显示媒体以及户外作业显示的理想选择。
同时也可广泛应用到智能仪器、仪表、军事、车站、宾馆、体育、新闻、金融、证券、广告以及交通运输等许多行业中。
LCD智能显示模块不但可以显示各式各样的字符、汉字和图形。
同时具有可编程能力,且与单片机接口比较方便。
现在液晶显示器件已在欧美各国发展到相当的高度,主要广泛的应用于我们的日常生活之中。
液晶显示技术在国外从七十年代开始已有四十年的历史,我国的液晶显示技术也在逐渐的走向成熟,估计在未来不久的时间里我国的液晶技术也将达到一个新的高度。
第一章动态显示屏的设计要求与设计方案
1.1设计方案的论证与确定
通过分析LCD的接口原理可知电路的连接存在两种控制方式:
直接控制方式和间接控制方式。
根据设计的要求,以及设计的便捷性,本设计采用直接控制的方式,基于汇编和C语言的编程,采用软硬件结合的方式来实现控制,即于89C52单片机的开发板上,用89C51单片机做为芯片,用LCD1602做为液晶显示屏,以P2和P0口作为LCD1602的数据输入,以P2.4绑定LCD1602A的RS引脚,以P2.5绑定LCD1602A的R/W引脚,以P2.6绑定LCD1602A的E引脚,P0.0-P0.7对应这DB0-DB7,通过这样的形式去论证动态现实屏的结论。
方框图如下
1.2动态显示频的设计要求
1)在PC机上软件编程烧写调试所需程序
2)单片机显示屏能够实现第一排字符和第二排上的字符的出现。
3)在显示屏上能够实现LCD显示屏上先有第一排的逐步字体出现,再有第二排字体出现,再接着是全屏向左移动,其后以首尾结合的形式进行循环滚动的出现。
第二章各单元模块设计
2.1各单元模块功能介绍及电路设计
2.1.11602型液晶显示器模块介绍
图2.2为1602液晶显示模块,负责将单片机中执行结果显示出来
图2.11602LCD模块
2.1.2单片机最小系统设计
图2.2单片机最小系统
单片机最小系统CPU89C51和一定功能的外围电路组成,包括为单片机提供复位电压的复位电路提供系统频率的晶振。
这部分电路主要负责程序的存储和运行。
2.1.3时钟电路的设计
图2.3时钟电路
上图是MCS-51内部时钟方式的电路,外接晶体以及电容C5和C6构成并联谐振电路,接在放大器的反馈回路中。
对外接电容的值虽然没有严格的要求,但电容的大小会影响振荡器频率的高低、谐振器的稳定性、起振的快速性和温度的稳定性。
晶体可在1.2MHz~12MHz之间任选,电容C5和C6的典型值在20pF~100pF之间选择,但在60pF~70pF时振荡器具有较高的频率稳定性。
典型值通常选择为30pF左右,但本电路采用33pF。
在设计印刷电路板时,晶体或陶瓷振荡器和电容应尽可能安装的与单片机芯片靠近,以减少寄生电容,更好的保证振荡器稳定和可靠的工作。
为了提高温度稳定性,应采用温度稳定性能好的NPO高频电容。
2.1.4复位电路的设计
图2.4复位电路
AT89C51的复位是由外部的复位电路来实现的。
复位电路通常采用上电自动复位和按钮复位两种方式。
本设计中所用到的是上电按钮复位。
2.1.5电源电路设计
图2.5系统电源线路
本装置的电源是通过二极管D1后经C1,C4滤波后由LM2576稳定后提供稳定的5V电压通电时发光二极管亮。
2.2特殊元器件的介绍
2.2.1AT89C51芯片
图2.6AT89C51芯片引脚图
AT89C51主要性能:
1、8K字节在系统可编程Flash存储器
2、1000次擦写周期
3、全静态操作:
0Hz~33Hz
4、三级加密程序存储器
5、32个可编程I/O口线
6、三个16位定时器/计数器
7、八个中断源
8、全双工UART串行通道
9、低功耗空闲和掉电模式
10、掉电后中断可唤醒
11、看门狗定时器
12、双数据指针
13、掉电标识符
方框图:
功能特性描述:
AT89C51提供以下表中功能:
8k字节Flash闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作指导下一个硬件复位。
VCC:
电源电压
GND:
地
P0口:
P0口是一个8位漏极开路的双向I/O口,也即地址/数据总线复用口。
作为输出口,每位能吸收电流的方式驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。
对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.1分别作定时器/计数器2的外部计数输(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。
在flash编程和校验时,P1口接收低8位地址字节。
表2.1P1.0和P1.1口的第二功能
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。
在这种应用中,P2口使用很强的内部上拉发送1。
在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,P3输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P3口亦作为AT89C52特殊功能(第二功能)使用,如下表所示。
在flash编程和校验时,P3口也接收一些控制信号。
表2.2P3口的第二功能
RST:
复位输入。
晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。
ALE/PROG:
地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
在flash编程时,此引脚(PROG)也用作编程输入脉冲。
在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。
然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。
如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。
这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。
否则,ALE将被微弱拉高。
这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
PSEN:
外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。
当AT89C52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。
EA/VPP:
访问外部程序存储器控制信号。
为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。
为了执行内部程序指令,EA应该接VCC。
在flash编程期间,EA也接收12伏VPP电压。
XTAL1:
振荡器反相放大器和内部时钟发生器的输入端。
XTAL2:
振荡器反相放大器的输出端。
Flash编程―并行模式:
AT89C51带有用作编程的片上Flash存储器阵列。
编程接口需要一个高电压(12V)编程使能信号,并且兼容常规的第三方Flash或EPROM编程器。
编程方法:
对AT89C51编程之前,需设置好地址、数据及控制信号,可采用下列步骤对AT89C51编程:
1.在地址线上输入编程单元地址信号
2.在数据线上输入正确的数据
3.激活相应的控制信号
4.把EA/Vpp升至12V
5.每给Flash写入一个字节或程序加密位时,都要给ALE/PROG一次脉冲。
每个字节写入周期是自身定时的,通常均为1.5ms。
重复1—5步骤,改变编程单元的地址和写入的数据,直到全部文件编程结束。
2.2.2LCD显示模块功能特性描述
1、1602LCD的基本参数及引脚功能
1602LCD主要技术参数:
显示容量:
16×2个字符
芯片工作电压:
4.5—5.5V
工作电流:
2.0mA(5.0V)
模块最佳工作电压:
5.0V
字符尺寸:
2.95×4.35(W×H)mm
引脚功能说明
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表2.3所示:
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
VL
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据
15
BLA
背光源正极
8
D1
数据
16
BLK
背光源负极
表2.3:
引脚接口说明表
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
2、1602LCD的指令说明及时序
1)1602液晶模块内部的控制器共有11条控制指令,如表2.4所示:
序号
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
1
清显示
0
0
0
0
0
0
0
0
0
1
2
光标返回
0
0
0
0
0
0
0
0
1
*
3
置输入模式
0
0
0
0
0
0
0
1
I/D
S
4
显示开/关控制
0
0
0
0
0
0
1
D
C
B
5
光标或字符移位
0
0
0
0
0
1
S/C
R/L
*
*
6
置功能
0
0
0
0
1
DL
N
F
*
*
7
置字符发生存贮器地址
0
0
0
1
字符发生存贮器地址
8
置数据存贮器地址
0
0
1
显示数据存贮器地址
9
读忙标志或地址
0
1
BF
计数器地址
10
写数到CGRAM或DDRAM)
1
0
要写的数据内容
11
从CGRAM或DDRAM读数
1
1
读出的数据内容
表2.4控制命令表
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:
1为高电平、0为低电平)
指令1:
清显示,指令码01H,光标复位到地址00H位置。
指令2:
光标复位,光标返回到地址00H。
指令3:
光标和显示模式设置I/D:
光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效。
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标。
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:
字符发生器RAM地址设置。
指令8:
DDRAM地址设置。
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:
写数据。
指令11:
读数据。
2)基本操作时序表
读写操作时序如图2.8和2.9所示:
图2.7读写操作时序
2.3各单元模块的联接
图2.8各单元模块的连接图
模块是以AT89C52为主要构成的一个模块,其包括显示电路以及其内部的复位电路和时钟电路。
LCD显示模块的数据接收端与AT89C52的P0口相连,用于传输数据。
LCD的使能端和AT89C52的P2.6,P2.7相连,是片选信号。
VCC端是LCD的电源端。
第三章动态显示屏的硬件与软件设计
3.1硬件组成
硬件主要有PC机与51单片机连接组成。
1602液晶显示模块可以和单片机AT89C51直接接口电路如图3.1所示。
图3.1硬件原理图
3.2软件设计
本次设计主要利用C语言编写程序,根据功能的需要进行编程,其中软件设计所用的软件主要是Keil软件STC_ISP烧写软件。
根据本设计提供的要求,显示字符等信息,首先,要写出控制显示模块实现功能的主程序。
第一步则是定义端口,我们是利用AT89C51的P2,P0口对显示模块进行控制的。
第二步,按照显示模块各端口的各个功能编写主程序以达到设计的目的.
第三步,根据显示原理,显示字符或数字。
仅需要占用16x8点。
如果显示图片,也要和显示字符、汉字一样取模。
图片最好不要超过128x64,否则会显示不完全。
第四章动态显示屏的系统调试与功能
4.1系统的调试
硬件调试
1、液晶屏不亮。
解决方法:
检查显示屏是否插错了,要注意管脚的接口连接。
2、液晶屏亮,但无任何显示。
解决方法:
调节对比度后按复位按键。
3、液晶屏亮,但只有一排白色方框。
解决方法:
插紧液晶,插正单片机,按复位或者重新下载程序。
4、背光亮但不能显示,解决方法:
调节对比度。
5、显示不清晰,解决方法:
增大供电流或者使用外部供电。
软件调试
软件调试主要通过Keil软件和STC_ISP烧写软件进行操作,对程序编写过程中的错误进行查找,找出错误,进行修改,然后再进行编译直至编译成功,生成.HEX文件,将已经生成的HEX文件写入单片机里面,然后,点击运行,继而实现相应功能。
一般出现的问题如下:
1、在进行程序编译时出现了错误,查看错误的程序段,并并进行更改,在重新编译程序。
2、编译成功了,却在STP-ISP软件中没有发现.HEX文件时,打开文件查看编译软件中的target→optionsfortarget→output→createHEX处打勾,后在重新编译。
3、编译成功后,且在STP-ISP中发现了.HEX文件,却出现了了打开串口失败!
此时在“我的电脑”属性里查看硬件设备管理,再查看端口,查看端口是否正确。
4.2系统的功能
设计前期通过KEIL软件和STC_ISP烧写软件联调,对设计功能进行仿真,均达到了预期的设计效果,设计后期,硬件制作完毕后,将仿真成功后的程序通过单片机下载程序,写入单片机,再根据显示模块的各个端口连接方式,正确地将单片机跟显示模块连接,最后都实现了设计的功能。
4.3系统功能分析
原本的设计要求是显示字幕,我在基本要求上加以改进,实现了动态的字体显示,以及菜单的转化过程中插入中间界面,形成了更好的人机互动效果。
图3.2软件流程图
第五章设计体会与小结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机课程设计,我感慨颇多,从选题到定稿,从理论到实践,在二星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导和同学的帮助下,终于完成了,在此我表示感谢!
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
参考文献
[1]郇玉龙.单片机试验教学仿真系统的设计与开发[J].山东师范大学,2007
[2]付浩.AT89C51单片机高速串行输出口设计[J].2001,6
[3]求是科技.单片机典型模块设计导航].人民邮电出版社,2004,5
[4]何立民.单片机高级教程[M].北京:
北京航空航天大学出版社,2001
[5]陈涛.单片机应用及C51程序设计[M].北京:
机械工业出版社,2008,1
[6]汪清明.LCD点阵显示牌的设计与动态显示控制[J].微计算机信息,2001,12
[7]杜刚.电路设计与制版protel应用教程.清华大学出版社.2006
附录
系统源程序
#include
sbitrs=P2^4;//定义数据/命令端口为P2.4
sbitrw=P2^5;//定义读/写端口为P2.5
sbite=P2^6;//定义使能端口为P2.6
unsignedchari,j,m,n,k;
unsignedcharcodetab[]={"ZHOUPAN28HAO"};//要显示的数据
unsignedcharcodelcdnum[]={0x8f,0x8e,0x8d,0x8c,0x8b,0x8a,0x89,0x88,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x80};
voiddelay()
{unsignedintj;
for(j=0;j<255;j++);
}voiddelay1()
{unsignedinti,j;
for(i=0;i<200;i++)
for(j=0;j<200;j++);
}voidlcdwmc(unsignedchari)//写命令
{P0=i;
rs=0;
rw=0;
e=0;
delay();
e=1;
}voidlcdwmd(unsignedchari)//写数据
{P0=i;
rs=1;
rw=0;
e=0;
delay();
e=1;
}voidlcd_dis()//液晶初始化
{lcdwmc(0x01);//清屏
lcdwmc(0x38);//设置16*2显示,5*7点阵,8位数据接口
lcdwmc(0x0c);//开显示,不显示光标,无闪烁
lcdwmc(0x06);//设置屏显
}voidmain()
{lcd_dis();
m=1;
while
(1)
{k=0;
if(m==17)
m=1;
for(j=0;j<16;j++)
{lcdwmc(0x01);
lcdwmc(0x38);
lcdwmc(0x80);
lcdwmc(lcdnum[j]);
for(i=0;i<16;i++)
lcdwmd(tab[i]);
delay1();
}for(n=0;n<16;n++)
{lcdwmc(0x01);
lcdwmc(0x38);
for(k=m;k<16;k++)
lcdwmd(tab[k]);
delay1();
m++;
}
}
}
本科生课程设计成绩评定表
姓名
性别
专业、班级
课程设计题目:
课程设计答辩或质疑记录:
成绩评定依据:
设计方案
与内容
(20分)
制作与调试
(30分)
说明书内容与规范程度
(20分)
答辩
(20分)