LCD1602液晶显示器设计_第1页
LCD1602液晶显示器设计_第2页
LCD1602液晶显示器设计_第3页
LCD1602液晶显示器设计_第4页
LCD1602液晶显示器设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

./专业资料LCD1602液晶显示课程设计绪论1.1课题背景当今时候是一个信息化的时代,信息的重要性不言而喻的,获取手段显得尤其重要。人们所接受的信息有70%来自于人的视觉,无论用何种方式获取的信息最终需要有某种显示方式来表示。在当代显示技术中,主流的有LED显示屏和LCD液晶显示,而在这些显示技术中,尤其以液晶显示器LCD〔Liquidcrystaldisplay为代表的平板显示器发展最快,应用最广。LCD是典型的发光器件,它一材料科学为基础,综合利用了精密机械,光电及计算机技术,并正在微机械,微光学,纤维光学等前沿领域研究基础上,向高集成化,智能化方向发展。液晶显示技术发展迅猛,市场预测表明,液晶显示平均年销售呈增长10%~13%,不久的将来有可能取代CRT,成为电子信息产品的主要显示器件,另外,液晶显示器对空间电磁辐射的干扰不敏感,且在紧凑的仪器空间不需要专门的屏蔽保护,因而课大大简化仪器的结构和制造成本,在各种便携式仪器,仪表将会越来越广泛的应用。特别是在电池供电的单片机产品中,液晶显示更是必选的显示器件。1.2课题设计目标本设计是基于AT89C51芯片单片机为主控芯片,结合1602液晶显示模板等外围电路,通过软件程序,来实现液晶显示英文字母。本次设计的目的在于利用单片机和IIC技术来显示英文字母。1.3课程设计的主要工作〔1对系统的各个模块的各个功能进行深入分析和研究,在对课题所采用的方案进行可行详细的研究后设计具体功能电路。〔2熟悉所选芯片的功能并完成具体电路设计。〔3对系统的最终指标进行测试,针对系统的不足,进行分析并提出一些改正方法。1.4设计要求〔1运行IIC总线技术。〔2循环显示字母。第二章硬件设计2.1LCD1602简介2.1.1LCD1602引脚如图2.1所示图2.1LCD1602引脚图引脚图的功能如表2—1所示表2—1引脚功能图LCD1602显示模指令集〔1清屏功能:清DDROM值和AC值〔2归位功能:光标复位,光标返回到地址00H〔3输入方式设置功能:设置光标,画面移动方式。其中:I/D=1:数据读写操作后,AC自加一;I/D=0:数据读写操作后,AC自减一;S=1:数据读写操作,画面平移;S=0:数据读写操作,画面不动;〔4显示开关控制功能:设置显示、光标和闪烁开关。其中: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:右移;R/L=0左移。〔6功能设置功能:工作方式设置〔初始化指令。其中:DL=1,8位数据接口;DL=0,4位数据接口;N=1,两行显示;N=0,一行显示;F=1,5*10点阵显示;F=0,5*7点阵显示。〔7CGRAM地址设置功能:设置CGRAM地址,A5~A0=0~3FH。〔8DDRAM地址设置功能:设置DDRAM地址。其中:N=0,一行显示A6~A0=0~4FH;N=1两行显示,首行A6~A0=0~2FH,次行A6~A0=40~67H。〔9读BF及AC值功能:读忙BF和地址计数器AC的值。其中:BF=1:忙,BF=0:准备好。此时AC值意义为最近一次地址设置〔CGRAM或DDRAM定义。〔10写数据功能:根据最近设置的地址性质,数据写入CGRAM或DDRAM中。〔11读数据功能:根据最近设置的地址性质,从CGRAM或DDRAM数据读出。2.2IIC总线IIC总线是PHILIPS公司推出的两线式串行总线。用于连接微控制器及其外围设备。IIC总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。IIC总线的特点<1>只要求两条总线线路一条串行数据线SDA一条串行时钟线SCL。<2>每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址;主机可以作为主发送器或主机接收器。<3>它是一个真正的多主机总线,如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏。<4>串行的8位双向数据传输位速率在标准模式下可达100kbit/s快速模式下可达400kbit/s高速模式下可达4Mbit/s。<5>片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整。<6>连接到相同总线的IC数量只受到总线的最大电容400pF限制。IIC协议总线信号时序〔1数据的有效性SDA线上的数据必须在时钟的高电平周期保持稳定数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变。如图2.2IIC总线的位传输所示。图2.2IIC总线的为传输〔2起始和停止条件在IIC总线中唯一出现的是被定义为起始<S>和停止<P>条件〔见图2.3的情况。其中一种情况是在SCL线是高电平时,SDA线从高电平向低电平切换,这个情况表示起始条件。当SCL是高电平时SDA线由低电平向高电平切换表示停止条件。起始和停止条件一般由主机产生,总线在起始条件后被认为处于忙的状态。在停止条件的某段时间后,总线被认为再次处于空闲状态。如果产生重复起始<Sr>条件而不产生停止条件,总线会一直处于忙的状态,此时的起始条件<S>和重复起始<Sr>条件在功能上是一样的。因此在本文档的剩余部分,符号<S>将作为一个通用的术语既表示起始条件又表示重复起始条件,除非有特别声明的<Sr>。如果连接到总线的器件合并了必要的接口硬件,那么用它们检测起始和停止条件十分简便。但是,没有这种接口的微控制器在每个时钟周期至少要采样SDA线两次来判别有没有发生电平切换。图2.3起始和停止条件〔3总线空闲状态SDA和SCL两条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线各自的上拉电阻把电平拉高。〔4数据传输与应答信号ACK发送到SDA线上的数据必须是8位的。每次传输可以发送的数据不受限制。每个字节后必须在时钟的第9个脉冲期间释放数据总线〔SDA为高,由接收器发送一个ACK<把数据总线的电平拉低>来表示数据成功接收。如图2.4IIC总线响应。图2.4IIC总线响应首先传输的是数据的最高位〔MSB。如果从机要完成一些其他功能后〔例如一个内部中断服务程序才能接收或发送下一个完整的数据字节,可以使时钟SCL保持低电平迫使主机进入等待状态。当从机准备好接收下一个数据字节并释放时钟线SCL后,数据传输继续。如图2.5IIC总线数据传输所示。图2.5IIC总线数据传输IIC总线器件寻址方式IIC总线上的器件是共用总线的,因此,主器件在进行数据传输前要选择通信的从器件,即进行总线寻址。总线上的所有器件都有唯一的地址,由器件地址和引脚地址两部分构成,共7位。引脚地址由IIC总线外围器件的地址引脚〔A2、A1、A0决定的。数据的传输遵循如图2.6完整的数据传送所示,在起始条件之后,发送一个7位的从机地址,紧接着第8位是数据方向〔R/W,0-表示发送数据〔写,1-表示接收数据〔读。数据传输一般由主机产生的停止位〔P终止。但是如果主机仍希望在总线上通讯,它可以产生重复起始条件〔Sr,和寻址另一个从机,而不是首先产生一个停止条件。在这种传输中,可能有不同的读/写格式结合。如图2.6IIC总线完整的数据传输。图2.6IIC总线的数据传输2.3系统电路图系统的电路图如2.7所示:图2.7系统电路图运行状况如图2.8:图2.9运行状态第三章软件设计3.1系统框图本课题的程序设计是在C语言的基础之上的,可分为两大模块,分别是:〔1IIC协议;〔2LCD显示。程序总体框图如图3.1所示:图3.1总程序框图LCD显示程序框图如图3.2所示:图3.2LCD显示程序框图3.2程序清单〔一#include<reg52.h>#include<stdio.h>#defineuintunsignedint#defineucharunsignedchar ucharcodedisplay_1[]={"goodmorning"};ucharcodedisplay_2[]={"missyou"};sbitlcden=P3^4; sbitlcdrs=P3^5;//sbitlcdrw=P3^6;ucharnum;uinti=0; voiddelayms<uintz>{ uintx,y; for<x=z;x>0;x--> for<y=110;y>0;y-->;}voidwrite_com<ucharcom>{ lcdrs=0; lcden=0; P0=com; delayms<5>; lcden=0; lcden=1; delayms<5>; lcden=0;}voidwrite_data<uchardate> { lcdrs=1; P0=date; delayms<5>; lcden=0; lcden=1; delayms<5>; lcden=0;}voidinit<> { lcden=0; write_com<0x38>; write_com<0x0f>; write_com<0x06>; write_com<0x01>;}voidmain<>{ init<>; //lcdrw=0; write_com<0x80+0x1a>; while<display_1[i]!='\0'> { write_data<display_1[i]>; i++; delayms<5>; } write_com<0x80+0x5f>; for<num=0;num<10;num++> { write_data<display_2[num]>; delayms<5>; } for<num=0;num<16;num++> { write_com<0x18>; delayms<100>; } while<1>;}〔二/*****************************************************************************File:main.c*功能:向LCD输出HelloWorld****************************************************************************/#include"config.h"#definers<1<<8>#definerw<1<<9>#defineen<1<<10>#definebusy<1<<7>uint8txt[]={"HelloWorld"};/*****************************************************************************名称:ChkBusy<>*功能:检查总线是否忙****************************************************************************/voidChkBusy<>{ IODIR=0x700; while<1> { IOCLR=rs; IOSET=rw; IOSET=en; if<!<IOPIN&busy>>break; IOCLR=en; } IODIR=0x7ff;}/*****************************************************************************名称:WrOp<>*功能:写函数****************************************************************************/voidWrOp<uint8dat>{ ChkBusy<>; IOCLR=rs; //全部清零 IOCLR=rw; IOCLR=0xff; //先清零 IOSET=dat; //再送数 IOSET=en; IOCLR=en;}/*****************************************************************************名称:WrDat<>*功能:写数据函数****************************************************************************/voidWrDat<uint8dat> { ChkBusy<>; IOSET=rs; IOCLR=rw; IOCLR=0xff; //先清零 IOSET=dat; //再送数 IOSET=en; IOCLR=en;}/*****************************************************************************名称:lcd_init<>*功能:lcd初始化函数****************************************************************************/voidlcd_init<void>{ WrOp<0x38>; WrOp<0x06>; //光标加1 WrOp<0x0c>; //开显示}/*****************************************************************************名称:DisText<>*功能:显示文本函数****************************************************************************/voidDisText<uint8addr,uint8*p>{ WrOp<addr>; while<*p!='\0'>WrDat<*<p++>>;}/*****************************************************************************名称:main<>*功能:显示文本****************************************************************************/intmain<void>{lcd_init<>; IODIR=0x7ff; //设置为输出 IOCLR=0x7ff; DisText<0x86,txt>; while<1>;}/**文件信息**文件名:target.c**描述:lpc210x〔飞利浦的ARM目标板特殊的代码,包括异常处理程序和目标板初始化程序**每个工程应当具有这个文件的拷贝,用户根据程序的需要修改本文件。**注意:本文件必须以ARM〔32位代码方式编译,否则,必须更改init.s和vector.s文件**别的C代码不必使用ARM〔32位代码方式编译********************************************************************************************************/#defineIN_TARGET#include"config.h"/***********************************************************************************************************函数名称:IRQ_Exception**功能描述:中断异常处理程序,用户根据需要自己改变程序**********************************************************************************************************/void__irqIRQ_Exception<void> {while<1>;//这一句替换为自己的代码 }/***********************************************************************************************************函数名称:FIQ_Exception**功能描述:快速中断异常处理程序,用户根据需要自己改变程序**********************************************************************************************************/voidFIQ_Exception<void>{while<1>;//这一句替换为自己的代码}/***********************************************************************************************************函数名称:TargetInit**功能描述:目标板初始化代码,在需要的地方调用,根据需要改变********************************************************************************************************/voidTargetInit<void>{/*添加自己的代码*/}/***********************************************************************************************************函数名称:TargetResetInit**功能描述:调用main函数前目标板初始化代码,根据需要改变,不能删除********************************************************************************************************/voidTargetResetInit<void>{/*设置系统各部分时钟*//*PLLCON=1;#if<<Fcclk/4>/Fpclk>==1VPBDIV=0;#endif#if<<Fcclk/4>/Fpclk>==2VPBDIV=2;#endif#if<<Fcclk/4>/Fpclk>==4VPBDIV=1;#endif#if<Fcco/Fcclk>==2PLLCFG=<<Fcclk/Fosc>-1>|<0<<5>;#endif#if<Fcco/Fcclk>==4PLLCFG=<<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>;#endifPLLFEED=0xaa;PLLFEED=0x55;while<<PLLSTAT&<1<<10>>==0>;PLLCON=3;PLLFEED=0xaa;PLLFEED=0x55;*//*设置存储器加速模块*/MAMCR=2; //MAMCR8u200-MAM功能被禁止、01-MAM功能部分使能、10-MAM功能完全使能/*MAMTIM8u3000=0-保留001=1-一段时间内只有1个处理器时钟〔cclk用于MAM取指。010=2-一段时间内只有2个处理器时钟〔cclk用于MAM取指。011=3-一段时间内只有3个处理器时钟〔cclk用于MAM取指。100=4-一段时间内只有4个处理器时钟〔cclk用于MAM取指。101=5-一段时间内只有5个处理器时钟〔cclk用于MAM取指。110=6-一段时间内只有6个处理器时钟〔cclk用于MAM取指。111=7-一段时间内只有7个处理器时钟〔cclk用于MAM取指。*/#ifFcclk<20000000MAMTIM=1;#else#ifFcclk<40000000MAMTIM=2;#elseMAMTIM=3;#endif#endif/*初始化VIC*/VICIntEnClr=0xffffffff;//清所有中断使能,即关中断VICVectAddr=0;//默认向量地址寄存器VICIntSelect=0;//1:对应的中断请求分配为FIQ。0:对应的中断请求分配为IRQ。/*添加自己的代码*/}#include"rt_sys.h"#include"stdio.h"#pragmaimport<__use_no_semihosting_swi>#pragmaimport<__use_two_region_memory>int__rt_div0<inta>{a=a;return0;}intfputc<intch,FILE*f>{ch=ch;f=f;return0;}intfgetc<FILE*f>{f=f;return0;}int_sys_close<FILEHANDLEfh>{fh=fh;return0;}int_sys_write<FILEHANDLEfh,constunsignedchar*buf,unsignedlen,intmode>{fh=fh;buf=buf;len=len;mode=mode;return0;}int_sys_read<FILEHANDLEfh,unsignedchar*buf,unsignedlen,intmode>{fh=fh;buf=buf;len=len;mode=mode;return0;}void_ttywrch<intch>{ch=ch;}int_sys_istty<FILEHANDLEfh>{fh=fh;return0;}int_sys_seek<FILEHANDLEfh,longpos>{fh=fh;return0;}int_sys_ensure<FILEHANDLEfh>{fh=fh;return0;}long_sys_flen<FILEHANDLEfh>{fh=fh;return0;}int_sys_tmpnam<char*name,intsig,unsignedm

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论