51单片机lcd1602的简单实用

基础知识准备

lcd1602简介

image-20210508195757588

图片来自b站斌哥单片机

需要关注的有以下几点:

  • RS : 高数据低命令;RS= 1时,lcd1602读写数据,RS=0时,lcd1602读写命令
  • R/W:高读低写;RW=1时,单片机读取lcd1602数据,RW = 0时,单片机向lcd1602写数据
  • E:使能的,当且仅当E=1时读写数据与命令,读写完毕,记得将E置为0
  • D0-D7:为8个I/O口,读写数据与命令使用
显示及地址

image-20210508200449857

图片来自b站斌哥单片机

需要关注的有以下几点:

  • lcd1602共计有两行,每行40个字节
  • 第一行首地址0x80
  • 第二行首地址为0xc0
  • lcd1602只显示每行前16个字节,其余字节要想显示需要向前移动
lcd1602可显示的字符

image-20210508200917016

图片来自b站斌哥单片机

需要关注的有以下几点:

  • lcd1602只显示右边的打印字符
  • lcd1602不显示左边的控制字符
lcd1602指令集
这个很重要,需要掌握

image-20210508201113644

lcd1602时序图

这个了解即可,需要知道:

  • lcd1602读数据时,先准备好E,再读数据

  • lcd1602写数据时,先准备好数据,再将E置为高电平

  • 读时序

image-20210508201235173

  • 写时序

image-20210508201335321

举例

在lcd1602上打印“hello world"

代码

  #include<reg52.h>
  //初始化管脚配置
  sbit RS = P2^0;
  sbit	RW = P2^1;
  sbit E = 	P2^2;
  #define DataPort P0
  void LCD1602_BYCHECK();
  void LCD1602_WRITE_CMD(unsigned char mycmd);
  void LCD1602_WRITE_DATA(unsigned char myData);
  void LCD1602_init();
 void LCD1602_addr(unsigned char row,unsigned char col);
void display_string(char *);
  void main()
  {
  	char *p ="hello world" ;
  	LCD1602_init();
	 //设置数据显示地址,输入行号与列号
 	LCD1602_addr(1,0);
	display_string(p);
  	while(1)
	{
	  
	}
  }

 //设置数据显示地址,输入行号与列号
 void LCD1602_addr(unsigned char row,unsigned char col)
 {
 	unsigned char position = 0;
 	if(row == 1)
	{
		position = 0x80 + col;
	}
	else if(row == 2)
	{
		position = 0xc0 + col;	
	}
	LCD1602_WRITE_CMD(position);//设置数据显示地址

 }

 //lcd1602初始化
  void LCD1602_init()
  {
  	LCD1602_WRITE_CMD(0x01);//清屏
	LCD1602_WRITE_CMD(0x06);//指针自增
	LCD1602_WRITE_CMD(0x0c);//显示开,光标关
	LCD1602_WRITE_CMD(0x38);//8位接口,两行显示
  }


  //lcd1602忙检测,若芯片忙,则等着
  void LCD1602_BYCHECK()
  {
  	unsigned char state = 0;
	DataPort = 0xff;  //释放管理权
  	RS = 0;
	RW = 1;	
	do
	{
	E = 1;	//先准备好E,在读数据
	state = DataPort;
	E = 0;
	}while((state&0x80) == 0x80);//lcd1602忙,等着
  }


 //写数据
  void LCD1602_WRITE_DATA(unsigned char myData)
  {
  	LCD1602_BYCHECK();
  	RS = 1;
	RW = 0;
	E = 0;
	DataPort = myData;//先准备好数据,再将E置位高电平
	E = 1;
	E = 0;
  }


   //写命令
  void LCD1602_WRITE_CMD(unsigned char mycmd)
  {
  	LCD1602_BYCHECK();
  	RS = 0;
	RW = 0;
	E = 0;
	DataPort = mycmd;	
	E = 1;
	E = 0;
  }


//显示字符串
void display_string(char *p)
{
	while(*p)
	{
		LCD1602_WRITE_DATA(*p++);
			
	}
}

运行结果

image-20210508201904669

工程文件下载地址

GitHub下载链接

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值