lcd1602模块介绍及编写使用程序

文章目录

  • 前言
  • 一、Lcd1602模块功能引脚介绍
  • 二、程序编写,时序图分析
  • 1.Lcd1602初始化
  • 2.基本时序程序编写
  • 2.显示hello在液晶屏
  • 最后

  • 前言

    Lcd1602 液晶,从它的名字我们就可以看出它的显示容量,显示2行,每行16个字符的液晶,
    对于单片机的学习最主要还是要学会查看产品数据手册,即使相同的功能模块也会由于不同的生产厂家不同而有所差异,下面结合数据手册对Lcd1602内容进行一个分享


    一、Lcd1602模块功能引脚介绍

    Lcd1602 液晶一共 16 个引脚,每个引脚的功能,都可以在它的数据手册上获得,在进行程序编写之前得弄明白

    1. 引脚1,2,15,16这里就不做介绍了,只需要按照他的数据手册引脚说明对应接入电路就OK
    2. 引脚3液晶显示偏压信号,可以看见液晶显示时是通过增强对比,观察小黑点得到显示的内容。引脚3外部接下拉电阻来确定显示的黑点和不显示的之间的对比度
      (下拉电阻并不一定是个固定阻值,可以是个滑动变阻器,改变3引脚的电压,显示不同的对比度)
    3. 引脚4数据命令选择端,高电平(High)为数据选择端,低电平(Low)为命令选择端
    4. 引脚5读写选择端,高电平(High)读取液晶内部的数据或状态,低电平(Low)写入数据或者命令
    5. 引脚6使能信号,结合时序图会更好的理解使能信号如何使用
    6. 引脚7~14普通I/O口,通过这 8 个引脚读写数据和命令

    二、程序编写,时序图分析

    1.Lcd1602初始化


    代码如下(示例):

    void LcdInit1602()
    {
    	LcdWriteCmd(0x38);        // 16*2显示,5*7点阵,8位数据口
    	LcdWriteCmd(0x08);		  //关闭显示
    	LcdWriteCmd(0x0C);        // 开显示,不显示光标
    	LcdWriteCmd(0x06);        // 地址加1,当写入数据后光标右移
    	LcdWriteCmd(0x01);        // 清屏
    }
    

    2.基本时序程序编写

    读操作时序

    写操作时序

    (1)读状态:RS=L,WR=H,E=H,P0=状态

    bit7busy()主函数部分,do…while()判断是否忙位

        Lcd1602_DB = 0xFF;
        Lcd1602_RS = 0;
        Lcd1602_WR = 1;
        Lcd1602_E = 1;
        sta = Lcd1602_DB; //读取状态字
    
      对控制器每次进行读写操作前,都必须进行读写检测,确保bit7为0,表示不忙可以进行读写,将其封装成函数void bit7busy();
    

    (2)读数据:RS=H,WR=H,E=H ,P0=数据
    (3)写指令:RS=L,WR=L,P0=指令码,E=高脉冲(前三项准备好,使能引脚拉高拉低读取指令码到1602)
    (4)写数据:RS=H,WR=L,P0=数据,E=高脉冲

    void LcdWriteCmd(unsigned char cmd)
    { 
        bit7busy();            //将忙位检测封装成函数
    	Lcd1602_RS = 0;        //选择写指令
    	Lcd1602_WR = 0; 	   //选择写
    	Lcd1602_E = 0;         //E使能拉低
    	P0=cmd;                //把指令送入P0
    	DelayMs(2);            //延时一小会儿,让1602准备接收数据
    	Lcd1602_E = 1;         //使能线电平变化上升沿,命令送入1602的8位数据口
    	DelayMs(2);            //延时,让数据发送
    	Lcd1602_E = 0;	       //使能线拉低
    }
    
    void LcdWriteDat(unsigned char dat)
    {
        bit7busy();
    	Lcd1602_RS = 1;       //选择写数据
    	Lcd1602_WR = 0; 	  //选择写
    	Lcd1602_E = 0;        //E使能拉低
    	P0=dat;
    	DelayMs(2); 
    	Lcd1602_E = 1;	 
    	DelayMs(2); 
    	Lcd1602_E = 0;	 
    }
    

    数据手册里面还有时间上的要求,在51里面不需要额外操作来满足,但在运行速度快点的单片机,可以试着加延时

    2.显示hello在液晶屏

    在这之前先了解一下,1602 液晶内部带了 80 个字节的显示 RAM,用来存储我们发送的数据

    第一行RAM地址从 0x00到 0x27,第二行地址从 0x40 到 0x67,
    其中
    第一行 0x00 到 0x0F与液晶上第一行 16 个字符显示位置相对应的,
    第二行 0x40 到 0x4F 是与第二行 16 个字符显示位置相对应的
    由于是字符显示,与ACSII字符表对应

    void LcdShowStr(unsigned char y,unsigned char x,unsigned char *str,unsigned char len)
    {
    		if(y==1)  // 第一行      
    		LcdWriteCmd(0x80+x); 		// 第一行显示起始地址 0x80第一行第一个字符地址
    	    else  	  // 第二行     
    		LcdWriteCmd(0x80+0x40+x);  // 第二行显示起始地址 0x80+0x40是第二行第一个字符地址
    
    	while(len--)
    	{
    	  LcdWriteDat(*str++);
    	}
    }
    

    显示个hello在液晶上

    LcdShowStr(1,0,"hello",5)
    

    最后

    作为一名学生,这也算是我学习的小记录,如果有不妥的地方欢迎指出

    物联沃分享整理
    物联沃-IOTWORD物联网 » lcd1602模块介绍及编写使用程序

    发表评论