51单片机驱动1602液晶显示器的小例子

首先附上1602的相关资料:

引脚功能:

1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第7~14脚:D0~D7为8位双向数据端。

第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。

指令表:

指令码

功 能

RS

R/W

D7

D6

D5

D4

D3

D2

D1

D0

清除显示

0

0

0

0

0

0

0

0

0

1

将DDRAM填满"20H",并且设定DDRAM的地址计数器(AC)到"00H"

地址归位

0

0

0

0

0

0

0

0

1

X

设定DDRAM的地址计数器(AC)到"00H",并且将游标移到开头原点位置;这个指令不改变DDRAM 的内容

显示状态开/关

0

0

0

0

0

0

1

D

C

B

[D=1: 整体显示 ON][C=1: 游标ON]

[B=1:游标位置反白允许]

进入点设定

0

0

0

0

0

0

0

1

I/D

S

指定在数据的读取与写入时,设定游标的移动方向及指定显示的移位

游标或显示移位控制

0

0

0

0

0

1

S/C

R/L

X

X

设定游标的移动与显示的移位控制位;这个指令不改变DDRAM 的内容

功能设定

0

0

0

0

1

DL

X

RE

X

X

[DL=0/1:4/8位数据]

[RE=0/1: 基本指令操作 / 扩充指令操作]

设定CGRAM地址

0

0

0

1

AC5

AC4

AC3

AC2

AC1

AC0

设定CGRAM 地址

设定DDRAM地址

0

0

1

0

AC5

AC4

AC3

AC2

AC1

AC0

设定DDRAM 地址(显示位址)

[第一行:80H-A7H]

[第二行:C0H-E7H]

读取忙标志和地址

0

1

BF

AC6

AC5

AC4

AC3

AC2

AC1

AC0

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

写数据到RAM

1

0

数据

将数据D7——D0写入到内部的RAM (DDRAM/CGRAM/IRAM/GRAM)

读出RAM的值

1

1

数据

从内部RAM读取数据D7——D0(DDRAM/CGRAM/IRAM/GRAM)

特性:

3.3V或5V工作电压,对比度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有80字节显示数据存储器DDRAM内建有192个5X7点阵的字型的字符发生器CGROM8个可由用户自定义的5X7的字符发生器CGRAM测试电路原理图:

测试代码:

#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit lcden=P3^2;//使能端sbit lcdrs=P3^0; //数据命令选择端sbit rw=P3^1;uchar code table[]="xian shi 1"; //输入的字符uchar code table1[]="xian shi 2"; //输入的字符uchar num=0;void delay(uint z){uint x,y;for(x=z;x>0;x–)for(y=110;y>0;y–);}void write_com(uchar com)//根据写时序图写出指令程序{lcdrs=0;rw=0;P1=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date)//根据写时序图写出数据程序{lcdrs=1; rw=0;P1=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){lcden=0; //使能端为低电平write_com(0x38);/*显示模式设置 00111000 设置16*2显示 5*7点阵 8位数据接口*/write_com(0x0f);/*显示开关及光标设置 00001DCBD=1,开显示D=0, 关显示C=1,显示光标 C=0,不显示光标B=1,光标闪烁 B=0,,光标不闪烁*/write_com(0x06);//地址指针自动+1且光标+1,写字符屏幕不会移动write_com(0X01);write_com(0X80); }void main(){init();for(num=0;num<10;num++) //输入的字符数量,修改{write_data(table[num]);delay(50);}write_com(0X80+0x40);for(num=0;num<10;num++)//输入的字符数量,修改{write_data(table1[num]);delay(50);}while(1);}测试效果:

使用双手的是劳工,使用双手和头脑的舵手,

51单片机驱动1602液晶显示器的小例子

相关文章:

你感兴趣的文章:

标签云: