51单片机基础之LCD1602(待补充)

LCD1602数据手册简图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

读命令—当前状态是否处于“忙”
unsigned char LCD_readbusy() 
{
  unsigned char temp;
  RS = 0;
  RW = 1;
  EN = 0;
  P2 = 0xff;
  /*拉高IO口才不会影响数据线上的数据。
  原因:电路中存在的一个普遍的现象:高电平很容易被低电平拉低,
  而低电平一般不可能被高电平拉高。*/
  EN = 1;
  temp = P2;
  //读取当前LCD1602的状态
  delay(5);
  EN = 0;
  return(temp & 0x80);
  //最高位为1表示禁止读写,为0表示允许读写
}
写数据和写命令,关于延时可以看时序图,一般51单片机是微秒操作
时序图中是纳秒级别,所以某些延时可以相对取消
----------------------tips-------------------
#include<intrins.h>  //其中有nop函数的定义
/*对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当
汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率
算出延时时间,对于12M晶振,延时1uS。*/
_nop_();//函数
void LCD_write_dat(unsigned char dat) //写数据
{
  while(LCD_readbusy());
  RS = 1;
  RW = 0;
  EN = 0;
  P2 = dat;
  EN = 1;
  delay(5);
  EN = 0;
} 
void LCD_write_cmd(unsigned char cmd) //写命令
{
  while(LCD_readbusy());
  RS = 0;
  RW = 0;
  EN = 0;
  P2 = cmd;
  EN = 1;
  delay(5);
  EN = 0;
} 
初始化LCD1602,可以看4指令说明中的初始化设置(再上图中)
常见命令在下图中
void LCD_init()
{
  EN = 0;
  LCD_write_cmd(0x38);
  LCD_write_cmd(0x0c);
  LCD_write_cmd(0x06);
  LCD_write_cmd(0x01);
}

在这里插入图片描述

将display函数作为独立函数再放入main函数中可以让main函数更简明
在学习过程中尽量向行业规范和后续使用进行有利操作。
void display_1()
{
  unsigned char i = 0;
  LCD_write_cmd(0x80);
  delay(5);
  while(str[i] != '\0')
  {
    LCD_write_dat(str[i]);
    /*这附近可以使用指针更加简洁,不过我没整明白,后续来补充
    如果有大佬知晓,愿详闻之*/
    delay(5);
    i++;
  }
}

LCD1602还有很多待补充坑:CGRAM编写,滚动显示等

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值