LCD1602液晶显示器设计文档格式.docx

上传人:b****2 文档编号:5583120 上传时间:2023-05-05 格式:DOCX 页数:28 大小:1.76MB
下载 相关 举报
LCD1602液晶显示器设计文档格式.docx_第1页
第1页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第2页
第2页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第3页
第3页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第4页
第4页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第5页
第5页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第6页
第6页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第7页
第7页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第8页
第8页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第9页
第9页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第10页
第10页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第11页
第11页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第12页
第12页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第13页
第13页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第14页
第14页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第15页
第15页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第16页
第16页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第17页
第17页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第18页
第18页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第19页
第19页 / 共28页
LCD1602液晶显示器设计文档格式.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

LCD1602液晶显示器设计文档格式.docx

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

LCD1602液晶显示器设计文档格式.docx

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点阵显示。

(7)CGRAM地址设置

设置CGRAM地址,A5~A0=0~3FH。

(8)DDRAM地址设置

设置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数据读出。

IIC总线

IIC总线是PHILIPS公司推出的两线式串行总线。

用于连接微控制器及其外围设备。

IIC总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。

例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。

可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。

2.2.1IIC总线的特点

(1)只要求两条总线线路一条串行数据线SDA一条串行时钟线SCL。

(2)每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址;

主机可以作为主发送器或主机接收器。

(3)它是一个真正的多主机总线,如果两个或更多主机同时初始化数据

传输可以通过冲突检测和仲裁防止数据被破坏。

(4)串行的8位双向数据传输位速率在标准模式下可达100kbit/s快速模式下可达400kbit/s高速模式下可达4Mbit/s。

(5)片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整。

(6)连接到相同总线的IC数量只受到总线的最大电容400pF限制。

2.2.2IIC协议总线信号时序

(1)数据的有效性

SDA线上的数据必须在时钟的高电平周期保持稳定数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变。

如图IIC总线的位传输所示。

图IIC总线的为传输

(2)起始和停止条件

在IIC总线中唯一出现的是被定义为起始(S)和停止(P)条件(见图)的情况。

其中一种情况是在SCL线是高电平时,SDA线从高电平向低电平切换,这个情况表示起始条件。

当SCL是高电平时SDA线由低电平向高电平切换表示停止条件。

起始和停止条件一般由主机产生,总线在起始条件后被认为处于忙的状态。

在停止条件的某段时间后,总线被认为再次处于空闲状态。

如果产生重复起始(Sr)条件而不产生停止条件,总线会一直处于忙的状态,此时的起始条件(S)和重复起始(Sr)条件在功能上是一样的。

因此在本文档的剩余部分,符号(S)将作为一个通用的术语既表示起始条件又表示重复起始条件,除非有特别声明的(Sr)。

如果连接到总线的器件合并了必要的接口硬件,那么用它们检测起始和停止条件十分简便。

但是,没有这种接口的微控制器在每个时钟周期至少要采样SDA线两次来判别有没有发生电平切换。

图起始和停止条件

(3)总线空闲状态

SDA和SCL两条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线各自的上拉电阻把电平拉高。

(4)数据传输与应答信号ACK

发送到SDA线上的数据必须是8位的。

每次传输可以发送的数据不受限制。

每个字节后必须在时钟的第9个脉冲期间释放数据总线(SDA为高),由接收器发送一个ACK(把数据总线的电平拉低)来表示数据成功接收。

如图IIC总线响应。

图总线响应

首先传输的是数据的最高位(MSB)。

如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟SCL保持低电平迫使主机进入等待状态。

当从机准备好接收下一个数据字节并释放时钟线SCL后,数据传输继续。

如图IIC总线数据传输所示。

图总线数据传输

2.2.3IIC总线器件寻址方式

IIC总线上的器件是共用总线的,因此,主器件在进行数据传输前要选择通信的从器件,即进行总线寻址。

总线上的所有器件都有唯一的地址,由器件地址和引脚地址两部分构成,共7位。

引脚地址由IIC总线外围器件的地址引脚(A2、A1、A0)决定的。

数据的传输遵循如图完整的数据传送所示,在起始条件之后,发送一个7位的从机地址,紧接着第8位是数据方向(R/W),0-表示发送数据(写),1-表示接收数据(读)。

数据传输一般由主机产生的停止位(P)终止。

但是如果主机仍希望在总线上通讯,它可以产生重复起始条件(Sr),和寻址另一个从机,而不是首先产生一个停止条件。

在这种传输中,可能有不同的读/写格式结合。

如图IIC总线完整的数据传输。

图IIC总线的数据传输

系统电路图

系统的电路图如所示:

图系统电路图

运行状况如图:

图运行状态

第三章软件设计

系统框图

本课题的程序设计是在C语言的基础之上的,可分为两大模块,分别是:

(1)IIC协议;

(2)LCD显示。

程序总体框图如图所示:

图总程序框图

LCD显示程序框图如图所示:

图显示程序框图

程序清单

(一)

#include<

>

#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>

y--);

}

voidwrite_com(ucharcom)

lcdrs=0;

lcden=0;

P0=com;

delayms(5);

lcden=1;

voidwrite_data(uchardate)

lcdrs=1;

P0=date;

voidinit()

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]);

16;

write_com(0x18);

delayms(100);

}

while

(1);

(二)

/****************************************************************************

*File:

*功能:

向LCD输出HelloWorld

****************************************************************************/

#include"

"

#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)

IOSET=rs;

lcd_init()

lcd初始化函数

voidlcd_init(void)

WrOp(0x38);

WrOp(0x06);

//光标加1

WrOp(0x0c);

//开显示

DisText()

显示文本函数

voidDisText(uint8addr,uint8*p)

WrOp(addr);

while(*p!

)WrDat(*(p++));

main()

显示文本

intmain(void)

{

lcd_init();

//设置为输出

IOCLR=0x7ff;

DisText(0x86,txt);

/**--------------文件信息--------------------------------------------------------------------------------

**文件名:

**描述:

lpc210x(飞利浦的ARM)目标板特殊的代码,包括异常处理程序和目标板初始化程序

**每个工程应当具有这个文件的拷贝,用户根据程序的需要修改本文件。

**注意:

本文件必须以ARM(32位代码)方式编译,否则,必须更改和文件

**别的C代码不必使用ARM(32位代码)方式编译

********************************************************************************************************/

#defineIN_TARGET

/*********************************************************************************************************

**函数名称:

IRQ_Exception

**功能描述:

中断异常处理程序,用户根据需要自己改变程序

**

void__irqIRQ_Exception(void)

//这一句替换为自己的代码

FIQ_Exception

快速中断异常处理程序,用户根据需要自己改变程序

**

voidFIQ_Exception(void)

TargetInit

目标板初始化代码,在需要的地方调用,根据需要改变

voidTargetInit(void)

/*添加自己的代码*/

TargetResetInit

调用main函数前目标板初始化代码,根据需要改变,不能删除

voidTargetResetInit(void)

/*设置系统各部分时钟*/

/*PLLCON=1;

#if((Fcclk/4)/Fpclk)==1

VPBDIV=0;

#endif

#if((Fcclk/4)/Fpclk)==2

VPBDIV=2;

#if((Fcclk/4)/Fpclk)==4

VPBDIV=1;

#if(Fcco/Fcclk)==2

PLLCFG=((Fcclk/Fosc)-1)|(0<

5);

#if(Fcco/Fcclk)==4

PLLCFG=((Fcclk/Fosc)-1)|(1<

#if(Fcco/Fcclk)==8

PLLCFG=((Fcclk/Fosc)-1)|(2<

#if(Fcco/Fcclk)==16

PLLCFG=((Fcclk/Fosc)-1)|(3<

PLLFEED=0xaa;

PLLFEED=0x55;

while((PLLSTAT&

(1<

10))==0);

PLLCON=3;

*/

/*设置存储器加速模块*/

MAMCR=2;

//MAMCR8u200-MAM功能被禁止、01-MAM功能部分使能、10-MAM功能完全使能

/*MAMTIM8u3

000=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<

MAMTIM=1;

#else

MAMTIM=2;

MAMTIM=3;

/*初始化VIC*/

VICIntEnClr=0xffffffff;

//清所有中断使能,即关中断

VICVectAddr=0;

//默认向量地址寄存器

VICIntSelect=0;

//1:

对应的中断请求分配为FIQ。

0:

对应的中断请求分配为IRQ。

#pragmaimport(__use_no_semihosting_swi)

#pragmaimport(__use_two_region_memory)

int__rt_div0(inta)

a=a;

return0

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2