LCD1602液晶显示器设计.docx

上传人:rrsccc 文档编号:9357894 上传时间:2021-02-21 格式:DOCX 页数:27 大小:414.14KB
返回 下载 相关 举报
LCD1602液晶显示器设计.docx_第1页
第1页 / 共27页
LCD1602液晶显示器设计.docx_第2页
第2页 / 共27页
LCD1602液晶显示器设计.docx_第3页
第3页 / 共27页
LCD1602液晶显示器设计.docx_第4页
第4页 / 共27页
LCD1602液晶显示器设计.docx_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《LCD1602液晶显示器设计.docx》由会员分享,可在线阅读,更多相关《LCD1602液晶显示器设计.docx(27页珍藏版)》请在三一文库上搜索。

1、LCD1602 液晶显示课程设计第一章 绪论1.1 课题背景当今时候是一个信息化的时代, 信息的重要性不言而喻的, 获取手段显得尤其重要。人们所接受的信息有 70%来自于人的视觉,无论用何种方式获取的信息最终需要有某种显示方式来表示。 在当代显示技术中, 主流的有 LED显示屏和 LCD 液晶显示,而在这些显示技术中,尤其以液晶显示器LCD(Liquid crystal display )为代表的平板显示器发展最快,应用最广。LCD 是典型的发光器件,它一材料科学为基础,综合利用了精密机械,光电及计算机技术,并正在微机械,微光学,纤维光学等前沿领域研究基础上,向高集成化,智能化方向发展。液晶

2、显示技术 发展迅猛 ,市 场预测表 明,液晶 显示 平均年销 售呈增长10%13%,不久的将来有可能取代 CRT,成为电子信息产品的主要显示器件,另外,液晶显示器对空间电磁辐射的干扰不敏感,且在紧凑的仪器空间不需要专门的屏蔽保护,因而课大大简化仪器的结构和制造成本,在各种便携式仪器, 仪表将会越来越广泛的应用。特别是在电池供电的单片机产品中,液晶显示更是必选的显示器件。1.2 课题设计目标本设计是基于 AT89C51 芯片单片机为主控芯片, 结合 1602 液晶显示模板等外围电路,通过软件程序, 来实现液晶显示英文字母。 本次设计的目的在于利用单片机和 IIC 技术来显示英文字母。1.3 课程

3、设计的主要工作( 1)对系统的各个模块的各个功能进行深入分析和研究,在对课题所采用的方案进行可行详细的研究后设计具体功能电路。( 2)熟悉所选芯片的功能并完成具体电路设计。( 3)对系统的最终指标进行测试,针对系统的不足,进行分析并提出一些改正方法。1.4 设计要求( 1)运行 IIC 总线技术。( 2)循环显示字母。第二章硬件设计2.1 LCD1602 简介2.1.1LCD1602引脚功能LCD1602 引脚如图 2.1 所示图 2.1 LCD1602 引脚图引脚图的功能如表21 所示2表 引脚功能图2.1.2LCD1602 显示模指令集(1)清屏功能:清 DDROM 值和 AC 值(2)归

4、位功能:光标复位,光标返回到地址00H(3)输入方式设置功能:设置光标,画面移动方式。其中: I/D=1 :数据读写操作后, AC 自加一;I/D=0 :数据读写操作后, AC 自减一;S=1:数据读写操作,画面平移;S=0:数据读写操作,画面不动;(4)显示开关控制3功能:设置显示、光标和闪烁开关。其中: D 表示显示开关, D=1 为开, D=0 为关; C 表示光标开关, C=1 为开, C=0 为关; B 表示闪烁开关, B=1 为开, B=0 为关。(5)光标、画面位移功能:光标、画面移动。其中: S/C=1 画面移动一个字符位;S/C=0 光标移动一个字符位;R/L=1 :右移;

5、R/L=0 左移。(6)功能设置功能:工作方式设置(初始化指令)。其中: DL=1 ,8 位数据接口;DL=0 ,4 位数据接口 ;N=1,两行显示; N=0,一行显示;F=1,5*10 点阵显示; F=0,5*7 点阵显示。(7)CGRAM 地址设置功能:设置 CGRAM 地址, A5A0=0 3FH。(8)DDRAM地址设置功能:设置 DDRAM地址。4其中: N=0,一行显示 A6A0=04FH ;N=1 两行显示,首行 A6A0=02FH ,次行 A6A0=4067H 。(9)读 BF 及 AC值功能:读忙 BF 和地址计数器 AC 的值。其中:BF=1:忙,BF=0:准备好。此时 A

6、C 值意义为最近一次地址设置 (CGRAM或 DDRAM )定义。(10)写数据功能:根据最近设置的地址性质,数据写入CGRAM 或 DDRAM中。(11)读数据功能:根据最近设置的地址性质,从CGRAM 或 DDRAM数据读出。2.2 IIC 总线IIC 总线是 PHILIPS 公司推出的两线式串行总线。用于连接微控制器及其外围设备。 IIC 总线产生于在 80 年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。 例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态, 如电源和系统风扇。 可随时监控内存、 硬盘、网络、系统温度等多个参数,

7、增加了系统的安全性,方便了管理。2.2.1IIC 总线的特点(1) 只要求两条总线线路 一条串行数据线 SDA 一条串行时钟线 SCL。(2) 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址;主机可以作为主发送器或主机接收器。(3) 它是一个真正的多主机总线,如果两个或更多主机同时初始化数据5传输可以通过冲突检测和仲裁防止数据被破坏。(4) 串行的 8 位双向数据传输位速率在标准模式下可达100kbit/s 快速模式下可达 400kbit/s 高速模式下可达 4Mbit/s 。(5) 片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整。(6) 连接到相同总

8、线的 IC 数量只受到总线的最大电容 400pF 限制。2.2.2IIC 协议总线信号时序( 1)数据的有效性SDA 线上的数据必须在时钟的高电平周期保持稳定数据线的高或低电平状态只有在 SCL 线的时钟信号是低电平时才能改变。如图2.2 IIC 总线的位传输所示。图 2.2IIC 总线的为传输( 2)起始和停止条件在 IIC 总线中 唯一出现的是被定义为起始 (S)和停止 (P )条件(见图 2.3)的情况。其中一种情况是在 SCL 线是高电平时, SDA 线从高电平向低电平切换,这个情况表示起始条件。当 SCL 是高电平时 SDA 线由低电平向高电平切换表示停止条件。起始和停止条件一般由主

9、机产生, 总线在起始条件后被认为处于忙的状态。 在停止条件的某段时间后,总线被认为再次处于空闲状态。如果产生重复起始(Sr)条件而不产生停止条件, 总线会一直处于忙的状态, 此时的起始条件 (S)和重复起始 (Sr)条件在功能上是一样的。因此在本文档的剩余部分,符号 (S)将作为一个通用的术语既表示起始条件又表示重复起始条件,除非有特别声明的 (Sr)。6如果连接到总线的器件合并了必要的接口硬件,那么用它们检测起始和停止条件十分简便。但是,没有这种接口的微控制器在每个时钟周期至少要采样 SDA 线两次来判别有没有发生电平切换。图 2.3 起始和停止条件( 3)总线空闲状态SDA 和 SCL 两

10、条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线各自的上拉电阻把电平拉高。( 4)数据传输与应答信号ACK发送到 SDA 线上的数据必须是 8 位的。每次传输可以发送的数据不受限制。每个字节后必须在时钟的第 9 个脉冲期间释放数据总线( SDA 为高),由接收器发送一个 ACK (把数据总线的电平拉低 )来表示数据成功接收。如图 2.4 IIC 总线响应。图 2.4 IIC 总线响应首先传输的是数据的最高位(MSB )。如果从机要完成一些其他功能后(例如一个内部中断服务程序) 才能接收或发送下一个完整的数据字节,可以使时钟 SCL保持低电平迫使主机进入等待状态。 当从机准备好接收

11、下一个数据字节并释放时钟线SCL 后,数据传输继续。如图2.5 IIC 总线数据传输所示。7图 2.5 IIC 总线数据传输2.2.3IIC 总线器件寻址方式IIC 总线上的器件是共用总线的,因此,主器件在进行数据传输前要选择通信的从器件,即进行总线寻址。 总线上的所有器件都有唯一的地址, 由器件地址和引脚地址两部分构成,共 7 位。引脚地址由 IIC 总线外围器件的地址引脚 (A2 、A1、 A0 )决定的。数据的传输遵循如图2.6 完整的数据传送所示,在起始条件之后,发送一个 7 位的从机地址,紧接着第8 位是数据方向 (R/ W),0-表示发送数据(写), 1-表示接收数据(读)。数据传

12、输一般由主机产生的停止位(P)终止。但是如果主机仍希望在总线上通讯,它可以产生重复起始条件(Sr),和寻址另一个从机,而不是首先产生一个停止条件。在这种传输中,可能有不同的读/写格式结合。如图2.6 IIC 总线完整的数据传输。图 2.6IIC 总线的数据传输2.3 系统电路图系统的电路图如2.7 所示 :8图 2.7系统电路图运行状况如图 2.8 :图 2.9运行状态9第三章软件设计3.1 系统框图本课题的程序设计是在C 语言的基础之上的,可分为两大模块,分别是:(1)IIC 协议; (2)LCD 显示。程序总体框图如图3.1 所示:10图 3.1 总程序框图LCD 显示程序框图如图3.2

13、所示:11图 3.2LCD 显示程序框图3.2 程序清单(一)#include#include#define uint unsigned int#define uchar unsigned charuchar code display_1=good morning;uchar code display_2=miss you;sbit lcden=P34;sbit lcdrs=P35;/sbit lcdrw=P36;uchar num;12uint i=0;void delayms(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write

14、_com(uchar com)lcdrs=0;lcden=0;P0=com;delayms(5);lcden=0;lcden=1;delayms(5);lcden=0;void write_data(uchar date)lcdrs=1;P0=date;delayms(5);lcden=0;lcden=1;delayms(5);lcden=0;void init()lcden=0;13write_com(0x38);write_com(0x0f);write_com(0x06);write_com(0x01);void main()init();/lcdrw=0;write_com(0x80+

15、0x1a);while(display_1i!=0)write_data(display_1i);i+;delayms(5);write_com(0x80+0x5f);for(num=0;num10;num+)write_data(display_2num);delayms(5);for(num=0;num16;num+)write_com(0x18);delayms(100);while(1);(二)14/* * File: main.c* 功能:向 LCD 输出 HelloWorld*/#includeconfig.h#define rs (18)#define rw (19)#defin

16、e en (110)#define busy (17)uint8 txt=HelloWorld;/* 名称: ChkBusy()* 功能:检查总线是否忙*/void ChkBusy()IODIR=0x700;while(1)IOCLR=rs;IOSET=rw;IOSET=en;if(!(IOPIN & busy)break;IOCLR=en;15IODIR=0x7ff;/* 名称: WrOp()* 功能:写函数*/void WrOp(uint8 dat)ChkBusy();IOCLR=rs;/全部清零IOCLR=rw;IOCLR=0xff;/先清零IOSET=dat;/再送数IOSET=en;

17、IOCLR=en;/* 名称: WrDat()* 功能:写数据函数*/void WrDat(uint8 dat)ChkBusy();IOSET=rs;IOCLR=rw;IOCLR=0xff;/先清零IOSET=dat;/再送数16IOSET=en;IOCLR=en;/* 名称: lcd_init()* 功能: lcd 初始化函数*/void lcd_init(void)WrOp(0x38);WrOp(0x06);/光标加 1WrOp(0x0c);/开显示/* 名称: DisText()* 功能:显示文本函数*/void DisText(uint8 addr,uint8 *p)WrOp(addr

18、);while(*p !=0)WrDat(*(p+);/* * 名称: main()* 功能:显示文本17* */intmain(void)lcd_init();IODIR=0x7ff;/设置为输出IOCLR=0x7ff;DisText(0x86,txt);while(1);/*-文件信息-* 文件名: target.c* 描 述: lpc210x(飞利浦的 ARM )目标板特殊的代码, 包括异常处理程序和目标板初始化程序*每个工程应当具有这个文件的拷贝,用户根据程序的需要修改本文件。* 注 意:本文件必须以 ARM (32 位代码)方式编译,否则,必须更改 init.s 和 vector.s

19、 文件*别的 C 代码不必使用 ARM (32 位代码)方式编译* */#define IN_TARGET#include config.h/*函数名称 : IRQ_Exception18* 功能描述 : 中断异常处理程序,用户根据需要自己改变程序*/void _irq IRQ_Exception(void)while(1);/ 这一句替换为自己的代码/* * 函数名称 : FIQ_Exception* 功能描述 : 快速中断异常处理程序,用户根据需要自己改变程序*/void FIQ_Exception(void)while(1);/ 这一句替换为自己的代码/* * 函数名称 : Target

20、Init* 功能描述 : 目标板初始化代码, 在需要的地方调用, 根据需要改变*/void TargetInit(void)/* 添加自己的代码*/19/* * 函数名称 : TargetResetInit* 功能描述 : 调用 main 函数前目标板初始化代码,根据需要改变,不能删除*/void TargetResetInit(void)/* 设置系统各部分时钟*/*PLLCON = 1;#if (Fcclk / 4) / Fpclk) = 1VPBDIV = 0;#endif#if (Fcclk / 4) / Fpclk) = 2VPBDIV = 2;#endif#if (Fcclk /

21、4) / Fpclk) = 4VPBDIV = 1;#endif#if (Fcco / Fcclk) = 2PLLCFG = (Fcclk / Fosc) - 1) | (0 5); #endif#if (Fcco / Fcclk) = 420PLLCFG = (Fcclk / Fosc) - 1) | (1 5); #endif#if (Fcco / Fcclk) = 8PLLCFG = (Fcclk / Fosc) - 1) | (2 5); #endif#if (Fcco / Fcclk) = 16PLLCFG = (Fcclk / Fosc) - 1) | (3 5); #endifP

22、LLFEED = 0xaa;PLLFEED = 0x55;while(PLLSTAT & (1 10) = 0);PLLCON = 3;PLLFEED = 0xaa;PLLFEED = 0x55;*/* 设置存储器加速模块*/MAMCR = 2; /MAMCR 8u2 00 MAM 功能被禁止、 01 MAM 功能部分使能、 10MAM 功能完全使能/* MAMTIM 8u30000保留0011一段时间内只有1 个处理器时钟(cclk)用于 MAM取指。0102一段时间内只有2 个处理器时钟( cclk)用于 MAM 取指。0113一段时间内只有3 个处理器时钟(cclk)用于 MAM取指。1

23、004一段时间内只有4 个处理器时钟 (cclk)用于 MAM取指。1015一段时间内只有5 个处理器时钟(cclk)用于 MAM取指。211106一段时间内只有6 个处理器时钟(cclk)用于 MAM取指。1117一段时间内只有7 个处理器时钟 (cclk)用于 MAM取指。*/#if Fcclk 20000000MAMTIM = 1;#else#if Fcclk 40000000MAMTIM = 2;#elseMAMTIM = 3;#endif#endif/* 初始化 VIC */VICIntEnClr = 0xffffffff;/ 清所有中断使能,即关中断 VICVectAddr = 0

24、;/ 默认向量地址寄存器VICIntSelect = 0;/1:对应的中断请求分配为 FIQ。0:对应的中断请求分配为 IRQ。/* 添加自己的代码*/#include rt_sys.h#include stdio.h#pragma import(_use_no_semihosting_swi)#pragma import(_use_two_region_memory)int _rt_div0(int a)22a = a;return 0;int fputc(int ch,FILE *f)ch = ch;f = f;return 0;int fgetc(FILE *f)f = f;return

25、 0;int _sys_close(FILEHANDLE fh)fh = fh;return 0;int _sys_write(FILEHANDLE fh, const unsigned char * buf,unsigned len, int mode)fh = fh;buf = buf;len =len;23mode = mode;return 0;int _sys_read(FILEHANDLE fh, unsigned char * buf, unsigned len, int mode)fh = fh;buf = buf;len =len;mode = mode;return 0;v

26、oid _ttywrch(int ch)ch = ch;int _sys_istty(FILEHANDLE fh)fh = fh;return 0;int _sys_seek(FILEHANDLE fh, long pos)fh = fh;return 0;int _sys_ensure(FILEHANDLE fh)24fh = fh;return 0;long _sys_flen(FILEHANDLE fh)fh = fh;return 0;int _sys_tmpnam(char * name, int sig, unsigned maxlen)name = name;sig = sig;maxlen = maxlen;return 0;void _sys_exit(int returncode)returncode = returncode;char *_sys_command_string(char * cmd, int len)cmd = cmd;len = len;return 0;/* *25*End Of File* */第四章调试程序的调试是用 Keil 软件和 Proteus 联调的, LCD 两行滚动显示的字符, 第一行为 “hello everyone ”第二行为 miss you ,两行同时向右平移。调试后的效果图如 4.1 所示:

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1