加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2013-04-22 02:10:08)
标签:

顺序

和数

单个

字符串

字节

分类: Proteus仿真类

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图解:

http://s6/mw690/c0834ec4tdae32ceed9d5&690



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有