新浪博客

(AT89C51)LCD1602显示与Proteus仿真(原创)

2013-04-22 02:10阅读:
LCD1602的使用相对比较简单。简单归纳如下:
1、根据LCD1602工作的时序图完成写指令和写数据的子程序;
2、对LCD1602进行初始化,常见的初始化顺序如下:
(1)延时15毫秒
(2)写指令38H
(3)延时5毫秒
(4)写指令38H
(5)延时5毫秒
(6)写指令38H
(7)延时5毫秒
(8)写指令38H
(9)写指令08H
(10)写指令01H
(11)写指令06H
(12)写指令0cH
3、编写显示字符的起始位置地址子程序;
4、编写显示单个字符子程序;
5、编写显示字符串子程序;
6、主函数;
附源程序:
#include<reg52.h>

#define OutPut P0 //输出口
sbit RS=P2^0;
//片选
sbit RW=P2^1; //读写
sbit EN=P2^2; //使能端

void Delay(unsigned char ms) //延时子程序
{
int i,j;
for(i=0;i
{
for(j=0;j<120;j++);
}
}


//写指令和数据子程序
void Write(unsigned char i,unsigned char datas)
{
RS=i;
RW=0;
EN=0;
Delay(1);
EN=1;
OutPut=datas;
Delay(1);
EN=0;
}

void LCD1602Init() //LCD1602初始化
{
Delay(15);
Write(0,0x38);
Delay(5);
Write(0,0x38);
Delay(5);
Write(0,0x38);

Write(0,0x38);
Write(0,0x08);
Write(0,0x01);
Write(0,0x06);
Write(0,0x0c);
}

void DisplayString(unsigned char* s) //显示字符串子程序
{
while(*s>0)
{
Write(1,*s);
s++;
}
}

void SetPostion(unsigned char x,unsigned char y)//设置显示位置
{
if(y==1)
{
x=x+0x40;
}
x=x+0x80;
Write(0,x);
}

void DisplayByte(unsigned char datas) //显示单个字节子程序
{
Write(1,datas);
}

void main() //主函数
{
char code String[]='my name is yue!';
LCD1602Init();
SetPostion(1,1);
DisplayByte('A');
Delay(1);
SetPostion(1,0);
DisplayString(String);
Delay(1);
while(1);
}

附Proteus图解:
(AT89C51)LCD1602显示与Proteus仿真(原创)

我的更多文章

下载客户端阅读体验更佳

APP专享