单片机的LCD显示屏.docx
《单片机的LCD显示屏.docx》由会员分享,可在线阅读,更多相关《单片机的LCD显示屏.docx(18页珍藏版)》请在冰豆网上搜索。
单片机的LCD显示屏
实验报告
实验课程名称近代电子学实验
实验项目名称基于单片机的LCD显示屏
专业班级电子信息科学与技术081班
学生姓名郎子龙
学号080712110069
指导教师李良荣
理学院
实验时间:
2011年5月13日
基于单片机的LCD显示屏
一、实验目的
1、利用最小系统的液晶显示电路,编写程序控制显示,输出字符。
2、了解液晶显示的控制原理及方法。
二、设计内容及要求
1、绘制流程图
2、进行软件编程和软模拟
3、进行硬件调试
三、实验原理
1、1602显示屏简介
工业字符型液晶,能够同时显示16x02即32个字符。
(16列2行)
2、管脚功能
1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线
VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:
引脚
符号
功能说明
1
VSS
一般接地
2
VDD
接电源(+5V)
3
V0
液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
4
RS
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
5
R/W
R/W为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
6
E
E(或EN)端为使能(enable)端,下降沿使能。
7
DB0
低4位三态、双向数据总线0位(最低位)
8
DB1
低4位三态、双向数据总线1位
9
DB2
低4位三态、双向数据总线2位
10
DB3
低4位三态、双向数据总线3位
11
DB4
高4位三态、双向数据总线4位
12
DB5
高4位三态、双向数据总线5位
13
DB6
高4位三态、双向数据总线6位
14
DB7
高4位三态、双向数据总线7位(最高位)(也是busyflag)
15
BLA
背光电源正极
16
BLK
背光电源负极
寄存器选择控制表
RS
R/W
操作说明
0
0
写入指令寄存器(清除屏等)
0
1
读busyflag(DB7),以及读取位址计数器(DB0~DB6)值
1
0
写入数据寄存器(显示各字型等)
1
1
从数据寄存器读取数据
注:
关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0.
busyflag(DB7):
在此位为被清除为0时,LCD将无法再处理其他的指令要求。
3、字符集
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。
以下是1602的16进制ASCII码表:
读的时候,先读上面那列,再读左边那行,如:
感叹号!
的ASCII为0x21,字母B的ASCII为0x42(前面加0x表示十六进制)。
4、显示地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
00H
01H
02H
03H
04H
05H
06H
07H
08H
09H
0AH
0BH
0CH
0DH
0EH
0FH
40H
41H
42H
43H
44H
45H
46H
47H
48H
49H
4AH
4BH
4CH
4DH
4EH
4FH
5、指令集
1602通过D0~D7的8位数据端传输数据和指令。
显示模式设置:
(初始化)
00111000[0x38]设置16×2显示,5×7点阵,8位数据接口;
显示开关及光标设置:
(初始化)
00001DCBD显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效)
000001NSN=1(读或写一个字符后地址指针加1&光标加1),
N=0(读或写一个字符后地址指针减1&光标减1),
S=1且N=1(当写一个字符后,整屏显示左移)
s=0当写一个字符后,整屏显示不移动
数据指针设置:
数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H)
其他设置:
01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。
通常推荐的初始化过程:
延时15ms
写指令38H
延时5ms
写指令38H
延时5ms
写指令38H
延时5ms
(以上都不检测忙信号)
(以下都要检测忙信号)
写指令38H
写指令08H关闭显示
写指令01H显示清屏
写指令06H光标移动设置
写指令0cH显示开及光标设置
完毕
6、Proteus仿真
使用Proteus仿真1602--即LM016L--依照数据手册说明可能遇到困难,可以尝试采用以下方案解决:
1、数据手册中可能介绍1602内部D0~D7已有上拉,可以使用P0口直接驱动。
在Proteus里LM016L内部可能没有,应该人为
加上拉电阻。
建议不要使用排阻,使用普通电阻一个一个拉应该可以解决问题;
2、可能碰到不能检测忙信号的问题,尝试使用延时把忙信号拖过去。
7、基本的读写时序图
读写操作时序如图1和2所示:
写操作时序:
读操作时序:
四、电路的设计、安装及调试
1、电路图:
2、源程序:
/********************************************************************
**1602显示
*********************************************************************/
LCD_RSEQUP2.4
LCD_RWEQUP2.3
LCD_ENEQUP2.2
;*******************************************************************
ORG0000H
AJMPMAIN
ORG0030H
;*******************************************************************
MAIN:
MOVSP,#60H
ACALLLCD_INIT;LCD初始化
MAIN1:
ACALLCLR_LCD;清LCD
MOVA,#90H;在第一行第17列的位置
ACALLLCD_CMD
MOVDPTR,#LINE1;第一行字符串的起始地址送入DPTR。
ACALLWRITE
MOVA,#0D0H;在第二行第17列的位置
ACALLLCD_CMD
MOVDPTR,#LINE2;第二行字符串的起始地址送入DPTR。
ACALLWRITE
MOVR3,#10H;向左移动16格
LOOPA:
MOVA,#18H;字符同时左移一格
ACALLLCD_CMD
MOVR5,#03H;延时375MS
ACALLDELAY125MS
DJNZR3,LOOPA
ACALLDELAY4;延时1.6s
ACALLDELAY4
MOVR4,#02H;设置闪烁次数
ACALLFLASH;开始闪烁
AJMPMAIN1
LINE1:
DB"WELCOMEYOUTO",00H
LINE2:
DB"GUIZHOUPROVINCE",00H
;***************************************************************
;LCD初始化设定子程序
;***************************************************************
LCD_INIT:
ACALLDELAY5MS;延时15MS
ACALLDELAY5MS;等待LCD电源稳定
ACALLDELAY5MS
MOVA,#38H;16*2显示,5*7点阵,8位数据
ACALLLCD_CMD_NC;不进行LCD忙检测
ACALLDELAY5MS
MOVA,#38H;16*2显示,5*7点阵,8位数据
ACALLLCD_CMD_NC;不进行LCD忙检测
ACALLDELAY5MS
MOVA,#38H;16*2显示,5*7点阵,8位数据
ACALLLCD_CMD_NC;不进行LCD忙检测
ACALLDELAY5MS
MOVA,#08H;显示关
ACALLLCD_CMD;进行LCD忙检测
MOVA,#01H;清除屏幕
ACALLLCD_CMD;进行LCD忙检测
MOVA,#0CH;显示开,关光标
ACALLLCD_CMD;进行LCD忙检测
RET
;***************************************************************
;清LCD子程序
;***************************************************************
CLR_LCD:
MOVA,#01H;清除屏幕
ACALLLCD_CMD;进行LCD忙检测
RET
;***************************************************************
;写指令数据到LCD
;RS=L,RW=L,D0-D7=指令码,E=高脉冲
;***************************************************************
LCD_CMD:
CALLCHECKBUSY
LCD_CMD_NC:
CLRLCD_RS
CLRLCD_RW
MOVP0,A
SETBLCD_EN
NOP
NOP
NOP
NOP
CLRLCD_EN
RET
;***************************************************************
;写显示数据到LCD
;RS=H,RW=L,D0-D7=数据,E=高脉冲
;***************************************************************
LCD_WDATA:
ACALLCHECKBUSY
SETBLCD_RS
CLRLCD_RW
MOVP0,A
SETBLCD_EN
NOP
NOP
NOP
NOP
CLRLCD_EN
RET
;***************************************************************
;检测LCD控制器忙状态
;读数据
;RS=L,RW=H,E=H,输出:
D0-D7=数据
;P0.7=1,LCD忙,等待。
P0.7=0,LCD闲,可以进行读写操作。
;***************************************************************
CHECKBUSY:
PUSHACC
MOVP0,#0FFH
CLRLCD_RS
SETBLCD_RW
SETBLCD_EN
BUSYLOOP:
NOP
JBP0.7,BUSYLOOP
CLRLCD_EN
POPACC
RET
;***************************************************************
;发送字符串子程序
;***************************************************************
WRITE:
PUSHACC
WRITE1:
CLRA
MOVCA,@A+DPTR
JZWRITE2
INCDPTR
ACALLLCD_WDATA
JMPWRITE1
WRITE2:
POPACC
RET
;***************************************************************
;闪烁子程序
;***************************************************************
FLASH:
MOVA,#08H;关闭显示
ACALLLCD_CMD
ACALLDELAY4
MOVA,#0CH;开显示,关闭光标
ACALLLCD_CMD
ACALLDELAY4
DJNZR4,FLASH
RET
;***************************************************************
;延时5MS子程序
;LCD初始化使用
;***************************************************************
DELAY5MS:
MOVR6,#10
DL1:
MOVR7,#249
DL2:
DJNZR7,DL2
DJNZR6,DL1
RET
;***************************************************************
;延时125MS子程序
;字符串移动时使用
;***************************************************************
DELAY125MS:
DL3:
MOVR6,#250
DL4:
MOVR7,#249
DL5:
DJNZR7,DL5
DJNZR6,DL4
DJNZR5,DL3
RET
;***************************************************************
;延时800MS子程序
;闪烁时使用
;***************************************************************
DELAY4:
MOVR5,#40
DL6:
MOVR6,#100
DL7:
MOVR7,#100
DL8:
DJNZR7,DL8
DJNZR6,DL7
DJNZR5,DL6
RET
;***************************************************************
END
五、实验研究与参考
当今是一个信息化的时代,信息的重要性是不言而喻的,获取手段显得尤其重要。
人们所接受的信息有70%来自于人的视觉,无论用何种方式获取的信息最终需要有某种显示方式来表示。
在当代显示技术中,主流的有LED显示屏及LCD液晶显示,而在这些显示技术中,尤其以液晶显示器LCD(LiquidCrystalDisplay)为代表的平板显示器发展最快、应用最广。
LCD是典型的光电器件,它以材料科学为基础,综合利用了精密机械、光电及计算机技术,并正在微机械、微光学、纤维光学等前沿领域研究基础上,向高集成化、智能化方向发展。
液晶显示技术发展迅猛,市场预测表明,液晶显示器平均年销售量增长10%~13%,不久的将来有可能取代CRT,成为电子信息产品的主要显示器件,另外,液晶显示器对空间电磁辐射的干扰不敏感,且在紧凑的仪器空间不需要专门的屏蔽保护,因而可大大简化仪器的结构和制造成本,在各种便携式仪器、仪表将会得到越来越广泛的应用。
特别是在电池供电的单片机产品中,液晶显示器更是必选的显示器件。
1、液晶显示器在单片机系统中的应用
在日常生活中,我们对液晶显示器并不陌生。
液晶显示模块已作为很多电子产品的通用器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。
在单片机的人机交流界面中,一般的输出方式有以下几种:
发光管、LED数码管、液晶显示器。
发光管和LED数码管比较常用,软硬件都比较简单,在小型智能化电子产品中,普通的7段LED数码管只能显示数字,若要显示英文字母或图像汉字,则必须使用液晶显示器,所以本课题重点研究液晶显示器
2、液晶显示器的优点
在单片机系统中应用晶液显示器作为输出器件有以下几个优点:
(1)显示质量高
由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。
因此,液晶显示器画质高且不会闪烁。
(2)数字式接口
液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方。
(3)体积小、重量轻
液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。
(4)功耗低
相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。
3、单片机介绍
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
作为嵌入式系统控制核心的单片机具有其体积小、功能全、性价比高等诸多优点。
51系列单片机是国内目前应用最广泛的单片机之一,随着嵌入式系统、片上系统等概念的提出和普遍接受及应用,51系列单片机的发展又进入了一个新的阶段。
在今后很长一段时间内51系列单片机仍将占据嵌入式系统产品的中低端市场。
4、汇编语言介绍
汇编语言比机器语言易于读写、调试和修改,同时具有机器语言全部优点。
但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。
汇编语言具有如下特点:
面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。
2.保持了机器语言的优点,具有直接和简捷的特点。
3.可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。
4.目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。
5.经常与高级语言配合使用,应用十分广泛。