1602液晶的使用以及怎么看时序图

目录

1.1602液晶的原理

2.引脚

3.主要技术参数

4.1602的读写时序(通信最主要的是看懂时序)

5.实例代码

1.液晶的初始化

2.液晶的读状态

3.液晶的写状态(指令)

4.液晶的写数据

5.液晶的显示字符坐标

6.液晶的显示


1.1602液晶的原理

    LCD1602液晶显示器是广泛使用的一种字符型(不能显示汉字液晶显示模块。它是由字符型液晶显示(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。从数字1602可以看出 最多只能显示16*2个字符。并且内部带有80个字节的RAM缓冲区每一行有40个字节地址,但只能显示前16个字节,后面的地址主要为显示移动字幕设置。如下图:

第一行的开始地址为0x00。可显示字符的地址:0x00~0x10。第一行地址40地址:0x00~0x27。

第二行的开始地址为0x40。可显示字符的地址:0x00~0x50。第一行地址40地址:0x00~0x67。

2.引脚

注意:在写代码之前一定查上面引脚对应连接的单片机IO口。

1.VL脚:要接一个可变电阻(调节液晶的亮度)也可以接一个合适的固定电阻。

2.RS脚:数据/指令引脚   0:指令    1:数据

3.RW脚:读写选择端      0:写        1:读

4.E脚:使能信号 (要看是低电平有效还是高电平有效

D0~D7是单独接一个单片机P口的。

3.主要技术参数

注意:让液晶显示的电压是4.5~5.5v   电流是2.mA 但是液晶的背光电流肯定不是2mA。大概20mA左右。

4.1602的读写时序(通信最主要的是看懂时序)

首先看到的上升沿、下降沿都是状态或数据发生了改变。读可以是指令与数据所以RS=0 指令 PS=1 数据。RW=1 最小要经过tsp1ns(纳秒)才准备好E=1有意义就是RS、RW要准备好。当E=0时RW要最小要经过tHD1ns(纳秒)才可以改变状态。上升沿不能大于tRns(纳秒)E的下降沿不大于tFns(纳秒)当E开始变化为1时 要经过tDns数据才可以读到有效数据。如果小于tDns去读可能数据还没有准备好。当E=0时,最小要经过tHD2ns才能去改变数据。E的信号周期最小为tcns。脉冲宽度最小为tPWns。

写时序与读时序差不多自己根据读时序一样分析。

上图可以查看时序参数的值。并且单位是ns。 因为在一般的单片机中执行一行代码可能都有几us(微秒)。对于ns(纳秒)的时序参数可以不用考虑。如果在一些高速的单片机中可能就需要注意考虑时序参数。

5.实例代码

1.液晶的初始化

1602手册上写的非常繁琐。下面的是比较简单的初始化效果也没什么区别。指令数字怎么来的看手册就行了。

void init()
{
  writeSa(0x38);   //设置16*2个字符 5*7的点阵 8位数据接口
  writeSa(0x0c);  //显示器开
  writeSa(0x06);  //指针加一 字符不移动 
  writeSa(0x01);  //清屏
}

2.液晶的读状态

进行读写指令与数据时,要进行读写检测。目的检测忙不忙。当STA7=1 忙不能进行读写指令与数据。STA7=0表示不忙。

void readSta()   //读状态
{
   unsigned char Sa;
   LCD=0xff;  //单片机读状态时,保证自己是高电位
   RS=0;
   RW=1;
   E=1;
   do{ 
      Sa=LCD;
     }while(Sa&0x80);              //拉低七位  判断最高位为0不忙跳出循环 为1忙不跳出循环       
}

3.液晶的写状态(指令)

RS=0、RW=0、D0~D7指令码  E=高脉冲 设置的顺序不能错
void writeSa(unsigned char sa)  //写指令
{
     readSta(); //读写数据或指令都要判断忙不忙
     RS=0;
     RW=0; 
     E=1;
     LCD=sa;
     E=0;
} 

4.液晶的写数据

RS=1、RW=0、D0~D7指令码  E=高脉冲 设置的顺序不能错(读数据很少用)

void writeDate(unsigned char date) //写数据
{
     readSta();   //读写数据或指令都要判断忙不忙
     RS=1;
     RW=0; 
     E=1;
     LCD=date;
     E=0;
}

5.液晶的显示字符坐标

void lcdPos(unsigned char x,unsigned char y)
{
     unsigned char addr=0;
     if(y==0)   //第一行
     {
        addr=0x00+x;   
     }
     else     //第二行
     {
        addr=0x40+x;
     }
     writeSa(addr|0x80);  //设置液晶RAM地址 这一步是需要的很容易忘
}

6.液晶的显示

void lcdshow(unsigned char x,unsigned char y,unsigned char *p) //显示Lcd
{
     lcdPos(x,y);  //设置起始位置
     while((*p)!='\0')
     {
        writeDate(*p);
        p++;
     }
}

  • 0
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值