12864LCD液晶显示设计.docx

上传人:b****6 文档编号:6773939 上传时间:2023-01-10 格式:DOCX 页数:18 大小:196.69KB
下载 相关 举报
12864LCD液晶显示设计.docx_第1页
第1页 / 共18页
12864LCD液晶显示设计.docx_第2页
第2页 / 共18页
12864LCD液晶显示设计.docx_第3页
第3页 / 共18页
12864LCD液晶显示设计.docx_第4页
第4页 / 共18页
12864LCD液晶显示设计.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

12864LCD液晶显示设计.docx

《12864LCD液晶显示设计.docx》由会员分享,可在线阅读,更多相关《12864LCD液晶显示设计.docx(18页珍藏版)》请在冰豆网上搜索。

12864LCD液晶显示设计.docx

12864LCD液晶显示设计

 

单片机技术课程设计说明书

128×64LCD液晶显示

 

目录

1.概述2

1.1课题设计背景2

1.2课程设计内容2

2设计方案2

3.系统硬件设计3

3.1控制模块3

3.2显示模块6

3.3电源模块9

4.系统软件设计10

4.1软件流程图10

4.2时序图11

5.结束语12

参考文献:

13

附录14

附录1:

程序清单15

附录二:

设计图纸19

附录3:

元器件目录表20

 

128×64LCD液晶显示

1.概述

1.1课题设计背景

液晶作为一种显示器件,以其特有的优势正广泛应用于仪器、仪表、电子设备等低功耗产品中。

以往的测控仪器的显示部分大都采用LED式液晶显示屏进行参数设定和结果显示,其显示信息量少、形式单一、人机交互性差、操作人员要求较高。

而液晶显示器(LCD)具有功耗低、体积小、质量轻、超薄和可编程驱动等其他显示方式无法比拟的优点,不仅可以显示数字、字符,还可以显示各种图形、曲线、及汉字,并且可实现屏幕上下左右滚动、动画、闪烁、文本特征显示等功能;人机界面更加友好,使用操作也更加灵活、方便,使其日益成为智能仪器仪表和测试设备的首选显示器件。

1.2课程设计内容

本实验设计的主要目的是:

掌握单片机与液晶显示器之间接口设计与编程;利用点阵式液晶显示器显示汉字或图形

设计要求:

编制程序,利用标准字库,在液晶上显示汉字。

2设计方案

本设计是以单片机为核心控制器件的简单文字符号图像的LCD显示系统,通过硬件和软件的共同配合之下实现了在128×64分辨率的液晶屏上显示字符、汉字和图像的功能,系统由单片机、和液晶显示屏构成。

LCD显示系统结构框图如图2所示,

图2、128×64LCD液晶显示系统结构框图

AT89C51单片机内部有4KB可反复擦写的Flash闪速存储器、128字节的RAM,可以根据系统所需存储容量的大小来扩展R0M和RAM。

LCD选用LCM12864液晶

3.系统硬件设计

采用128×64LCD液晶显示系统电路原理图如图2-1所示整个设计的核心器件有:

控制模块、显示模块、电源模块三部分组成。

3.1控制模块

控制模块电路如图3-1-1(a)、(b)所示。

3-1-1(a)、控制模块原理图AT89C51单片机示意图3-1-1(b)

主控制器采用AT89S51,AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

VCC:

供电电压。

GND:

接地。

   

P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

    

P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。

初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指钟写入07H,其它专用寄存器被清“0”。

RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。

然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,如表3-1-2所示。

特殊功能寄存器

初始态

特殊功能寄存器

初始态

ACC

00H

B

00H

PSW

00H

SP

07H

DPH

00H

TH0

00H

DPL

00H

TL0

00H

IP

xxx00000B

TH1

00H

IE

0xx00000B

TL1

00H

TMOD

00H

TCON

00H

SCON

xxxxxxxxB

SBUF

00H

P0-P3

1111111B

PCON

0xxxxxxxB

表3-1-2、8051的初始态

ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

    EA/VPP:

当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

    

XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

    

XTAL2:

来自反向振荡器的输出。

振荡器特性:

XTAL1和XTAL2分别为反向放大器的输入和输出。

该反向放大器可以配置为片内振荡器。

石晶振荡和陶瓷振荡均可采用。

如采用外部时钟源驱动器件,XTAL2应不接。

有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

芯片擦除:

整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。

在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。

此外,AT89S51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。

在闲置模式下,CPU停止工作。

但RAM,定时器,计数器,串口和中断系统仍在工作。

在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。

3.2显示模块

图3-2、显示模块的原理图

LCM12864ZK中文图形液晶显示模块的液晶屏幕为128×64,可显示四行,每行显示8个汉字。

中文液晶显示模块LCM12864ZK的字型ROM内含8192个16316点中文字型和

128个16×8半宽的字母符号字型;另外绘图显示画面提供一个64×256点的绘图区域GDRAM;而且内含CGRAM提供的4组软件可编程的16316点阵造字功能。

3.2.1.LCM12864ZK共20脚,其功能如表3-2-1所示:

表3-2-1、LCM12864ZK功能

引脚

名称

功能

引脚

名称       

功  能

1

CS1

选择寄存器(并行)0:

指令寄存器1:

数据寄存器片选(串行)0:

禁止1:

7

RW(SID)

读写控制脚(并行)0:

写入1:

读输入串行数据(串行)

2

CS2

选择寄存器(并行)0:

指令寄存器1:

数据寄存器片选(串行)0:

禁止1:

8

E(SCLK)

读写数据启始脚(并行)输入串行脉冲(串行)

3

GND

接地

4

VCC

3V/5V

9~16

D0~D7

数据线

5

V0

液晶显示器驱动电压

17

/RST

复位信号,低有效

6

RS

表示DB0~DB7为显示指令数据

18

-Vout

LCD驱动负电源

 引脚“/RST”和“PSB”可不接;不接时,为并行接口方式。

引脚“VR”和“V0”之间必须接可变电阻(0~10kΩ),一端接VR,调整端接V0,另一端悬空;且可变电阻需调到显示区域

的底色刚刚显示出来为止。

当PSB脚接高电时(模块背面S/P的短路电阻在“P”侧),模块将进入并行传输模式;在并行传输模式下,可由指令位(DLFLAG)来选择8-BIT或4-BIT接口,主控制系统将配合(RS,RW,E,DB0..DB7)来完成传输动作;当PSB脚接低电位(模块背面S/P的短路电阻在“S”侧),模块将进入串行模式;在串行模式下将使用二条传输线作串行资料的传送,主控制系统将配合传输同步时钟(SCLK)与接收串行数据线(SID),来完成串行传输的动作。

3.2.2LCM12864ZK基本操作指令LCM12864ZK内含ST7920驱动控制器,该控制器是液晶驱动器与计算机的接口,它以较简单的方式受控于计算机,接收并反馈计算机的各种信息,经过控制器独立的信息处理实现对液晶显示缓冲区的管理。

LCM12864ZK基本操作指令如表3-2-2所示。

表3-2-2、LCM12864ZK基本操作指令

指令名称

控制信号

控制代码

RS

RW

D7

D6

D5

D4

D3

D2

D1

D0

清除显示

0

0

0

0

0

0

0

0

0

1

位址清0

0

0

0

0

0

0

0

1

X

进入点设定

0

0

0

0

0

0

0

I/D

S

显示状态开/关

0

0

0

0

0

0

1

C

B

功能设定

0

0

0

0

1

DL

X

BE

X

X

设定DDRAM

0

0

1

AC6

AC5

AC4

AC3

AC2

AC1

AC0

读取忙标志

0

1

BF

AC6

AC5

AC4

AC3

AC2

AC1

AC0

写RAM

1

0

D7

D6

D5

D4

D3

D2

D1

D0

a.清除显示:

清DDRAM添满“20H”,并设定DDRAM的

位址AC=0

b.位址清0:

设定DDRAM的位址AC=0,将光标移到原点,不清DDRAM

c.进入点设定:

指定在资料的读取与写入时,设定光标的移动方向及指定显示的移位

d.显示状态开/关:

D=1:

整体显示ON,D=0:

整体显示OFF;C=1:

光标显示ON,C=0:

光标显示OFF;B=1:

光标反白显示ON,B=0:

光标反白显示OFF。

e.功能设定:

DL=18-bit控制界面、DL=04-bit控制界面、RE=1:

扩充指令集动作、RE=0:

基本指令集动作

f.设定DDRAM:

设定DDRAM位址到位址记数器AC。

第一行AC范围为80H~87H;第二行AC范围为90H~97H;第三行AC范围为88H~8FH;第四行AC范围为98H~9FH。

g.读取忙标志:

读取忙标志(BF),可以确认内部动作是否完成,同时可以读出位址记数器AC

h.写RAM:

写入数据到内部RAM(DDRAM/CGRAM/GDRAM)。

每个RAM位址(DDRAM/CGRAM/GDRAM)都可连续写入两个BYTE数据,当写入第2个BYTE时,位址计数器(AC)的值自动+1。

3.3电源模块

图3-3、电源电路

从USB接口获取+5V电源,用相应配套的USB线从电脑主机获取+5V直流电源,在电源模块中加有保护电路,即电路中有短路.

上拉电阻如图3-4所示。

图3-4、上拉电阻

上拉电阻的功能:

电阻作用:

1.接电组就是为了防止输入端悬空

2.减弱外部电流对芯片产生的干扰

3.加大输出引脚的驱动能力

4.上拉和下拉、限流

5.改变电平的电位

6.在引脚悬空时有确定的状态

7.增加高电平输出时的驱动能力。

8、为OC门提供电流

4.系统软件设计

4.1软件流程图

系统流程图如图4-1所示。

图4-1软件流程图

液晶显示器在上电后应先初始化,首先延时40ms以上,进行功能能设定(8位/4位、基本指令/扩充指令);再延时100μs,同样是功能设定;然后延时37μs,开关显示设定;延时10μs,清屏(清除显示RAM);最后延时10ms,设置读取与写入时光标的移动方向等。

液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志(P1.7)为低电平,表示不忙,否则此指令失效。

要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,即设定DDRAM位址到位址记数器AC。

第一行AC范围为80H~87H;第二行AC范围为90H~97H;第三行AC范围为88H~8FH;第四行AC范围为98H~9FH。

4.2时序图

时序参数如表4-2-(a)、(b)所示。

(a)写操作时序图(b)读操作时序图

图3-1(a)、(b)128×64点阵型LCD读写时序图

 

5.结束语

 随着仪器、仪表、电子设备等智能化程度的提高,单片机系统的液晶显示模块使用的也越来越广泛。

在单片机与液晶的接口中,关键是要满足液晶的时序要求;在软件编程中,关键是要进行正确的初始化、操作及显示内容的代码。

本次课程设计,我看到了自己许多不足之处。

以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图化出来,但是我开始总觉得这样做没必要,很浪费时间。

但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。

因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到了各种各样的问题,在这些问题中也认识到了自己的种种不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

其实这也给了我一个警告,在今后的学习中,我力争扎实学习。

 

参考文献:

[1]尹耕钦,唐绪伟城市交通信号灯模拟控制系统,微计算机信息,2005.

[2]周立功,ARM嵌入式系统基础教程[M].北京:

北京航空航天大学出版社,2005.

[3]张立强,于伟.电路原理图与PCB板设计教程ProtelDXP[M].北京:

科学出版社,2005.

[4]王立权.机器人创新设计与制作[M].北京:

清华大学出版社,2007.

[5]杨靖.《用单片机控制的直流电机调速系统》,机床电路,2008.1.

[6]高国富,谢少荣,罗均.机器人传感器及其应用[M].北京:

化学工业出版社,2005.

[7]何勇,王生泽.光电传感器及其应用[M].北京:

化学工业出版社,2004.

[8]周立功.MagicARM2200-S教学实验开发平台实验指导[M].北京:

北京航空航天大学出版社,2005.

[9]郭天祥.新概念51单片机C语言教程[M].北京:

电子工业出版社,2008.

[10]张睿.AltiumDesigner6.0原理图与PCB设计[M].北京:

电子工业出版社,2007.

[11]冯建华,赵亮编著《单片机应用系统设计与产品开发》人民邮电出版社2004.11.

[12]陈正义,编著《单片机控制实习》人民邮电出版社,2006.7.

 

附录

附录1:

程序清单

附录二:

设计图纸

附录3:

元器件目录表

 

附录1:

程序清单

基于单片机的128×64LCD液晶显示控制系统程序清单

;************************************************;

;  带字库液晶显示模块LCM12864ZK系统程序     ;

;************************************************;

;******************初始化部分********************

#defineUcharunsignedchar

#defineUintunsignedint

#defineUlongunsignedlong

sbitE=P3^0;//对应第8脚

sbitRW=P3^1;//对应第7脚

sbitRS=P3^2;//对应第6脚

;******************定义字符串数组********************

codecharSTR1[]=“济宁职业技术学院计算机工程系”;

codecharSTR3[]=“单片机和图形液晶显示器接口技术”;

;******************定义函数原型********************

voidDelayus(Ulongt);/延时函数/

voidBUSYLOOP();//判忙函数//

voidWrite-command(UcharCMD,Ucharbb);//发控制字函

数//

voidWrite-data(UcharCMD);//发数据函数//

voidCHUSHIHUA();//初始化函数//

voidDisplay(Ucharptr,Ucharddram);//显字符串函数

//

;******************判忙函数********************

voidBUSYLOOP()

{P1=0x0ff;

RS=0;

RW=1;

do{

E=1;

BUSY=P1;

E=0;}

while(BUSY>0x7F);}

;******************写控制字函数********************

voidWrite-command(UcharCMD,Ucharbb)

{if(bb)

{BUSYLOOP();}

RS=0;

RW=0;

E=1;

P1=CMD;

Delayus

(1);

E=0;}

;******************写数据函数********************

voidWrite-data(UcharCMD)

{BUSYLOOP();

RS=1;

RW=0;

E=1;

P1=CMD;

Delayus

(1);

E=0;}

;******************液晶初始化********************

voidCHUSHIHUA()

{Delayus(38);

Write-command(0x30,0);/8位、基本指令/

Delayus

(1);

Write-command(0x30,0);/8位、基本指令

Delayus

(1);

Write-command(0x0C,1);/开显示/

Delayus

(1);

Write-command(0x01,1);/清屏3/

Delayus(20);

Write-command(0x06,1);}/光标右移/

;******************显示字符串********************

voidDisplay(Uchar3ptr,Ucharddram)

{Ucharl,i1,x;

l=0;

if(ddram<0x88)

{hang=0;}//定位行地址:

第一行

elseif(ddram<0x90)

{hang=2;}//定位行地址:

第三行

elseif(ddram<0x98)

{hang=1;}//定位行地址:

第二行

else{hang=3;}//定位行地址:

第四行

lie=0x0f&ddram;//定位列地址

if(lie>0x07)

{lie=lie-0x08;}

x=lie32;

Write-command(ddram,0);//定位显示起始地址

while((ptr[l])!

=’\0’)

{l++;}

for(i1=0;i1

{Write-data(ptr[i1]);//输出单个字符

x++;

if(x==0x10)

{x=0;

hang++;

switch(hang)

{case0:

Write-command(0x80,0);break;

.........}

if(hang>3){Write-command(0x80,0);

hang=0;}}}}

;******************主函数开始********************

main()

{CHUSHIHUA();//初始化函数//

Display(STR1,0x80);//上面一行显示一个预定字符串

Displ

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1