LCD1602的快速入门

简单的介绍一下LCD1602

每行显示16个字符,一共有两行,每个字符由5*7个点显示。
着重介绍下面几个管脚

管脚名字功能
r/s数据命令选择端,高电平为数据端,低电平为命令端
r/w读写选择端,高电平为读,低电平为写
en使能信号端
D0~D7数据I/O口
VL液晶显示偏压信号,多和10kΩ蓝白电阻配合使用

控制接口的简单说明

长沙太阳人公司的lcd1602
如果你只是把液晶屏当作显示工具,只需执行,写指令和写数据两步(图中的1.2和1.4)
还有的就是为了减低代码的难度,这里就不进行查忙了,在每步操作之后留有一定的延时即可。
下面是写数据的时序图
在这里插入图片描述
依据这个写操作的时序图,再加上控制器说明这两张图片可以得到以下两个自定义函数函数,写时序的时候还要考虑编译的环境和使用的芯片,我使用的是AT89C51,

延时函数

void delay(int z)		//延时1ms
{
	int i,j;
	for(i=0;i<z;i++)
		for(j=0;j<110;j++);
}
void write_com(uchar com) //写指令函数
{
	rs = 0;
	P0 = com;
	delay(5);
	en = 1;  
	delay(5);
	en = 0;
	
}
void write_data(uchar date ) //写数据函数
{
	rs = 1;
	P0 = date;
	delay(5);
	en =1;  
	delay(5);
	en = 0;
}

LCD1602的初始化函数,下图
在这里插入图片描述

void int(void)
{
	rw = 0;
	write_com(ox01);//清屏命令
	write_com(ox38);//lcd模式设置
	write_com(ox0f);//开显示,显示光标,光标闪烁
}

主函数
lcd的RAM地址
在这里插入图片描述
从图片中可以看出地址不是连续的第一行是0x00~0x27,第二行是0x40 ~0x67;

 void main()
    {
    	int i,j,mun;
    	unchar table[20] = "The king of world"
    	init();
    	write_com(0x80);//LCD的第一行的地址,是从这个位置开始写入数据
    	//如果想把数据显示在第二行,write_com(ox80+0x40);
    	mun = strlen(table[20]);
    	for(i=0;i<mun;i++)
    	{
    		write_data(table[i]);
    		delay(5);//延时5ms
    	}
		while(1);
    }

主要这个程序使用到strlen()需要添加头文件

#include<string.h>
#include<reg51.h>

最后给出一个我自己写的两行显示的代码

#include<reg51.h>
#include<string.h>

#define uint unsigned int
#define uchar unsigned char
	
void init(void);
void write_com(uchar com);  //写命令函数
void write_data(uchar date); //写数据函数
void delay(int z);

sbit lcdrs =P2^7;  //液晶屏数据/命令选择端
sbit lcdrw =P2^6;	//液晶屏读写端
sbit lcden =P2^5;	//使能端

void delay(int z)	//延时1ms
{
	int i,j;
	for(i=0;i<z;i++)
		for(j=0;j<110;j++);
}

void write_com(uchar com) //写命令函数,注意里面的参数的类型
{
	lcdrs = 0;
	lcdrw = 0;
	P0 = com;
	delay(5);
	lcden = 1;
	delay(5);
	lcden = 0;
	
}

void write_data(uchar date ) //写数据函数,注意里面的参数的类型
{
	lcdrs = 1;
	lcdrw = 0;
	P0 = date;
	delay(5);
	lcden = 1;
	delay(5);
	lcden = 0;
}

void init(void)
{
	lcden = 0;//默认使能端是低电平
	lcdrw = 0;
	write_com(0x38);//显示模式设置
	write_com(0x0f);// 开显示,显示光标,光标闪烁
	write_com(0x06);//当读或者写一个字符后地址加一,且光标加一
	//write_com(0x07)当读或者写一个字符后地址加一,且光标加一,且写一个字符,整屏显示左移
	write_com(0x80);
}

void main()
{
	int mun1,mun2,i,j;
	uchar table1[20]="Who am I";
	uchar table2[20]="china";
	
	mun1 = strlen(table1);
	mun2 = strlen(table2);
	init();
	for(i=0;i<mun1;i++)
	{
		write_data(table1[i]);
		delay(200);
	}
	
	//重新设置显示指针
	//0x80+0x40 = 0xc0
	write_com(0xc0);//把指针移到第二行去显示,如果没有这句那么china会接在who am i 后面显示,会发生字符被吞的现象
	
	for(j=0;j<mun2;j++)
	{
		write_data(table2[j]);
		delay(200);
	}
	
	while(1);
}
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值