以LCD点阵字符显示屏为主的多功能任务设计.docx
《以LCD点阵字符显示屏为主的多功能任务设计.docx》由会员分享,可在线阅读,更多相关《以LCD点阵字符显示屏为主的多功能任务设计.docx(21页珍藏版)》请在冰豆网上搜索。
以LCD点阵字符显示屏为主的多功能任务设计
《单片机原理及应用课程设计报告》
课题:
以LCD点阵字符显示屏为主的多功能任务设计
班级电气1077学号1071206142
学生姓名张金标
指导教师李洪海严石段卫平
淮阴工学院
电子与电气工程学院
目录
一设计目的......................................(3)
二设计要求..........................................(3)
1.总体要求........................................(3)
2.具体要求.........................................(3)
三硬件电路总体设计...............................(4)
3.1系统硬件总框图.................................(4)
3.2系统设计原理...................................(4)
3.2.1主控电路AT89C52单片机................................(4)
3.2.2LED流水灯............................................(5)
3.2.3数码管显示............................................(6)
3.2.4蜂鸣器电路............................................(7)
3.2.5LCD点阵字符显示电路.................................(8)
3.2.6复位模块..............................................(12)
四软件流程框图...................................(13)五软件编程与仿真..................................(14)
5.1设计步骤.......................................(14)
5.2仿真............................................(14)
六调试情况......................................(15)
6.1软件调试.......................................(15)
6.2调试结果.......................................(15)
七实习感想........................................(15)
八参考文献......................................(16)
九附录.............................................(16)
一、课程设计目的
《单片机原理及应用》课程设计是一项重要的实践性教育环节,是学生在校期间必须接受的一项工程训练。
在课程设计过程中,在教师指导和同学帮助下,应用工程的方法,通过一个简单课题的设计练习,可使学生初步体验单片机应用系统的设计过程、设计要求、完成的工作内容和具体的设计方法,了解必须提交的各项工程文件,也达到巩固、充实和综合运用所学知识解决实际问题的目的。
通过课程设计,应该能加强学生如下能力的培养:
(1)独立工作能力和创造力;
(2)综合运用专业及基础知识,解决实际工程技术问题的能力;
(3)查阅图书资料、产品手册和各种工具书的能力;
(4)工程绘图的能力;
(5)编写技术报告和编写技术资料的能力。
二、设计要求
2.1总体要求
(1)独立完成设计任务
(2)绘制系统硬件总框图
(3)绘制系统原理电路图
(4)制定编写设计方案,编制软件框图,完成详细完整的程序清单和注释
(5)制定编写调试方案,编写用户操作使用说明书
(6)写出设计工作小结。
对在完成以上文件过程所进行的有关步骤如设计思想、指标论证、方案确定、参数计算、元器件选择、原理分析等作出说明,并对所完成的设计作出评价,对自己整个设计工作中经验教训,总结收获和今后研究方向。
2.2具体要求
本次工程实践的校内部分主要以单片机为基础,进行单片机软件编程,目的是为了提高学生的软件编程和系统设计能力,整个设计系统包括两个部分,硬件及软件部分,硬件部分已经制作成功,学生只需要掌握其原理和焊接相应的元器件,掌握元器件的辨别和元器件的作用以及应用场所即可,另外对所焊接的电路还需要进行仔细的检查,判断是否有焊接错误的地方或者短路的地方,对出现的异常情况要能够根据现象判别原因,并具备解决问题的能力,从而切实提高学生的硬件电子电路的分析、判断能力。
软件编程是本次工程实践的重要环节。
在为期两周的工程实践中,将占据主要时间,学生要完成的软件编程任务主要包括以下几点:
(1)、熟悉KeilC51编程平台及相关编程软件
(2)、编写、调试蜂鸣器、继电器动作、方波程序并进行软硬件联调
(3)、编写、调试LED流水灯(循环显示)程序并进行软硬件联调
(4)、编写、调试数码管动态扫描程序并进行软硬件联调
(5)、以LCD点阵字符显示屏为主的多功能任务设计
其中前五个内容是后两个内容的基础,主要是编制一些子程序,为后继的整个系统设计打下基础。
三、硬件电路总体设计
3.1系统硬件总框图
图1硬件总框图
3.2系统设计原理
3.2.1主控电路AT89C52单片机
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
图2AT89C52引脚图
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
3.2.2LED流水灯
图3流水灯模块
当按下开关后流水灯模块开始运行,由于电路中LED为共阳极,故控制流水灯显示的P1口应为低电平时才有效。
根据原理图让接在P0口的D1亮起来,需要把P0.0口的电平变为低电平,因此当需要把D1熄灭时只需要将P0.0口的电平变为高电平,同理与P0.1~P0.7相对应的D1~D7的点亮与熄灭的原理与D0的相同,低电平点亮,高电平熄灭。
因此要实现流水灯的功能只需要将D0~D7依次点亮,便可实现流水灯的功能了。
3.2.3数码管显示
数码显示电路按显示方式分为动态显示和静态显示两大类。
其中静态显示的效果较好,控制也较简单,但会以大量的硬件开销和占用较多的I/O口为代价。
动态显示的电路较简单,但简单的硬件需要复杂的软件来支持。
图4数码管模块
另外,数码管按照其公共端可分为共阳和共阴两大类。
针对于单片机I/O口高低电平驱动能力不等的特点应选择不同的硬件结构驱动不同类型的数码管。
3.2.4蜂鸣器电路
本电路通过一个PNP三极管9012来放大驱动蜂鸣器,蜂鸣器的正极接到VCC(+5V)电源上面,蜂鸣器的负极接到三极管的发射极,三极管的基极经过限流电阻R9后由单片机的IO控制,当输出高电平时,三极管Q1截止,没有电流流过线圈,蜂鸣器不发声;当输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。
因此可以通过程序控制IO口输出的电平来使蜂鸣器发出声音。
图5蜂鸣器模块
图6蜂鸣器流程图
3.2.5LCD点阵字符显示
LCD可分为两种类型,一种是字符模式的LCD,别一种是图形模式LCD,其中,字符模式LCD是点阵型液晶显示器,专门用来显示字母,数字,符号等。
由于LCD的控制需要专用的驱动电路,一般不会单独使用,而是将LCD面板,驱动与控制电路组合而成的LCD模块一起使用。
本实验中采用了LM016L作为显示器。
LM016L液晶模块采用HD44780控制器。
HD44780用低功耗CMOS技术制造的大规模点阵LCD控制器,具有简单而功能较强的指令集,可以实现字符移动、闪烁等功能,与微处理器相连能使LCD显示大小英文字母,数字和符号。
LM016L与单片机MCU(MicrocontrollerUnit)通讯可采用8位或者4位并行传输两种方式。
HD44780控制器由两个8位寄存器、指令寄存器(IR)和数据寄存器(DR)、忙标志(BF)、显示数据RAM(DDRAM)、字符发生器ROM(CGROM)、字符发生器RAM(CGRAM)、地址计数器(AC)。
IR用于寄存指令码,只能写入不能读出;
图7LCD点阵字符显示模块
DR用于寄存数据,数据由内部操作自动写入DDRAM和CGRAM,或者暂存从DDRAM和CGRAM读出的数据。
BF为1时,液晶模块处于内部处理模式,不响应外部操作指令和接受数据。
DDRAM用来存储显示的字符,能存储80个字符码。
CGROM由8位字符码生成5*7点阵字符160种和5*10点阵字符32种,8位字符编码和字符的对应关系,只要将标准的ASCII码放入DDRAM,内部控制线路就会自动将数据传送到显示器上,并显示出该ASCII码对应的字符。
CGRAM是为用户编写特殊字符留用的,它的容量仅64字节。
可以自定义8个5*7点阵字符或者4个5*10点阵字符。
AC可以存储DDRAM和CGRAM的地址,如果地址码随指令写入IR,则IR自动把地址码装入AC,同时选择DDRAM或者CGRAM单元。
LM016L液晶模块的引脚功能如下:
(1)Vss(引脚1):
电源地。
(2)Vdd(引脚2):
电源正极,接+5V电源。
(3)Vl(引脚3):
液晶显示偏压信号。
(4)RS(引脚4):
数据/指令寄存器选择端。
高电平时选择数据寄存器,低电平时选择指令寄存器。
(5)R/W(引脚5):
读/写选择端。
高电平时为读操作,低电平时为写操作。
(6)E(引脚6):
使能信号,下降沿触发。
(7)D0~D7(引脚7~14):
I/O数据传输线。
(8)BLA(引脚15):
背光源正极。
(9)BLK(引脚16):
背光源负极。
LCD点阵字符显示电路流程图
图8LCD点阵字符显示电路流程图
1602液晶模块内部的控制器共有11条控制指令,如表1所示
表1:
控制命令表
序号
指令
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
读出的数据内容
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
指令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与HD44780相兼容的芯片时序表
读状态
输入
RS=L,R/W=H,E=H
输出
D0—D7=状态字
写指令
输入
RS=L,R/W=L,D0—D7=指令码,E=高脉冲
输出
无
读数据
输入
RS=H,R/W=H,E=H
输出
D0—D7=数据
写数据
输入
RS=H,R/W=L,D0—D7=数据,E=高脉冲
输出
无
读写操作时序如图9和图10所示:
图9读操作时序
图10写操作时序
3.2.6晶振复位模块
晶振分为有源晶振和无源晶振两种,其作用是在电路产生震荡电流,发出时钟信号。
它是时钟电路中最重要的部件,它的作用是向IC等部件提供基准频率,它就像个标尺,工作频率不稳定会造成相关设备工作频率不稳定,自然容易出现问题。
复位电路是为确保微机系统中电路稳定可靠工作必不可少的一部分,复位电路的第一功能是上电复位。
一般微机电路正常工作需要供电电源为5V±5%,即4.75~5.25V。
由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。
图7复位模块
四、软件流程框图
图总流程图
五、软件编程与仿真
5.1设计步骤
1、打开单片机软件开发系统“keiluvision”,单击“uvision”菜单中的“project”,在此下拉菜单中单击“newproject”选项后,弹出“createnewproject”对话框,键入新建项目名称。
2、键入新建项目名并单击确定按钮后,在弹出的“selectdevice”对话框中选择合适的单片机型号,如AT89C51.
3、单击uvision菜单中的File,在此下拉菜单中选择New后,打开一个空的文本编辑窗口,在此窗口中键入程序,创建新的源程序“字符式LCD的应用.ASM”文件。
4、在左边的“project”窗口的file页中单击文件组,再单击鼠标右键后,在弹出的窗口中选中“AddFilestoGroup‘SourceGroup1’”选项,将“字符式LCD的应用.ASM”程序导入到“SourceGroup1”中。
5、在“project”下拉菜单中,选择“optionsfortarget”,将会弹出“optionsfortarget”对话框,在此对话框中选中output选项卡中的“creatHEXFile”选项。
6、在project下拉菜单中,选择“rebuildalltargetfiles”项。
若程序编译成功,将生成“字符式LCD的应用.HEX”文件。
5.2程序仿真
1、在“proteusISIS”编译窗口中,单击鼠标右键将AT89C51单片机选中并单击鼠标左键,弹出“Editcomponent”对话框,在此对话框的“Clockfrequency”栏中设置单片机经侦频率为12MHz,在projectfile栏中单击图标
,选择先前用keiluvision2生成的“字符式LCD的应用.HEX”文件。
2、在ProteusISIS编辑窗口的file栏,在此下拉菜单中选择savedesign选项,保存设计,生成“字符式LCD的应用.DSN”文件。
3、在proteusISIS编辑窗口中单击“箭头图标”,可看见在LM016L液晶上显示相应字符。
六、调试情况
6.1设计调试
软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
6.2调试结果
通过按按键KEY1,观察到LED流水灯显示,并循环2次;与相应的程序代码相比较,结果正确。
通过按按键KEY2,观察到数码管显示动态的数字0~9与相应的程序代码相比较,结果正确。
通过按按键KEY3,听到蜂鸣器发出“嘀”,“嘀”的响声;与相应的程序代码相比较,结果正确。
通过按按键KEY4,观察到LCD显示屏上显示出字母,与相应的程序代码相比较,结果正确。
七、附录程序代码
LCD点阵字符显示屏为主的多功能设计
RSBITP2.7
RWBITP2.6
EBITP2.5
DOUTEQUP3
ORG0030H
LOP:
MOVSP,#51H
ACALLLCD_MODEL;调液显复位程序
MOVDOUT,#81H
ACALLREADY
MOVDPTR,#TAB;调液显第一行显示字符
ACALLWRITE;显示的模块
MOVP3,#0C1H
ACALLREADY
MOVDPTR,#TAB1;调液显第二行显示字符
ACALLWRITE
AJMP$
WRITE:
MOVA,#00H
MOVCA,@A+DPTR;调显示代码库
CJNEA,#0FFH,s;是否为结束码
AJMPEXIT
S:
MOVDOUT,A;显示代码
ACALLWRITE1
INCDPTR
AJMPWRITE
EXIT:
RET
WRITE1:
SETBRS
CLRRW
CLRE
ACALLDELAY
SETBE
RET
LCD_MODEL:
MOVDOUT,#01H;清屏
ACALLREADY
MOVDOUT,#03H
ACALLREADY
MOVDOUT,#00000110B;设置输入模式
ACALLREADY
MOVDOUT,#00001100B;设置显示开关控制
ACALLREADY
MOVDOUT,#38H;设置显示模式
ACALLREADY
RET
READY:
CLRRS
CLRRW
CLRE
ACAlLDELAY
SETBE
RET
DELAY:
MOVDOUT,#0FFH
CLRRS
SETBRW
CLRE
NOP
SETBE
JBDOUT.7,DELAY
RET
TAB:
DB43H,5AH,50H,4DH,43H,55H
DB40H,31H,32H,36H,2EH,63H,6FH,6DH,01H
DB0ffh
TAB1:
DB54H,45H,4CH,30H,31H,32H,33H,34H,35H;TEL012345
DB36H,37H,38H,39H,30H,31H;678910
DB0ffh
END
前三部分程序代码
COUNTER1DATA30H
COUNTER2DATA31H
COUNTER3DATA32H
COUNTER4DATA33H
ORG7000H;;程序执行开始地址
MOVCOUNTER1,#00H
MOVCOUNTER2,#00H
MOVCOUNTER3,#00H
MOVCOUNTER4,#00H
LJMPSTART;;跳转到标号start执行
ORG8003H
AJMPEXINT0
ORG8100H
START:
LCALLKEY;;调用按键子程序
AJMPSTART
KEY:
MOVP1,#0F0H;;单片机按键口置位
MOVA,P1
MOVB,A
ACALLDELAY2
MOVA,P1
CJNEA,B,K4;判断是否有键按下,没有则转移
CJNEA,#0E0H,K1;判断KEYA键是否按下,没有则转移
AJMPKEYA;KEYA键按下,执行扬声器子程序
K1:
CJNEA,#0D0H,K2;判断KEYB键是否按下,没有则转移
AJMPKEYB;KEYB键按下,执行流水灯子程序
K2:
CJNEA,#0B0H,K3;判断KEYC键是否按下,没有则转移
AJMPKEYC;KEYC键按下,执行数码管动态显示子程序
K3:
CJNEA,#070H,K4;判断KEYD键是否按下,没有则转移
AJMPKEYD;KEYD键按下,执行速度里程表子程序
K4:
RET
;*******扬声器*******
KEYA:
MOVR5,#0FFH
SETBP3.0
DJNZR5,$
MOVR6,#0FFH
CLRP3.0
DJNZR6,$
RET
;*******流水灯*******
KEYB:
MOVP2,#11111110B;第一个灯亮,其余的熄灭
LCALLDELAY1;延时
MOVP2,#11111101B;第二个灯亮,其余的熄灭
LCALLDELAY1;延时
MOVP2,#11111011B;第三个灯亮,其余的熄灭
LCALLDELAY1;延时
MOVP2,#11110111B;第四个灯亮,其余的熄灭
LCALLDELAY1;延时
MOVP2,#11101111B;第五个灯亮,其余的熄灭
LCALLDELAY1;延时
MOVP2,#11011111B;第六个灯亮,其余的熄灭
LCALLDELAY1;延时
MOVP2,#10111111B;第七个灯亮,其余的熄灭
LCALLDELAY1;延时
MOVP2,#01111111B;第八个灯亮,其余的熄灭
LCALLDELAY1;延时
SETBP2.7
RET
*****数码管动态显示*****
KEYC:
CLRP1.0
MOVP0,#0F9H
SETBP1.3
ACALLDELAY2
MOVP0,#0FFH
CLRP1.3
MOVP0,#0A4H
SETBP1.2
ACALLDELAY2
MOVP0,#0FFH
CLRP1.2
MOVP0,#0B