液晶显示与串行通信的应用

来源:互联网 发布:java微信商城源码下载 编辑:程序博客网 时间:2024/04/30 18:24
 

1、液晶引脚功能如下:

编号

符号

引脚说明

编号

符号

引脚说明

1

VSS

电源地

9

D2

Data I/O

2

VDD

电源正极

10

D3

Data I/O

3

VL

液晶显示偏压信号

11

D4

Data I/O

4

RS

数据/命令选择端

12

D5

Data I/O

5

R/W

使能信号

13

D6

Data I/O

6

E

Data I/O

14

D7

Data I/O

7

D0

Data I/O

15

BLA

背光电源正极

8

D1

Data I/O

16

BLK

背光电源负极

2、基本操作时序:

读状态:RS=LRW=HE=H           输出:D0~D7=状态字

写指令:RS=LRW= LD0~D7=指令码,E=高脉冲  输出:无

读数据:RS= HRW=HE=H          输出:D0~D7=数据

写数据:RS= HRW= LD0~D7=数据,E=高脉冲   输出:无

3、显示模式设置:

指令码

功能

0

0

1

1

1

0

0

0

设置1602*2显示,5*7点阵,8位数据口

4、显示开/关机光标设置:

指令码

功能

0

0

0

0

1

D

C

B

D=1 开显示;D=0 关显示;

C=1 显示光标;C=0 不显示光标;

B=1 光标闪烁;B=0 光标不显示

0

0

0

0

0

1

N

S

N=1 当读或写一个字符后地址指针加一,且光标加一

N=0当读或写一个字符后地址指针减一,且光标减一

S=1 当写一个字符,整屏显示左移(N=1

任务二:

1、打开WAVE软件,新建一个文件,输入以下程序:

#include<reg52.h>

#define uchar unsigned char

sbit rs=P3^0;

sbit rw=P3^1;

sbit e=P3^5;

delay(uchar time)

{while(time>0)

 {time--;}

}

void enrw()

{rs=0;

 rw=0;

 e=0;

 delay(250);

 e=1;

}

write_data(uchar c)

{P1=c;

 rs=1;

 rw=0;

 e=0;

 delay(250);

 e=1;

}

init_lcd(void)//初始化

{

P1=0x01;//清屏幕

enrw();

P1=0x38;//数据长度为8,双行显示,5*7字符。

enrw();

P1=0x0c;//打开显示开关

enrw();

P1=0x06;//地址计数递增,显示屏不移动

enrw();

}

write_cmd(uchar m)//写命令,注意与写数据的区别

{ P1=m;

  enrw();

}

position(uchar row,uchar colum)//写位置

{uchar p;

  if(row==1)

    p=0x82+colum-1;

  else

    p=0xC0+colum-1;

    write_cmd(p);

}

display(uchar *s)//写字符串,简单的指针应用

{

for(;*s!='/0';s++)

  write_data(*s);

}

void main()

{unsigned int m,n;

 m=1;

 n=2;

 init_lcd();

 position(m,1);

 display("welcome to here! ");

 position(n,1);

 display("study happy!");

 while(1){;}

}

2、保存并编译程序;

任务三:

1、串口寄存器

89s52的串行口是全双工的UART,可同时接收和发送数据,是使用特殊寄存器内的SBUF寄存器及SCON串行控制寄存器。(1SCON串行控制寄存器

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

 

RI:接收中断标志位。在模式0下,当第8 位结束时,硬件会将其设置为1,在其他模式下载停止位的一半时由硬件设定,此位必须由软件清除;

TI:发送中断标志位。在模式0下,当第八位结束时,硬件会将其设置为1,在其他模式下载停止位的一半时由硬件设定,此位必须由软件清除;

RB8 在模式23时,发送时的第九数据位放入此位,在模式1时,若SM2=0,RB8为接收到的停止位,模式0时,RB8没用;

TB8:在模式23时,发送时的第九数据位由软件控制;

REN由软件设定或清除,以决定是否接收串行数据,1为接收,0为发送;

SM2:当串行口模式为23时,使能多处理器通信的功能,在模式0时,SM2必须为0

SM1:串行口模式选择;

SM0:串行口模式选择;

2PCON电源控制寄存器

SMOD

GF1

GF0

PD

IDL

 

SMOD:双倍波特率。当串行工作于模式123时,如使用TIMER1做波特率发生器,且SMOD=1则波特率为双倍;

GF1GF0:通用标志位;

PD:电源下降位,PD1时进入掉电状态;

IDLIDLE模式位,IDL1时进入空闲工作方式;

3)合法波特率:1103006001200240096001440019200288003840056000128000, 256000

 

任务四:

1、打开WAVE软件,新建一个文件,输入以下程序:#include<reg52.h>

#define uchar unsigned char

char date[3];

main()

{int a,i;

date[0]=0x00;

date[1]=0x10;

 SCON=0x50;        //  工作方式

 TMOD=0x20;

 TH1=0xfd;

 TL1=0xfd;

 PCON=PCON&0x7f;

 TR1=1;

 while(1)

 {date[0]=0x00;

  date[1]=0x10;

  date[2]=0x20;

  while(!RI)

  {P0=date[0]+a%100%10;

   for(i=0;i<100;i++);

   P0=date[1]+a%100/10;

   for(i=0;i<100;i++);

   P0=date[2]+a/100;

   for(i=0;i<100;i++);

  }

  a=SBUF;    //把接收到的数据传给变量a

  RI=0;

 }

}

原创粉丝点击