精华内容
下载资源
问答
  • 2019-12-17 21:12:32

    (一)什么是LCD1602

    1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。

    1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

    市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。

    LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。不同厂家生产的LCD1602芯片可能有所不同,但使用方法都是一样的。

    注意:LCD1602仅能显示字母、符号或数字,无法显示汉字。

    (二)字符型液晶显示原理

    点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成。显示屏上64×16个显示单元与显示RAM区的1024字节相对应,每一字节的内容与显示屏上相应位置的亮暗对应。例如显示屏第一行的亮暗由RAM区的000H~00FH的16字节的内容决定,当(000H)=FFH时,屏幕左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,屏幕右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H…,(00EH)=00H,(00FH)=00H时,在屏幕的顶部显示一条由8条亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。

    字符型液晶显示模块是一种专门用于显示字母、数字和符号等的点阵式LCD,常用16×1,16×2,20×2和40×2等的模块。一般的LCD1602字符型液晶显示器的内部控制器大部分为HD44780,能够显示英文字母、阿拉伯数字、日文片假名和一般性符号。

    (三)LCD1602引脚表

    在这里插入图片描述
    引脚功能介绍:
    ·引脚1:VSS为地电源。
    ·引脚2:VDD接5V正电源。
    ·引脚3:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”现象,使用时可以通过一个10kQ的电位器调整其对比度。
    ·引脚4:RS为寄存器选择脚,高电平时选择数据寄存器、低电平时选择指令寄存器。
    ·引脚5:R/W为读/写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或显示地址;当RS为低电平,R/W为高电平时,可以读忙信号;当RS为高电平,R/W为低电平时,可以写入数据。
    ·引脚6:E端为使能端,当E端由高电平跳变为低电平时,液晶模块执行命令。
    ·引脚714:D0D7为8位双向数据线。
    ·引脚15:背光源正极。
    ·引脚16:背光源负极。

    (四)控制器接口时序图

    1:读操作时序图
    在这里插入图片描述
    2:写操作时序图
    在这里插入图片描述
    首先要对寄存器的选择和读、写操作选择进行配置。RS是寄存器选择,RS = 1对数据进行操作;RS = 0对指令进行操作。

    接着对读写操作选择进行配置,RW = 0 写操作。

    打开使能端,输入使能信号 E = 1。

    数据总线,对DB0~DB7赋值,进行数据的传输

    【注】如果先打开使能,再进行其他配置的话,有可能传输的数据不是自己想要的。

    (五)1602的原理图

    在这里插入图片描述
    此部分是谱中科技单片机的1602原理图(大多数老师教学51单片机都是这块板子,如需要原理图请直接找我就好)

    (六)1602的配置代码部分解读

    1:端口的定义

    #define LCD1602_PORT P0  //对数据传输口进行定义
    sbit LCD1602_RS = P2^6;  //命令端口
    sbit LCD1602_RW = P2^5;  //读写端口
    sbit LCD1602_EN = P2^7;  //使能端口
    

    特别注意:端口一定别写错了!!!写错了无法显示。

    2:写指令

    void LCD1602_write_com(unsigned char com)
    {
    	LCD1602_RS = 0;//写入命令
    	LCD1602_PORT = com;
    	LCD1602_delay_ms(1);
    	LCD1602_EN = 1;//使能端口高电平
    	LCD1602_delay_ms(1);
    	LCD1602_EN = 0;
    }
    

    3:写数据

    void LCD1602_write_data(unsigned char dat)
    {
    	LCD1602_RS = 1;
    	LCD1602_PORT = dat;
    	LCD1602_delay_ms(1);	
    	LCD1602_EN = 1;
    	LCD1602_delay_ms(1);
    	LCD1602_EN = 0;
    }
    

    4:初始化

    void Init_LCD1602()
    {
    	LCD1602_EN = 0;
    	LCD1602_RW = 0;			//设置为写状态			    
    	LCD1602_write_com(0x38);//显示模式设定
    	LCD1602_write_com(0x0c);//开关显示,光标有无设置、光标闪烁设置
    	LCD1602_write_com(0x06);//写一个字符后指针加一
    	LCD1602_write_com(0x01);//清屏指令
    	LCD1602_write_com(0x80);//设置数据指针起点
    }
    

    (七)LCD1602代码

    1:lcd1602.c

    #include "LCD1602.h"
    
    //****************************************************
    //MS延时函数(12M晶振下测试)
    //****************************************************
    void LCD1602_delay_ms(unsigned int n)
    {
    	unsigned int  i,j;
    	for(i=0;i<n;i++)
    		for(j=0;j<110;j++);
    }
    
    //****************************************************
    //写指令
    //****************************************************
    void LCD1602_write_com(unsigned char com)
    {
    	LCD1602_RS = 0;
    	LCD1602_PORT = com;
    	LCD1602_delay_ms(1);
    	LCD1602_EN = 1;
    	LCD1602_delay_ms(1);
    	LCD1602_EN = 0;
    }
    
    //****************************************************
    //写数据
    //****************************************************
    void LCD1602_write_data(unsigned char dat)
    {
    	LCD1602_RS = 1;
    	LCD1602_PORT = dat;
    	LCD1602_delay_ms(1);	
    	LCD1602_EN = 1;
    	LCD1602_delay_ms(1);
    	LCD1602_EN = 0;
    }
    
    //****************************************************
    //连续写字符
    //****************************************************
    void LCD1602_write_word(unsigned char *s)
    {
    	while(*s>0)
    	{
    		LCD1602_write_data(*s);
    		s++;
    	}
    }
    
    void Init_LCD1602()
    {
    	LCD1602_EN = 0;
    	LCD1602_RW = 0;						    
    	LCD1602_write_com(0x38);			
    	LCD1602_write_com(0x0c);			
    	LCD1602_write_com(0x06);			
    	LCD1602_write_com(0x01);			
    	LCD1602_write_com(0x80);
    }
    

    2:LCD1602.h

    #ifndef __LCD1602_H__
    #define __LCD1602_H__
    
    
    #include <reg52.h>
    
    //LCD1602 IO设置
    #define LCD1602_PORT P0
    sbit LCD1602_RS = P2^6;
    sbit LCD1602_RW = P2^5;
    sbit LCD1602_EN = P2^7;
    
    //函数或者变量申明
    extern void LCD1602_delay_ms(unsigned int n);
    extern void LCD1602_write_com(unsigned char com);
    extern void LCD1602_write_data(unsigned char dat);
    extern void LCD1602_write_word(unsigned char *s);
    extern void Init_LCD1602();
    
    #endif
    

    如有错误的地方,还请前辈们指出来!感激不尽!

    更多相关内容
  • lcd1602工作原理是什么?

    千次阅读 2021-06-06 18:11:42
    液晶显示器具备显示器件具有体积小、重量轻、功耗低,性价比高等优点,所以LCD日渐成为各种便携式电子产品的理想显示器,1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块,它...

    液晶显示器在控制显示面板中应用非常广泛,英文名是Liquid CrystalDisplay,简称LCD.液晶显示器具备显示器件具有体积小、重量轻、功耗低,性价比高等优点,所以LCD日渐成为各种便携式电子产品的理想显示器,1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块,它有若干个5X7或5X11点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能像12864一样显示图形,但是有时候很想要用图形表示,那么lcd1602提供了8个空间的自定义字符。

    lcd1602主要用来显示数字、字母、图形以及少量自定义字符。由于其显示控制简单,性价比高,广泛用于电子表、冰箱、空调、汽车电子仪表等装置。lcd1602分为带背光和不带背光两种,基控制器大部分为 HD44780,带背光的比不带背光的厚,是否带背光在设计过程中并无差别。

    这里我们主要研究一下如何在lcd1602工作原理及显示自定义字符的编程。

    1,lcd1602工作原理是什么?

    线段的显示

    点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。

    字符的显示

    用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。

    汉字的显示

    汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5……右边为2、4、6……根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节……直到32B显示完就可以LCD上得到一个完整汉字。

    2,lcd1602工作原理-lcd1602的基本参数

    b4d72135b17f83460777288e1b6050c1.png

    显示容量:16×2个字符

    芯片工作电压:4.5—5.5V

    工作电流:2.0mA(5.0V)

    模块最佳工作电压:5.0V

    字符尺寸:2.95×4.35(W×H)mm

    3,lcd1602工作原理-lcd1602与单片机连接电路图

    lcd1602液晶显示模块可以只用D4-D7作为四位数据分两次传送。这样的话,可以节省MCU的I/O口资源。lcd1602可以显示2行16个字符,有8为数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。

    lcd1602液晶显示模块可以和单片机AT89C51直接接口,电路连接简单,如图1所示:

    798d7c4a5b6d2a8b1eee28a22c6572f9.png

    lcd1602和51单片机的连接图

    2a5da3d3507ca79eb41323af6164cdfb.png

    lcd1602和51单片机的连接图

    14cbdef7e5d686ee214a07f30263a2e5.png

    其中图中的JPBG直接接电源,第3引脚的可调电位器的两端一定要连接电源和地。P2.0,P2.1,P2.2分别是RS,R/W和E三个控制位,P0.0-P0.7是8位数据线。三个控制位详见说明,RS=0表示写或读指令,RS=1表示写数据。R/W是读写指令,R/W=1是读,R/W=0是写。E是使能端,要根据时序图去写对应的程序。

    caa9d14b61ada145bd06319ad6d40a5b.png

    lcd1602和AT89S52单片机的连接图

    5a75b9a6664ca316be6bf5a4ca4b805b.png

    此电路中,上拉电阻用4.7K的,液晶的3脚用一个10K可调电阻接地,调节液晶亮度。

    4,lcd1602工作原理-lcd1602引脚图与引脚定义

    lcd1602共16个管脚,但是编程用到的主要管脚不过三个,分别为:RS(数据命令选择端),R/W(读写选择端),E(使能信号);以后编程便主要围绕这三个管脚展开进行初始化,写命令,写数据。

    9a64ed3ac55b3f07b38b115fbe864bab.png

    8a462428332875aa3129f1e097f6f668.png

    1602采用标准的16脚接口,

    第1脚:VSS为电源地

    第2脚:VCC接5V电源正极

    第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

    第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

    第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。

    第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。

    第7~14脚:D0~D7为8位双向数据端。

    第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。

    5,lcd1602工作原理-读写操作指令编程表

    各种液晶厂家均有提供几乎都是同样规格的lcd1602 模块或兼容模块,尽管各厂家的对其各自的产品命名不尽相同;但其最初采用的LCD 控制器采用的是HD44780,在各厂家生产的1602 模块当中,基本上也都采用了与之兼容的控制IC,所以从特性上基本上是一样的;当然,很多厂商提供了不同的字符颜色、背光色之类的显示模块。但是它们的读写操作是一样的。

    lcd1602液晶模块内部的控制器共有11条控制指令,如下表所示。

    a1fdb28ac7b0c0b0be5939be87b0211d.png

    lcd1602液晶模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的。(说明1为高电平,0为低电平)

    指令1:清显示,指令码01H,光标复位到地址00H位置 指令2:光标复位,光标返回到地址00H

    指令3:光标和显示位置设置I/D,光标移动方向,高电平右移,低电平左移,S:屏幕上所有文字是否左移或右移,高电平表示有效,低电平表示无效。

    指令4:显示开关控制。D:控制整体的显示开与关,高电平表示开显示,低电平表示关显示。C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。

    指令5:光标或显示移位 S/C :高电平时显示移动的文字,低电平时移动光标

    指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时为双行显示,F:低电平时显示5X7的点阵字符,高电平时显示5X10的显示字符。

    指令7:字符发生器RAM地址设置。 指令8:DDRAM地址设置。

    指令9:读忙信号和光标地址 BF:忙标志位,高电平表示忙,此时模块不能接收命令或数据,如果为低电平表示不忙。

    小编推荐阅读:

    展开全文
  • LCD1602驱动(51单片机)

    千次阅读 2021-10-04 12:54:06
    LCD1602介绍: 是一个只能显示字母、数字、符号的点阵型液晶模块。一行可以显示16个字符,可以显示两行,所以叫做1602。 图片: 硬件分析: 1602一共有16个引脚,其各个引脚的功能如下所示 根据各个引脚的功能,...

    LCD1602介绍:
    是一个只能显示字母、数字、符号的点阵型液晶模块。一行可以显示16个字符,可以显示两行,所以叫做1602。

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

    硬件分析:

    1602一共有16个引脚,其各个引脚的功能如下所示在这里插入图片描述

    根据各个引脚的功能,需要设置如下电路(主芯片是AT89C52):
    在这里插入图片描述
    其中VO(VL)接的是一个电位器,你也可以接一个适当阻值的电阻连到GND。
    RS-P26
    RW-P25
    E-P27
    DB0~7接到P0~7
    这十个引脚就是与1602通信的线路。

    当硬件连接好后,就需要有配套的软件。

    程序需要2步,缺一不可:
    1、初始化1602,RS=0时发送初始化指令
    2、将你要显示的数据发送给1602,此时RS=1;

    程序发送数据是根据1602的驱动时序图来的,如图:
    在这里插入图片描述
    在控制方面,RS是决定你的发送内容是指令,还是数据,在初始化的时候RS=0,在显示数据的时候RS=1。RW脚为0(低电平),表示我要写数据。

    根据上面的时序图,可以写出发送一个数据的函数,如下

    void LcdWriteCom(uchar com)	  //写入命令
    {
    	LCD1602_E = 0;     //使能
    	LCD1602_RS = 0;	   //选择发送命令
    	LCD1602_RW = 0;	   //选择写入
    	
    	LCD1602_DATAPINS = com;     //放入命令,P0~P7
    	Lcd1602_Delay1ms(1);		//等待数据稳定
    
    	LCD1602_E = 1;	          //写入时序
    	Lcd1602_Delay1ms(5);	  //保持时间
    	LCD1602_E = 0;
    }
    

    LCD1602_DATAPINS定义的是P0端口,作用是根据com的值(8个bit)来给P0~7引脚赋予高低电平,通过高低电平发送给1602。

    简单分析一下E这个引脚,准备发送数据时E=0,然后将数据赋给IO口,此时单片机的数据引脚已经是一个数据了。延时1ms等IO口稳定后,将E置1,告诉1602要读数据,延时5ms等1602读完,此时1602已经将数据存入内存里,最后将E脚置0。

    1602的初始化
    我这边初始化需要5条指令,来设置常用的功能。
    1.功能设置指令
    在这里插入图片描述

    2.显示开关控制指令在这里插入图片描述

    3.模式设置指令在这里插入图片描述

    4.清屏指令在这里插入图片描述

    5.数据指针起点
    我们发给1602数据后,他会保存在SDRAM里。(H是16进制的表示)
    在这里插入图片描述
    所以我们第一行的16个数据就是00H到0FH,共16个。
    第二行的数据从40H到4FH,也是16个。
    要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,例如第二行第一个字符的地址是 40H, 那么是否直接写入 40H 就可以将光标定位
    在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7
    恒定为高电平 1 所以实际写入的数据应该是 01000000B(40H)
    +10000000B(80H)=11000000B(C0H)。
    所以在程序里发送0x80来设置指针起点,0x00+0x80 = 0x80。

    根据以上5条指令,就知道应该怎么初始化了,所以有如下程序:

    void LcdInit()						  //LCD初始化子程序
    {
     	LcdWriteCom(0x38);  //开显示  功能设置指令 
    	LcdWriteCom(0x0c);  //开显示不显示光标  显示开关控制指令 
    	LcdWriteCom(0x06);  //写一个指针加1  模式设置指令 
    	LcdWriteCom(0x01);  //清屏  清屏指令 
    	LcdWriteCom(0x80);  //设置数据指针起点 0x00+0x80 = 0x80
    }
    

    初始化完成后,就开始显示数据了。

    发送显示数据的函数为LcdWriteData(与LcdWriteCom不同之处在于RS脚)

    void LcdWriteData(uchar dat)			//写入数据
    {
    	LCD1602_E = 0;	//使能清零
    	LCD1602_RS = 1;	//选择输入数据
    	LCD1602_RW = 0;	//选择写入
    
    	LCD1602_DATAPINS = dat; //写入数据
    	Lcd1602_Delay1ms(1);
    
    	LCD1602_E = 1;   //写入时序
    	Lcd1602_Delay1ms(5);   //保持时间
    	LCD1602_E = 0;
    }
    

    使用一个for循环发送数据

    	for(i=0;i<16;i++)
    	{
    		LcdWriteData(Disp[i]);	
    	}
    

    注意,你发送的数据必须是字符型的,如’1’, ‘a’ , ‘A’ , ’ ’ ,等。LCD会自动处理。
    独立文件
    lcd.c

    #include "lcd.h"
    
    /*******************************************************************************
    * 函 数 名         : Lcd1602_Delay1ms
    * 函数功能		   : 延时函数,延时1ms
    * 输    入         : c
    * 输    出         : 无
    * 说    名         : 该函数是在12MHZ晶振下,12分频单片机的延时。
    *******************************************************************************/
    
    void Lcd1602_Delay1ms(uint c)   //误差 0us
    {
        uchar a,b;
    	for (; c>0; c--)
    	{
    		 for (b=199;b>0;b--)
    		 {
    		  	for(a=1;a>0;a--);
    		 }      
    	}
        	
    }
    
    /*******************************************************************************
    * 函 数 名         : LcdWriteCom
    * 函数功能		   : 向LCD写入一个字节的命令
    * 输    入         : com
    * 输    出         : 无
    *******************************************************************************/
    #ifndef 	LCD1602_4PINS	 //当没有定义这个LCD1602_4PINS时
    void LcdWriteCom(uchar com)	  //写入命令
    {
    	LCD1602_E = 0;     //使能
    	LCD1602_RS = 0;	   //选择发送命令
    	LCD1602_RW = 0;	   //选择写入
    	
    	LCD1602_DATAPINS = com;     //放入命令
    	Lcd1602_Delay1ms(1);		//等待数据稳定
    
    	LCD1602_E = 1;	          //写入时序
    	Lcd1602_Delay1ms(5);	  //保持时间
    	LCD1602_E = 0;
    }
    #else 
    void LcdWriteCom(uchar com)	  //写入命令
    {
    	LCD1602_E = 0;	 //使能清零
    	LCD1602_RS = 0;	 //选择写入命令
    	LCD1602_RW = 0;	 //选择写入
    
    	LCD1602_DATAPINS = com;	//由于4位的接线是接到P0口的高四位,所以传送高四位不用改
    	Lcd1602_Delay1ms(1);
    
    	LCD1602_E = 1;	 //写入时序
    	Lcd1602_Delay1ms(5);
    	LCD1602_E = 0;
    
    	LCD1602_DATAPINS = com << 4; //发送低四位
    	Lcd1602_Delay1ms(1);
    
    	LCD1602_E = 1;	 //写入时序
    	Lcd1602_Delay1ms(5);
    	LCD1602_E = 0;
    }
    #endif
    /*******************************************************************************
    * 函 数 名         : LcdWriteData
    * 函数功能		   : 向LCD写入一个字节的数据
    * 输    入         : dat
    * 输    出         : 无
    *******************************************************************************/		   
    #ifndef 	LCD1602_4PINS		   
    void LcdWriteData(uchar dat)			//写入数据
    {
    	LCD1602_E = 0;	//使能清零
    	LCD1602_RS = 1;	//选择输入数据
    	LCD1602_RW = 0;	//选择写入
    
    	LCD1602_DATAPINS = dat; //写入数据
    	Lcd1602_Delay1ms(1);
    
    	LCD1602_E = 1;   //写入时序
    	Lcd1602_Delay1ms(5);   //保持时间
    	LCD1602_E = 0;
    }
    #else
    void LcdWriteData(uchar dat)			//写入数据
    {
    	LCD1602_E = 0;	  //使能清零
    	LCD1602_RS = 1;	  //选择写入数据
    	LCD1602_RW = 0;	  //选择写入
    
    	LCD1602_DATAPINS = dat;	//由于4位的接线是接到P0口的高四位,所以传送高四位不用改
    	Lcd1602_Delay1ms(1);
    
    	LCD1602_E = 1;	  //写入时序
    	Lcd1602_Delay1ms(5);
    	LCD1602_E = 0;
    
    	LCD1602_DATAPINS = dat << 4; //写入低四位
    	Lcd1602_Delay1ms(1);
    
    	LCD1602_E = 1;	  //写入时序
    	Lcd1602_Delay1ms(5);
    	LCD1602_E = 0;
    }
    #endif
    /*******************************************************************************
    * 函 数 名       : LcdInit()
    * 函数功能		 : 初始化LCD屏
    * 输    入       : 无
    * 输    出       : 无
    *******************************************************************************/		   
    #ifndef		LCD1602_4PINS
    void LcdInit()						  //LCD初始化子程序
    {
     	LcdWriteCom(0x38);  //开显示  功能设置指令 
    	LcdWriteCom(0x0c);  //开显示不显示光标  显示开关控制指令 
    	LcdWriteCom(0x06);  //写一个指针加1  模式设置指令 
    	LcdWriteCom(0x01);  //清屏  清屏指令 
    	LcdWriteCom(0x80);  //设置数据指针起点
    }
    #else
    void LcdInit()						  //LCD初始化子程序
    {
    	LcdWriteCom(0x32);	 //将8位总线转为4位总线
    	LcdWriteCom(0x28);	 //在四位线下的初始化
    	LcdWriteCom(0x0c);  //开显示不显示光标
    	LcdWriteCom(0x06);  //写一个指针加1
    	LcdWriteCom(0x01);  //清屏
    	LcdWriteCom(0x80);  //设置数据指针起点
    }
    #endif
    

    lcd.h

    #ifndef __LCD_H_
    #define __LCD_H_
    /**********************************
    当使用的是4位数据传输的时候定义,
    使用8位取消这个定义
    **********************************/
    //#define LCD1602_4PINS
    
    /**********************************
    包含头文件
    **********************************/
    #include<reg52.h>
    
    //---重定义关键词---//
    #ifndef uchar
    #define uchar unsigned char
    #endif
    
    #ifndef uint 
    #define uint unsigned int
    #endif
    
    /**********************************
    PIN口定义
    **********************************/
    #define LCD1602_DATAPINS P0
    sbit LCD1602_E=P2^7;
    sbit LCD1602_RW=P2^5;
    sbit LCD1602_RS=P2^6;
    
    /**********************************
    函数声明
    **********************************/
    /*在51单片机12MHZ时钟下的延时函数*/
    void Lcd1602_Delay1ms(uint c);   //误差 0us
    /*LCD1602写入8位命令子函数*/
    void LcdWriteCom(uchar com);
    /*LCD1602写入8位数据子函数*/	
    void LcdWriteData(uchar dat)	;
    /*LCD1602初始化子程序*/		
    void LcdInit();						  
    
    #endif
    

    main.c

    /**************************************************************************************
    *		              LCD1602液晶显示实验												  *
    实现现象:下载程序后插上LCD1602液晶在开发板上,即可显示
    注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。																				  
    ***************************************************************************************/
    
    #include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
    #include "lcd.h"
    
    typedef unsigned int u16;	  //对数据类型进行声明定义
    typedef unsigned char u8;
    
    u8 Disp[]=" Pechin Science ";
    
    /*******************************************************************************
    * 函 数 名         : main
    * 函数功能		   : 主函数
    * 输    入         : 无
    * 输    出         : 无
    *******************************************************************************/
    void main(void)
    {
    	u8 i;
    	LcdInit();
    	for(i=0;i<16;i++)
    	{
    		LcdWriteData(Disp[i]);	
    	}
    	while(1);				
    }
    

    程序来自普中科技

    附上完整工程
    链接:https://pan.baidu.com/s/1q3HKwRNIsdu_qLvXDnGfGA
    提取码:d1lq

    展开全文
  • lcd1602液晶屏在很懂工业产品上都有应用,LCD1602能够能够同时显示32个字符,价格便宜,编程简单而且稳定可靠。lcd1602液晶屏是一种图形点阵显示器,显示原理简单易懂,都是液晶屏内部的液晶材料变化而显示不同的...

    lcd1602液晶屏在很懂工业产品上都有应用,LCD1602能够能够同时显示32个字符,价格便宜,编程简单而且稳定可靠。lcd1602液晶屏是一种图形点阵显示器,显示原理简单易懂,都是液晶屏内部的液晶材料变化而显示不同的字符,因为液晶是具有流动特性的物质,所以只需外加很微小的力量即可使液晶分子运动,以最常见普遍的向列型液晶为例,液晶分子可轻易的借着电场作用使得液晶分子转向,由于液晶的光轴与其分子轴相当一致,故可借此产生光学效果,而当加于液晶的电场移除消失时,液晶将借着其本身的弹性及黏性,液晶分子将十分迅速的回撤消来未加电场前的状态。

    lcd1602液晶屏就是通过电压来改变填充在两块平行板之间的液晶材料内部分子的排列状况,以达到遮光和透光的目的来显示深浅不一,错落有致的图象,而且只要在两块平板间再加上三元色的滤光层,就可实现显示彩色图象。

    86fe7e0a43493ded2842c29d77f2c72f.png

    lcd1602中文资料---LCD1602液晶屏特点

    a. 显示质量高

    由于1602LCD每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,画质高且不会闪烁。

    b. 数字式接口

    1602液晶屏都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。

    c. 体积小、重量轻

    1602液晶模块通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示屏要轻得多。

    d. 功耗低

    相对而言,1602液晶显示屏的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示屏要少得多。

    液晶显示模块LCD1602的内部结构可以分成三部分:一为LCD控制器,二为LCD驱动器,三为LCD显示装备。

    838f2341cd7949a653a355142784e93f.png

    3c4e85458b02fd83b720c972144e1400.png

    lcd1602中文资料---lcd1602接线图

    在了解LCD1602接线图之前,我们先看看LCD1602的引脚定义图。

    1脚:VSS为接地;

    2脚:VDD接5V电源VCC;

    3脚:VO为液晶显示器对比度调整;VO是液晶显示的偏压信号,可接10K的3296精密电位器。或同样阻值的RM065/RM063蓝白可调电阻。

    56bcfe6228bf409b0ffb60d94fb4d765.png

    4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器;

    5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据;

    6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令;

    7~14脚:D0~D7为8位双向数据线;

    15脚:背光电源正极;

    16脚:背光电源负极。

    31b20c8f213edd6e8e244f522677b3ab.png

    6ca442f73283b841606941b51eb6a9d0.png

    LCD1602液晶显示模块可以和单片机AT89C51直接接口接线:

    2a08aa21a8f6812d33b5bd0ced5f3264.png

    也可以按照下图显示的电路图接线即可,需要说明的是在这个电路图中,LCD的第三脚VEE没有接,这个脚是控制屏幕对比度的。可以将电位器的两端分别接VCC和GND,中间端接LCD的第三脚。

    74e6a338d6b4d556e8554305baf80e43.png

    lcd1602中文资料---1602LCD主要技术参数

    显示容量:16×2个字符 ;芯片工作电压:4.5—5.5V ;工作电流:2.0mA(5.0V) ;模块最佳工作电压:5.0V ;字符尺寸:2.95×4.35(W×H)mm。

    LCD1602的基本操作分为四种:

    1. 读状态:输入RS=0,RW=1,E=高脉冲。输出:D0—D7为状态字。

    2. 读数据:输入RS=1,RW=1,E=高脉冲。输出:D0—D7为数据。

    3. 写命令:输入RS=0,RW=0,E=高脉冲。输出:无。

    4. 写数据:输入RS=1,RW=0,E=高脉冲。输出:无。

    时序时间参数表:

    22905984186db27e69322d6b006669dc.png

    4daec82808fcfe83c44312f603290022.png

    lcd1602中文资料----lcd1602与单片机连接图

    LCD1602如何接单片机了?给大家分享一个LCD1602接单片机原理PCB图如下:

    a25f523d14611a13cc59feaa92fdda7b.png

    代码如下:

    #include《reg52.h》 //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

    #include《intrins.h》

    sbit RS = P2^4; //定义端口

    sbit RW = P2^5;

    sbit EN = P2^6;

    #define RS_CLR RS=0

    #define RS_SET RS=1

    #define RW_CLR RW=0

    #define RW_SET RW=1

    #define EN_CLR EN=0

    #define EN_SET EN=1

    #define DataPort P0

    /*------------------------------------------------

    uS延时函数,含有输入参数 unsigned char t,无返回值

    unsigned char 是定义无符号字符变量,其值的范围是

    0~255 这里使用晶振12M,精确延时请使用汇编,大致延时

    长度如下 T=tx2+5 uS

    ------------------------------------------------*/

    void DelayUs2x(unsigned char t)

    {

    while(--t);

    }

    /*------------------------------------------------

    mS延时函数,含有输入参数 unsigned char t,无返回值

    unsigned char 是定义无符号字符变量,其值的范围是

    0~255 这里使用晶振12M,精确延时请使用汇编

    ------------------------------------------------*/

    void DelayMs(unsigned char t)

    {

    while(t--)

    {

    //大致延时1mS

    DelayUs2x(245);

    DelayUs2x(245);

    }

    }

    /*------------------------------------------------

    判忙函数

    ------------------------------------------------*/

    bit LCD_Check_Busy(void)

    {

    DataPort= 0xFF;

    RS_CLR;

    RW_SET;

    EN_CLR;

    _nop_();

    EN_SET;

    return (bit)(DataPort & 0x80);

    }

    /*------------------------------------------------

    写入命令函数

    ------------------------------------------------*/

    void LCD_Write_Com(unsigned char com)

    {

    // while(LCD_Check_Busy()); //忙则等待

    DelayMs(5);

    RS_CLR;

    RW_CLR;

    EN_SET;

    DataPort= com;

    _nop_();

    EN_CLR;

    }

    /*------------------------------------------------

    写入数据函数

    ------------------------------------------------*/

    void LCD_Write_Data(unsigned char Data)

    {

    //while(LCD_Check_Busy()); //忙则等待

    DelayMs(5);

    RS_SET;

    RW_CLR;

    EN_SET;

    DataPort= Data;

    _nop_();

    EN_CLR;

    }

    /*------------------------------------------------

    清屏函数

    ------------------------------------------------*/

    void LCD_Clear(void)

    {

    LCD_Write_Com(0x01);

    DelayMs(5);

    }

    /*------------------------------------------------

    写入字符串函数

    ------------------------------------------------*/

    void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)

    {

    if (y == 0)

    {

    LCD_Write_Com(0x80 + x); //表示第一行

    }

    else

    {

    LCD_Write_Com(0xC0 + x); //表示第二行

    }

    while (*s)

    {

    LCD_Write_Data( *s);

    s ++;

    }

    }

    /*------------------------------------------------

    写入字符函数

    ------------------------------------------------*/

    void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)

    {

    if (y == 0)

    {

    LCD_Write_Com(0x80 + x);

    }

    else

    {

    LCD_Write_Com(0xC0 + x);

    }

    LCD_Write_Data( Data);

    }

    /*------------------------------------------------

    初始化函数

    ------------------------------------------------*/

    void LCD_Init(void)

    {

    LCD_Write_Com(0x38); /*显示模式设置*/

    DelayMs(5);

    LCD_Write_Com(0x38);

    DelayMs(5);

    LCD_Write_Com(0x38);

    DelayMs(5);

    LCD_Write_Com(0x38);

    LCD_Write_Com(0x08); /*显示关闭*/

    LCD_Write_Com(0x01); /*显示清屏*/

    LCD_Write_Com(0x06); /*显示光标移动设置*/

    DelayMs(5);

    LCD_Write_Com(0x0C); /*显示开及光标设置*/

    }

    /*------------------------------------------------

    主函数[上面已经把显示功能封装好了,今后再写其他显示就直接调用]

    ------------------------------------------------*/

    void main(void)

    {

    LCD_Init();

    LCD_Clear();//清屏

    while (1)

    {

    LCD_Write_Char(7,0,‘o’);

    LCD_Write_Char(8,0,‘k’);

    LCD_Write_String(1,1,“www.doflye.net”);

    while(1);

    }

    }

    lcd1602中文资料-----LCD1602的3引脚VO怎么接

    VO为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

    LCD1602的VO引脚必须不能悬空,要连接一个滑动变阻器来调节的,当然LCD1602有多种型号,但是大多数的VO脚只有两种情况:一个是VO脚接18欧的下拉电阻接地,一个是接1k欧的电阻接地,当然,也可以接个滑动变阻器更好。

    247cb0acf3de1d41cccf8dbe704242e7.png

    71e34f0d3ad0cfa9db9e1f30371382d5.png

    一般用上图,具体看看你LCD1602的技术手册说明VO引脚的具体情况

    lcd1602与单片机连接图----实例解读

    下面我们分享以一个实例。LCD1602的型号是16条引脚的HJ1602A;单片机最小系统(扩充了外部RAM 62256),采用STC89C52RC,晶振22.1184MHZ。以5×8点阵,16×2行,8位数据端口。首先在第一行显示“I love MCU!”,第二行显示“LCD1602 Test!”。延时一段时间,清屏。然后在第一行显示自定义字符:摄氏温标标志。第二行显示圆周率(pai)标志。再延时一段时间,清屏。最后在第一行显示“Welcome to my blog!”,显示方式是从屏幕右面移入,左面移出。周而复始。

    e8e3fab6930abad60523ad1316e66c79.png

    //File1

    #ifndef __ZHANGTYPE_H__

    #define __ZHANGTYPE_H__

    #define uint8 unsigned char

    #define uint16 unsigned short int

    #define uint32 unsigned long int

    #define int8 signed char

    #define int16 signed short int

    #define int32 signed long int

    #define uint64 unsigned long long int

    #define int64 signed long long int

    #endif

    //File2

    #ifndef __FUN_H__

    #define __FUN_H__

    #include “ZhangType.h”

    #include

    void Delay(uint16 time);

    #endif

    //File3

    #include “fun.h”

    void Delay(uint16 TIme)

    {

    while(TIme--);

    }

    //File4

    #ifndef __1602_H__

    #define __1602_H__

    #include

    #include “ZhangType.h” //变量类型

    #include “fun.h” //常用函数

    #define SETMODE 0x38 //16*2显示,5*7点阵,8位数据接口

    #define DISOPEN 0x0C //显示开,不显示光标,光标不闪烁

    #define DISMODE 0x06 //读写字符后地址加1,屏显不移动

    #define SETADDR 0x80 //设置数据地址指针初始值

    #define CLEAR 0x01 //清屏,数据指针清零

    #define RET 0x02 //回车,数据指针清零

    #define PORT P2 //I/O口

    sbit RS = P1^0;

    sbit RW = P1^1;

    sbit E = P1^2;

    void Init1602(void); //初始化1602

    void Write1602_Com(uint8 com); //写命令

    void Write1602_Dat(uint8 dat); //写数据

    void CheckBusy(void); //检查忙

    void Write1602_One_Dat(uint8 X,uint8 Y,uint8 dat); //写一个数据

    void Write1602_Str(uint8 addr,uint8 length,uint8 *pbuf); //写一个数据串

    #endif//

    //File5

    #include “1602.h”

    void Write1602_Com(uint8 com)

    {

    E=0;

    RS=0; //命令

    Delay(50); //延时

    RW=0; //写

    Delay(50);

    PORT=com; //端口赋值

    Delay(50);

    E=1; //高脉冲

    Delay(50);

    E=0;

    }

    void Write1602_Dat(uint8 dat)

    {

    E=0;

    RS=1; //数据

    Delay(50); //延时

    RW=0; //写

    Delay(50);

    PORT=dat; //端口赋值

    Delay(50);

    E=1; //高脉冲

    Delay(50);

    E=0;

    }

    void CheckBusy(void)

    {

    uint8 temp;

    RS=0; //命令

    RW=1; //读

    E=0;

    while(1)

    {

    PORT=0xFF; //端口为输入

    E=1; //高脉冲

    temp=PORT;

    E=0;

    if ((temp&0x80)==0) //检查BF位是否为0

    break;

    }

    }

    void Init1602(void)

    {

    Write1602_Com(SETMODE); //模式设置

    Delay(500);

    Write1602_Com(DISOPEN); //显示设置

    Delay(500);

    Write1602_Com(DISMODE); //显示模式

    Delay(500);

    Write1602_Com(CLEAR); //清屏

    Delay(500);

    }

    void Write1602_One_Dat(uint8 x,uint8 y,uint8 dat)

    {

    x&=0x0f;

    y&=0x01;

    if(y)

    x|=0x40;

    x|=0x80;

    Write1602_Com(x);

    Write1602_Dat(dat);

    }

    void Write1602_Str(uint8 addr,uint8 length,uint8 *pbuf)

    {

    uint8 i;

    Write1602_Com(addr);

    for(i=0;i

    {

    Write1602_Dat(pbuf[i]);

    }

    }

    //File6

    *******************************************************

    *名称:主文件(_main.c)

    *功能:测试

    *日期:2014/09/09

    *******************************************************/

    #include “1602.h”

    #include “fun.h”

    uint8 code hot[8]={ //摄氏温度字模

    0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00

    };

    uint8 code pi[8]={

    0x00,0x1f,0x0a,0x0a,0x0a,0x13,0x00,0x00 //pai

    };

    uint8 code strMCU[]=“I love MCU!”;

    uint8 code strTest[]=“LCD1602 Test!”;

    uint8 code blog[]=“Welcome to my blog!”;

    uint8 i;

    void main()

    {

    Init1602(); //初始化1602

    //自定义CGRAM

    Write1602_Str(0x40,8,hot); //摄氏温标

    Write1602_Str(0x48,8,pi); //pai

    Write1602_Str(0x80,strlen(strMCU),strMCU); //“I love MCU!”

    Write1602_Str(0x80+0x40,strlen(strTest),strTest); //“LCD1602 Test!”

    for(i=0;i《50;i++) //延时一段时间

    Delay(10000);

    Write1602_Com(CLEAR); //指令执行时间较长

    Delay(500); //多加一些延时

    for(i=0;i《16;i++)

    Write1602_Dat(0);

    Write1602_Com(0xc0); //设置DDRAM地址

    for(i=0;i《16;i++)

    Write1602_Dat(1);

    for(i=0;i《50;i++) //延时一段时间

    Delay(10000);

    Write1602_Com(CLEAR); //指令执行时间较长

    Delay(500); //多加一些延时

    Write1602_Str(0x80+0x10,strlen(blog),blog); //写在显示之外

    while(1)

    {

    Write1602_Com(0x18); //左移

    for(i=0;i《20;i++) //延时

    Delay(10000);

    }

    }

    //####### THE END ######

    lcd1602与单片机连接图----LCD1602与8051单片机接线图

    下图是LCD1602与8051单片机的接口图,图中LCD1602的数据线与8051的P2口相连,RS与8051的P1.7相连,R/W与8051的P1.6相连,E端与8051的P1.5相连。编程在LCD显示器的第1行、第1列开始显示“HOW”,第2行、第5列开始显示“ARE YOU!”。

    8ffdb97c1aab8b502a494f0aa5e26d27.png

    LCD1602与8051单片机接线图

    汇编语言程序:

    RS BIT P1.7

    RW BIT P1.6 E BIT P1.5 ORG 00H AJMP START

    ORG 50H ;主程序

    START: MOV SP,#50H ACALL INIT

    MOV A,#10000000B ;写入显示缓冲区起始地址为第1行第1列 ACALL WC51R

    MOV A,#‘H’ ;第1行第1列显示字母‘H’ ACALL WC51DDR MOV A,#‘O’ ;第1行第2列显示字母“O” ACALL WC51DDR MOV A,#‘W’ ;第1行第3列显示字母‘W’

    ACALL WC51DDR

    MOV A,#11000100B ;写入显示缓冲区起始地址为第2行第5列 ACALL WC51R

    MOV A,#‘A’ ;第2行第5列显示字母‘A’ ACALL WC51DDR MOV A,#‘R’ ;第2行第6列显示字母‘R’ ACALL WC51DDR MOV A,#‘E’ ;第2行第7列显示字母‘E’ ACALL WC51DDR MOV A,#‘ ’ ;第2行第8列显示字母‘ ’ ACALL WC51DDR MOV A,#‘Y’

    ;第2行第9列显示字母‘Y’

    ACALL WC51DDR

    MOV A,#‘O’ ;第2行第10列显示字母‘O’ ACALL WC51DDR MOV A,#‘U’ ;第2行第11列显示字母‘U’ ACALL WC51DDR MOV A,#‘!’

    ;第2行第12列显示字母‘!’

    ACALL WC51DDR LOOP: AJMP LOOP ;初始化子程序

    INIT: MOV A,#00000001H ;清屏

    ACALL WC51R MOV A,#00111000B ;使用8位数据,显示两行,使用5×7的字型 LCALL WC51R MOV A,#00001100B ;显示器开,光标关,字符不闪烁 LCALL WC51R MOV A,#00000110B

    ;字符不动,光标自动右移一格

    LCALL WC51R RET ;检查忙子程序 F_BUSY:PUSH ACC ;保护现场

    MOV P2,#0FFH CLR RS SETB RW WAIT: CLR E SETB E JB P2.7,WAIT

    ;忙,等待

    POP ACC ;不忙,恢复现场

    RET ;写入命令子程序 WC51R: ACALL F_BUSY CLR E CLR RS CLR RW SETB E MOV P2,ACC CLR E RET ;写入数据子程序 WC51DDR:ACALL F_BUSY CLR E SETB RS CLR RW SETB E MOV P2,ACC CLR E RET END

    C语言编程:

    #include 《reg51.h》

    #define uchar unsigned char sbit RS=P1^7; sbit RW=P1^6; sbit E=P1^5;

    void init(void);

    void wc51r(uchar i); void wc51ddr(uchar i); void fbusy(void);

    //主函数

    void main() {

    SP=0x50; init();

    wc51r(0x80); //写入显示缓冲区起始地址为第1行第1列 wc51ddr(’H’); //第1行第1列显示字母’H’ wc51ddr(’O’); //第1行第2列显示字母’O’ wc51ddr (’W’); //第1行第3列显示字母’W’

    wc51r(0xc4); //写入显示缓冲区起始地址为第2行第5列 wc51ddr(’A’); //第2行第5列显示字母’A’ wc51ddr(’R’); //第2行第6列显示字母’R’ wc51ddr(’E’); //第2行第7列显示字母’E’ wc51ddr(’ ’); //第2行第8列显示字母’ ’ wc51ddr(’Y’); //第2行第9列显示字母’Y’ wc51ddr(’O’); //第2行第10列显示字母’O’ wc51ddr(’U’); //第2行第11列显示字母’U’ wc51ddr(’!’); //第2行第11列显示字母’!’ while(1); }

    //初始化函数 void init() {

    wc51r(0x01); //清屏

    wc51r(0x38); //使用8位数据,显示两行,使用5×7的字型 wc51r(0x0c); //显示器开,光标关,字符不闪烁 wc51r(0x06); //字符不动,光标自动右移一格 }

    //检查忙函数 void fbusy() {

    P2=0Xff;RS=0;RW=1; E=0; E=1;

    while (P2&0x80){E=0;E=1;} //忙,等待 }

    //写命令函数

    void wc51r(uchar j) {

    fbusy();

    E=0;RS=0;RW=0; E=1; P2=j; E=0; }

    //写数据函数

    void wc51ddr(uchar j) {

    fbusy();

    E=0;RS=1;RW=0; E=1; P2=j; E=0; }

    小编推荐阅读:

    展开全文
  • 【嵌入式模块】LCD1602&LCD12864

    千次阅读 2022-02-03 19:48:36
      作为最为常见的显示模块LCD1602LCD12864常常会被用来调试,也曾遇到用LCD作为显示器显示传感器测量结果的小项目,这篇博客简单总结一下LCD的使用。 一个小问题 如何判断自己拿的是不是带字库的LCD? 找到型号...
  • 51单片机-LCD1602

    2022-05-27 20:13:53
    程序设计 LCD1602.c文件 #include //*引脚定义 sbit LCD_RS=P2^6; sbit LCD_RW=P2^5; sbit LCD_E=P2^7; #define LCD_DataPort P0 //宏定义,直接将数据接口替换成P0接口 //*延时函数 void LCD_Delay() { unsigned ...
  • 关于LCD1602液显的使用细则

    千次阅读 2020-08-14 10:15:03
    关于LCD1602的详细介绍与基于51的使用实例介绍
  • arduino驱动lcd1602

    千次阅读 2020-10-04 21:22:17
    arduino直接驱动1602液晶显示字母1602液晶在应用中非常广泛,最初的1602液晶使用的是HD44780控制器,现在各个厂家的1602模块基本上都是采用了与之兼容的IC,所以特性上基本都1602LCD主要技术参数 arduino直接驱动...
  • 基础知识: lcd1602显示屏可以显示两行,一行可以显示16个字符 显示原理:(简单了解) 一般的液晶显示器(Liquid Crystal Display, LCD) 的主要原理是以电流刺激液晶分子产生点、线、面并配合背部灯管构成画面。...
  • LCD1602液晶显示屏的字符显示

    千次阅读 2022-04-26 18:55:12
    #include "lcd1602.h" #include "delay.h" void main(void) { lcd1602_init(); //LCD初始化 while(1) { lcd1602_char(1,3,'f'); lcd1602_string(2,1,"dshal"); } } LCD1602子程序: .
  • LCD1602_3.3V

    千次阅读 2021-03-28 07:21:21
    模块:LCD1602_3.3V 主控: STM32F4xxxx 目录 一、LCD1602 使用的模块供电电压是3.3V的!! 接口说明:​ 二、时序说明 一、LCD1602 使用的是某宝LCD1602A模块 简述: 1602A QAPASS字符型液晶显示模块是专门...
  • 0基础掌握—— LCD1602液晶显示一、 LCD1602 简介实物图:Proteus器件图:简介:引脚介绍:指令集(11条指令):二、显示原理字模库:三、显示位置四、LCD1602 操作①写操作时序图:②读操作时序图:③时序时间参数...
  • LCD1602的使用及显示

    千次阅读 2022-03-30 19:12:44
    LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 16×02 即 32 字符(16列两行) 引脚说明 第 1 脚: VSS 为电源地 第 2 脚: VDD 接 5V 正电源 第 3 脚: VL 为液晶显示器对比度调整端,接正电源...
  • 基于51单片机的LCD1602显示温湿度

    千次阅读 2021-08-06 23:21:56
    51单片机基础难点知识理解后,直接通过下面3个小项目可以更好理解51单片机。中断 定时器 串口甚至是基础的IO输入输出都有结合,再加上一些外设...项目二:LCD1602显示器显示内容 项目三:循迹+蓝牙小车 LCD1602显示屏 ...
  • LCD1602单片机(STC51/STM32)驱动程序详解

    千次阅读 2020-10-17 11:22:43
    LCD1602单片机(STC51/STM32)驱动程序详解 作者:hackett 微信公众号:加班猿 一、LCD1602简介 LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其...
  • 超声波测距在LCD1602上显示

    千次阅读 热门讨论 2021-11-25 09:26:46
    基于51单片机的超声波测距在lcd1602上显示
  • (单片机/FPGA)LCD1602基础理论

    千次阅读 2021-07-28 18:38:09
    一般来说,LCD1602显示屏共有16个引脚,各个厂家的LCD1602可能略有不同,但基本上一样,其16个引脚具体如下所示: LCD1602引脚 引脚号 引脚名 电压等级 功能 1 VSS 0V 电源地 2 VDD +...
  • MSP430F5529与LCD1602显示模块(上)

    千次阅读 多人点赞 2019-08-20 18:45:31
    源代码正在整理中,等MSP430F5529与LCD1602显示模块(下)发布后再一起上传至Github,敬请期待。 LCD1602介绍 外观 主要技术参数 **显示容量:**16X2个字符 **芯片工作电压:**4.5~5.5V 工作电流: 2.0mA...
  • LCD1602汇编代码

    千次阅读 2020-04-21 17:50:55
    $INCLUDE(LCD1602.INC) ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV SP, #60H LCALL LCD_INIT MOV 30H, #'A' LCALL LCD_W_DATA MOV 30H, #'B' LCALL LCD_W_DATA SJMP $ END LCD1602.asm ;程序名...
  • //定义LED端口 bit OVERFLOWFLAG; bit TIMERFLAG; /*------------------------------------------------ 定时器0初始化子程序 本程序用于计数 ------------------------------------------------*/ void Init...
  • 单片机:LCD1602 的应用实验

    千次阅读 2020-10-24 12:54:05
    (一)熟悉 LCD1602 与单片机的电路连接; (二)熟悉 LCD1602 的引脚功能; (三)掌握 LCD1602 的时序; (四)掌握单片机对 LCD1602 的控制方法。 二、主要仪器设备及耗材: (一)电脑一台; (二)单片机开发板...
  • LCD1602液晶显示屏驱动文件

    千次阅读 2020-11-20 22:47:53
    1、LCD1602.h文件,进行管脚定义和函数声明 #ifndef _LCD1602_H_ #define _LCD1602_H_ #include <reg52.h> /* 定义单片机的管脚 */ #define LCD1602_DATAPINS P0 //P0口用来发送数据,一整个字节地发送 ...
  • LCD1602(以51单片机为例)

    千次阅读 2020-04-06 18:32:26
    LCD1602是我们常用的一种显示屏,一直想写一些关于元器件的介绍和使用。今天就来从LCD1602开始。
  • 51单片机驱动外设lcd1602

    千次阅读 2020-03-27 23:23:55
    总结51单片机外接lcd1602的驱动程序,51单片机时钟电路采用12MHz晶振,P0端口外接上拉电阻与lcd1602数据口D0-D7相连,P2.7与lcd1602使能E端相连,P2.6与lcd1602读/写选择R/W端相连,P2.5与lcd1602数据/命令选择RS端...
  • LCD1602液晶屏动态显示静态显示移动显示滚动显示C51单片机KEIL工程源码文件 #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include sbit RS = P2^4; //定义端口 sbit RW ...
  • //LCD1602与单片机接口定义 sfr LCD_IO = 0x80; //P0-0x80,P1-0x90,P2-0xA0,P3-0xB0; sbit LCD_RS = P2^0; //LCD数据/命令选择端(H/L) sbit LCD_RW = P2^1; //LCD 读/写 选择端(H/L) sbit LCD_EN = P2^2; //LCD使能...
  • 51单片机之 LCD1602液晶显示屏

    千次阅读 2020-05-23 22:39:52
    一、LCD1602的使用 从上图可知,不是所有的地址都可以直接用来显示字符数据,只有第一行中的 00-0F,第二行中的 40-4F 才能显示,其他地址只能用于存储。 从上图可以看到,以上给的时间参数全部是 ns 级别的,而 ...
  • 1.先定义端口,因为整个P0端口都是要传输的数据,这里用宏定义标识一下 2.LCD1602写指令,按照时序结构编写 3.LCD1602写数据,将字符显示在屏幕上 4.LCD1602初始化,在main函数中使用LCD时要先调用初始化函数 5.检测...
  • LCD1602显示屏介绍 引脚介绍 内部结构框图 存储器 DDRAM储存器地址 CGRAM与CGROM的地址 时序介绍 LCD1602快捷指令 LCD1602指令操作流程: 字符、字符串的显示 各种进制的数字显示 在LCD1602上显示十进制...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,117
精华内容 4,446
热门标签
关键字:

lcd1602端口定义