精华内容
下载资源
问答
  • LCD1602的引脚定义

    千次阅读 2010-07-25 13:52:00
    lcd1602的引脚定义

    1602采用标准的16脚接口,其中:

    第1脚:VSS为地电源
    第2脚:VDD接5V正电源
    第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度
    第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
    第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
    第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

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

    第15~16脚:空脚

           1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”
    展开全文
  • 基于avr的lcd1602驱动

    2019-09-30 12:36:38
    电路图如下 下面是lcd1602.c文件内容: #include <avr/io.h> #include <...//定义LCD1602对应的端口,方便后面使用。 #define LCD1602_CTL_DDR DDRB #define LCD1602_CTL_PORT PO...

    电路图如下

     

    下面是lcd1602.c文件内容:

    #include <avr/io.h>
    #include <util/delay.h>
    
    #define INT8U unsigned char
    
    //定义LCD1602对应的端口,方便后面使用。
    #define LCD1602_CTL_DDR		DDRB
    #define LCD1602_CTL_PORT	PORTB
    #define LCD1602_PIN		PINC
    #define LCD1602_DDR		DDRC
    #define LCD1602_PORT		PORTC
    
    #define	RS_1()	LCD1602_CTL_PORT |= _BV(PB0)
    #define RS_0()	LCD1602_CTL_PORT &= ~_BV(PB0)
    #define RW_1()	LCD1602_CTL_PORT |= _BV(PB1)
    #define RW_0()	LCD1602_CTL_PORT &= ~_BV(PB1)
    #define E_1()	LCD1602_CTL_PORT |= _BV(PB2)
    #define E_0()	LCD1602_CTL_PORT &= ~_BV(PB2)
    
    //avr忙检测
    void	Busy_Check()
    {
    	LCD1602_DDR = 0x00;    //把端口设置为输入
    	RS_0();	RW_1();
    	E_1();	_delay_us(20);
    	while((LCD1602_PIN & 0X80) == 1);  //最高位为1表示忙;
    	E_0();
    	LCD1602_CTL_DDR = 0XFF;    //把端口设置回输出状态
    }
    
    //写一个命令到lcd1602
    void	Write_Command(INT8U CMD)
    {
    	Busy_Check();    
    	RS_0();	RW_0();
    	LCD1602_PORT = CMD;
    	E_1();	E_0();
    }
    
    //写一个字节到lcd1602
    void  Write_Data(INT8U DAT)
    {	
    	Busy_Check();
    	RS_1();	RW_0();
    	LCD1602_PORT = DAT;
    	E_1();	E_0();
    }
    
    //在x位,y行,写入字符串str;
    void  Display_String(INT8U x,INT8U y,char *Str)
    {
    	INT8U len,i;
    	if (y ==0)
    	{
    		Write_Command(0x80 | x);
    	}else if (y == 1)
    	{
    		Write_Command(0xC0 | x);
    	}
    	for (i=0; i<16 && Str[i] != '\0'; i++)
    	{
    		Write_Data(Str[i]);
    	}
    		
    }
    
    
    //初始化lcd1602,在main.c中直接调用该函数就可以初始化lcd1602;
    void	Init_LCD1602()
    {
    	LCD1602_DDR = 0XFF;	 LCD1602_PORT = 0X00;
    	LCD1602_CTL_DDR |= 0X0F;	LCD1602_CTL_PORT = 0X00;
    	
    	Write_Command(0x38);    
    	_delay_ms(15);
    	Write_Command(0x01);
    	_delay_ms(15);
    	Write_Command(0x06);
    	_delay_ms(15);
    	Write_Command(0x0c);
    	_delay_ms(15);
    }
    

    下面是lcd1602.h的定义:

    
    #ifndef LCD1602_H_
    #define LCD1602_H_
    
    #define  F_CPU 4000000UL
    #define INT8U unsigned char
    
    extern void	Busy_Check();//忙检测
    extern	void	Write_Command(INT8U Command);//写指令
    extern	void  Write_Data(INT8U DATA);//写数据
    extern	void  Display_String(INT8U x,INT8U y,char *Str);//从y行x位开始按序写Str字符串
    extern	void	Init_LCD1602();//初始化LCD1602
    
    
    
    #endif

     

    下面是main.c的内容,简单测试一下,功能是否实现

    #include "lcd1602.h"
    
    int main(void)
    {
    	Init_LCD1602();
    	Display_String(0,0,"POWER: 32.25 dBm");
    	Display_String(0,1," OR    1.007 W");
        while(1);
    }


        

     

    展开全文
  • LCD1602快速上手

    2019-01-19 16:23:41
    LCD(Liquid Crystal Display),LCD1602模块,其中16表示每一行可以显示”16”个字符,”02”表示一共有两行。字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的两条线是背光电源线VCC和地线GND,控制原理与14...

    ①介绍

    LCD(Liquid Crystal Display),LCD1602模块,其中16表示每一行可以显示”16”个字符,”02”表示一共有两行。字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的两条线是背光电源线VCC和地线GND,控制原理与14脚的LCD完全一样。

    字符LCD的引脚定义如下图1所示。

                                         图1 字符型LCD引脚定义表

    使用LCD1602显示模块实现显示的主要思路就是,首先确定显示的位置(在LCD显示屏上有32个空格),然后是确定要显示的内容或字符。LCD的DB0~7为输入输出的接口,在确定显示位置和内容时要通过这些端口传输数据。

    在确定显示位置时,由于只有32个空格,不需要用一个字节来确定。所以最高位(bit7)固定为1。剩下的七位的数据与确定的显示位置的关系如下图2所示。

                                    图2 DDRAM地址与显示位置的对应关系

    在确定了显示位置后,要确定的是显示内容。同样用到的是一个字节的数据来确定要显示的字符。数据与显示字符的对应关系如下图3所示。

                              图3 CGROM中字符码与字字符字模关系对照表

    ②指令功能

    LCD1602模块共有11条指令,包括:清屏指令、光标归位指令、进入模式设置指令、显示开关控制指令、设定显示屏或光标移动方向指令、功能设定指令、设定CGRAM指令、设定DDRAM地址指令、读取忙信号或AC地址指令、数据写入DDRAM或CGRAM指令、从CGRAM或DDRAM读出数据指令。

    有图1中对于RS引脚的作用描述可以看出,当RS=0时,LCD收到的数据作为指令;当RS=1,LCD收到的数据作为数据。要注意的是,在输入指令或是数据后,要使E接收到一个下降沿后才会生效。

    ③函数

    在此次实验过程中用到的有关LCD的函数,主要是光标位置的改变、显示字符。

    1. 光标位置函数
    void lcdwrc4bit(long c)		  //读取八位数据改变光标位置
    {	
    	while(readbusy());
    	GPIO_ResetBits(GPIOB,rs);		//将rs置为零,表示后边输入指令
    	GPIO_ResetBits(GPIOB,rw);
    	GPIO_ResetBits(GPIOB,e);
    	delayms(1);
    	GPIOB->BSRR = c<<8 & 0xf000;  //将数据送到P0口
        GPIOB->BRR = ((~c)<<8) & 0xf000;
    	delayms(1);
    	GPIO_SetBits(GPIOB,e);
    	delayms(1);
    	GPIO_ResetBits(GPIOB,e);//执行指令
    	delayms(1);
    
    	GPIOB->BSRR = c<<12 & 0xf000;  //将数据送到P0口
        GPIOB->BRR = ((~c)<<12) & 0xf000;
    	delayms(1);
    	GPIO_SetBits(GPIOB,e);
    	delayms(1);
    	GPIO_ResetBits(GPIOB,e);//执行指令
    	delayms(1);
    }

     

    (b)显示字符函数

    void lcdwrd(long dat)			//读八位数据通过4个引脚
    {
    	while(readbusy());		
    	GPIO_SetBits(GPIOB,rs);		
    	GPIO_ResetBits(GPIOB,rw);
    	GPIO_ResetBits(GPIOB,e);
    	delayms(1);
    	GPIOB->BSRR = dat<<8 & 0xf000;  //将数据送到P0口 
        GPIOB->BRR = ((~dat)<<8) & 0xf000;
    	delayms(1);
    	GPIO_SetBits(GPIOB,e);
    	delayms(1);
    	GPIO_ResetBits(GPIOB,e);//执行指令
    	delayms(1);
    	GPIOB->BSRR = dat<<12 & 0xf000;  //将数据送到P0口 
        GPIOB->BRR = ((~dat)<<12) & 0xf000;
    	delayms(1);
    	GPIO_SetBits(GPIOB,e);
    	delayms(1);
    	GPIO_ResetBits(GPIOB,e);//执行指令
    	delayms(1);
    	GPIO_ResetBits(GPIOB,rs);
    }

     

    展开全文
  • lcd1602控制整屏右移

    2010-08-05 20:56:08
    /*定义LCD控制端口*/ sbit lcd_rw_port = P1^6; //数据指令控制 sbit lcd_en_port = P2^4; //时能控制,时钟 #define lcd_data_port P0 uchar num; //////////////以下是LCD1602驱动程序//////////////// void ...
  • LCD1602详解

    千次阅读 2016-11-18 10:50:35
    接口LCD1602是很多单片机爱好者较早接触的字符型液晶显示器,它的主控芯片是HD44780或者其它兼容芯片。刚开始接触它的大多是单片机的初学者。由于对它的不了解,不能随心所欲地对它进行驱动。经过一段时间的学习,我...

    原文地址:http://www.51hei.com/mcu/4327.html

    一.接口

    LCD1602是很多单片机爱好者较早接触的字符型液晶显示器,它的主控芯片是HD44780或者其它兼容芯片。刚开始接触它的大多是单片机的初学者。由于对它的不了解,不能随心所欲地对它进行驱动。经过一段时间的学习,我对它的驱动有了一点点心得,今天把它记录在这里,以备以后查阅。与此相仿的是LCD12864液晶显示器,它是一种图形点阵显示器,能显示的内容比LCD1602要丰富得多,除了普通字符外,还可以显示点阵图案,带有汉字库的还可以显示汉字,它的并行驱动方式与LCD1602相差无几,所以,在这里花点时间是值得的。
    一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。我手里这块LCD1602的型号是HJ1602A,是绘晶科技公司的产品,它有16条引脚。如图1所示:
    这里写图片描述

    它的16条引脚定义如下:
    *VSS:电源地信号引脚;
    *VDD:电源信号引脚;
    *VEE:液晶对比度调节引脚,接0~5V以调节液晶的显示对比度;
    *RS:寄存器选择引脚:
    RS = 1时为数据寄存器;
    RS = 0时为指令寄存器;
    *RW:读写选择引脚:
    RW = 1时,选择读操作;
    RW = 0时,选择写操作;
    *E:读写操作选择引脚,下降沿时,数据被写入1602液晶,E= 1时,对1602液晶进行读数据操作;
    (读写1操作前均需要设E = 0,使得脉冲可以到达引脚,然后写入完数据后设E = 1,或者设E= 1再读取数据)
    *D0~D7:数据总线引脚;
    *LEDA:背光电源引脚;
    *LEDK:背光电源地引脚;

    二.接线

    1. VSS接电源地。
    2. VDD接+5V。
    3. VO是液晶显示的偏压信号,可接10K的3296精密电位器。或同样阻值的RM065/RM063蓝白可调电阻。见图3。
      这里写图片描述
    4. RS是命令/数据选择引脚,接单片机的一个I/O,当RS为低电平时,选择命令;当RS为高电平时,选择数据。
    5. RW是读/写选择引脚,接单片机的一个I/O,当RW为低电平时,向LCD1602写入命令或数据;当RW为高电平时,从LCD1602读取状态或数据。如果不需要进行读取操作,可以直接将其接VSS。
    6. E,执行命令的使能引脚,接单片机的一个I/O。
    7. D0—D7,并行数据输入/输出引脚,可接单片机的P0—P3任意的8个I/O口。如果接P0口,P0口应该接4.7K—10K的上拉电阻。如果是4线并行驱动,只须接4个I/O口。
    8. A背光正极,可接一个10—47欧的限流电阻到VDD。
    9. K背光负极,接VSS。见图4所示。
      这里写图片描述

    三.基本操作

    LCD1602的基本操作分为四种:
    1. 读状态:输入RS=0,RW=1,E=高脉冲。输出:D0—D7为状态字。
    2. 读数据:输入RS=1,RW=1,E=高脉冲。输出:D0—D7为数据。
    3. 写命令:输入RS=0,RW=0,E=低脉冲。输出:无。(写完置E=高脉冲)
    4. 写数据:输入RS=1,RW=0,E=低脉冲。输出:无。

    四.DDRAM、CGROM和CGRAM

    DDRAM(Display Data RAM)就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下(如图8):
    这里写图片描述

    DDRAM相当于计算机的显存,我们为了在屏幕上显示字符,就把字符代码送入显存,这样该字符就可以显示在屏幕上了。同样LCD1602共有80个字节的显存,即DDRAM。但LCD1602的显示屏幕只有16×2大小,因此,并不是所有写入DDRAM的字符代码都能在屏幕上显示出来,只有写在上图所示范围内的字符才可以显示出来,写在范围外的字符不能显示出来。这样,我们在程序中可以利用下面的“光标或显示移动指令”使字符慢慢移动到可见的显示范围内,看到字符的移动效果。
    前面说了,为了在液晶屏幕上显示字符,就把字符代码送入DDRAM。例如,如果想在屏幕左上角显示字符‘A’,那么就把字符‘A’的字符代码41H写入DDRAM的00H地址处即可。至于怎么写入,后面会有说明。那么为什么把字符代码写入DDRAM,就可以在相应位置显示这个代码的字符呢?我们知道,LCD1602是一种字符点阵显示器,为了显示一种字符的字形,必须要有这个字符的字模数据,什么叫字符的字模数据,看看下面的这个图就明白了(如图9)。
    这里写图片描述

    上图的左边就是字符‘A’的字模数据,右边就是将左边数据用“○”代表0,用“■”代表1。从而显示出‘A’这个字形。从下面的图可以看出,字符‘A’的高4位是0100,低4位是0001,合在一起就是01000001b,即41H。它恰好与该字符的ASCII码一致,这样就给了我们很大的方便,我们可以在PC上使用P2=‘A’这样的语法。编译后,正好是这个字符的字符代码。
    在LCD1602模块上固化了字模存储器,就是CGROM和CGRAM,HD44780内置了192个常用字符的字模,存于字符产生器CGROM(Character Generator ROM)中,另外还有8个允许用户自定义的字符产生RAM,称为CGRAM(Character Generator RAM)。下图(如图12)说明了CGROM和CGRAM与字符的对应关系。从ROM和RAM的名字我们也可以知道,ROM是早已固化在LCD1602模块中的,只能读取;而RAM是可读写的。也就是说,如果只需要在屏幕上显示已存在于CGROM中的字符,那么只须在DDRAM中写入它的字符代码就可以了;但如果要显示CGROM中没有的字符,比如摄氏温标的符号,那么就只有先在CGRAM中定义,然后再在DDRAM中写入这个自定义字符的字符代码即可。和CGROM中固化的字符不同,CGRAM中本身没有字符,所以要在DDRAM中写入某个CGROM不存在的字符,必须在CGRAM中先定义后使用。程序退出后CGRAM中定义的字符也不复存在,下次使用时,必须重新定义。
    这里写图片描述

    上面这个图(如图10)说明的是5×8点阵和5×10点阵字符的字形和光标的位置。先来说5×8点阵,它有8行5列。那么定义这样一个字符需要8个字节,每个字节的前3个位没有被使用。例如,定义摄氏温标的符号{0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00}。
    这里写图片描述

    上面这个图(如图11)说明的是设置CGRAM地址指令。从这个指令的格式中我们可以看出,它共有aaaaaa这6位,一共可以表示64个地址,即64个字节。一个5×8点阵字符共占用8个字节,那么这64个字节一共可以自定义8个字符。也就是说,上面这个图的6位地址中的DB5DB4DB3用来表示8个自定义的字符,DB2DB1DB0用来表示每个字符的8个字节。这DB5DB4DB3所表示的8个自定义字符(0–7)就是要写入DDRAM中的字符代码。我们知道,在CGRAM中只能定义8个自定义字符,也就是只有0—7这8个字符代码,但在下面的这个表(如图12)中一共有16个字符代码(××××0000b–××××1111b)。实际上,如图所示,它只能表示8个自定义字符 (××××0000b=××××1000b, ××××0001b=××××1001b……依次类推)。也就是说,写入DDRAM中的字符代码0和字符代码8是同一个自定义字符。 5×10点阵每个字符共占用16个字节的空间,所以CGRAM中只能定义4个这样的自定义字符。
    那么如何在CGRAM中自定义字符呢?在上面的介绍中,我们知道有一个设置CGRAM地址指令,同写DDRAM指令相似,只须设置好某个自定义字符的字模数据,然后按照上面介绍的方法,设置好CGRAM地址,依次写入这个字模数据即可。我们在后面的例子中再进行说明。
    这里写图片描述

    五.LCD1602指令

    1.工作方式设置指令(如图13)
    这里写图片描述
    ×:不关心,也就是说这个位是0或1都可以,一般取0。
    DL:设置数据接口位数。
    DL=1:8位数据接口(D7—D0)。
    DL=0:4位数据接口(D7—D4)。
    N=0:一行显示。
    N=1:两行显示。
    F=0:5×8点阵字符。
    F=1:5×10点阵字符。
    说明:因为是写指令字,所以RS和RW都是0。LCD1602只能用并行方式驱动,不能用串行方式驱动。而并行方式又可以选择8位数据接口或4位数据接口。这里我们选择8位数据接口(D7—D0)。我们的设置是8位数据接口,两行显示,5×8点阵,即0b00111000也就是0x38。(注意:NF是10或11的效果是一样的,都是两行5×8点阵。因为它不能以两行5×10点阵方式进行显示,换句话说,这里用0x38或0x3c是一样的)。
    2.显示开关控制指令(如图14)
    这里写图片描述
    D=1:显示开,D=0:显示关。
    C=1:光标显示,C=0:光标不显示。
    B=1:光标闪烁,B=0:光标不闪烁。
    说明:这里的设置是显示开,不显示光标,光标不闪烁,设置字为0x0c。
    3.进入模式设置指令(如图15、16)
    这里写图片描述
    I/D=1:写入新数据后光标右移。
    I/D=0:写入新数据后光标左移。
    S=1:显示移动。
    S=0:显示不移动。
    这里写图片描述
    说明:这里的设置是0x06。
    4.光标或显示移动指令(如图17、18)
    这里写图片描述
    这里写图片描述
    说明:在需要进行整屏移动时,这个指令非常有用,可以实现屏幕的滚动显示效果。初始化时不使用这个指令。
    5.清屏指令(如图19)
    这里写图片描述
    说明:清除屏幕显示内容。光标返回屏幕左上角。执行这个指令时需要一定时间。
    6.光标归位指令(如图20)
    这里写图片描述
    说明:光标返回屏幕左上角,它不改变屏幕显示内容。
    7.设置CGRAM地址指令(如图21)
    这里写图片描述
    说明:这个指令在上面已经介绍过。用法在后面例子中说明。
    8.设置DDRAM地址指令(如图22)
    这里写图片描述
    说明:这个指令用于设置DDRAM地址。在对DDRAM进行读写之前,首先要设置DDRAM地址,然后才能进行读写。前面我们说过,DDRAM就是LCD1602的显示存储器。我们要在它上面进行显示,就要把要显示的字符写入DDRAM。同样,我们想知道DDRAM某个地址上有什么字符,也要先设置DDRAM地址,然后将它读出到单片机。
    9.读忙信号和地址计数器AC(如图23)
    这里写图片描述
    说明:这个指令用来读取LCD1602状态。对于单片机来说,LCD1602属于慢速设备。当单片机向其发送一个指令后,它将去执行这个指令。这时如果单片机再次发送下一条指令,由于LCD1602速度较慢,前一条指令还未执行完毕,它将不接受这新的指令,导致新的指令丢失。因此这条读忙指令可以用来判断LCD1602是否忙,能否接收单片机发来的指令。当BF=1,表示LCD1602正忙,不能接受单片机的指令;当BF=0,表示LCD1602空闲,可以接收单片机的指令。RS=0,表示是指令;RW=1,表示是读取。这条指令还有一个副产品:即可以得到地址记数器AC的值(address counter)。LCD1602维护了一个地址计数器AC,用来记录下一次读写CGRAM或DDRAM的位置。需要强调的是:这条指令我一次也没有执行成功。很多网友似乎也是这样。好在我们有另外的办法,也就是延时。通过查看每条指令的执行时间,再经过一些试验,可以确定指令的延时。这样就可以在上一条指令执行完毕后再执行下一条指令了。
    10.写数据到CGRAM或DDRAM指令(如图24)
    这里写图片描述
    说明:RS=1,数据;RW=0,写。指令执行时,要在DB7—DB0上先设置好要写入的数据,然后执行写命令。
    11.从CGRAM或DDRAM读数据指令(如图25)
    这里写图片描述
    说明:RS=1,数据;RW=1,读。先设置好CGRAM或DDRAM的地址,然后执行读取命令。数据就被读入后DB7—DB0。

    六.实例

    下面我们就以一个实例来结束这篇文章。先介绍一下背景:单片机最小系统(扩充了外部RAM 62256)。采用STC89C52RC,晶振22.1184MHZ。以5×8点阵,16×2行,8位数据端口。首先在第一行显示“I love MCU!”,第二行显示“LCD1602 Test!”。延时一段时间,清屏。然后在第一行显示自定义字符:摄氏温标标志。第二行显示圆周率(pai)标志。再延时一段时间,清屏。最后在第一行显示“Welcome to my blog!”,显示方式是从屏幕右面移入,左面移出。周而复始(如图26)。
    这里写图片描述

    //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 #############################
    展开全文
  • 总结51单片机外接lcd1602的驱动程序,51单片机时钟电路采用12MHz晶振,P0端口外接上拉电阻与lcd1602数据口D0-D7相连,P2.7与lcd1602使能E端相连,P2.6与lcd1602读/写选择R/W端相连,P2.5与lcd1602数据/命令选择RS端...
  • arduino驱动lcd1602

    2020-10-04 21:22:17
    arduino直接驱动1602液晶显示字母1602液晶在应用中非常广泛,最初的1602液晶使用的是HD44780控制器,现在各个厂家的1602模块基本上都是采用了与之兼容的IC,所以特性上基本都1602LCD主要技术参数 arduino直接驱动...
  • LCD 1602字符菜单界面实现

    千次阅读 2014-04-26 13:43:35
    LCD 1602字符菜单界面实现 分类: 大学李7_4042013-05-27 14:19 633人阅读 评论(0) 收藏 举报 目录(?)[+] 1 LCD1602显示总结 使用LCD 1602显示内容时首先要初始化LCD1602的显示模式,...
  • //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 1.描述 51单片机控制LCD1602屏幕显示测量数据、固定字符串等,大家复制过去可以直接使用,相关注释我已... //定义端口 sbit RW = P1^2; sbit EN = P1^3; #define RS_CLR RS=0 #define RS_S
  • LCD1602_3.3V

    2021-03-28 07:21:21
    模块:LCD1602_3.3V 主控: STM32F4xxxx 目录 一、LCD1602 使用的模块供电电压是3.3V的!! 接口说明:​ 二、时序说明 一、LCD1602 使用的是某宝LCD1602A模块 简述: 1602A QAPASS字符型液晶显示模块是专门...
  • 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 ;程序名...
  • 51_LCD1602+步进电机

    千次阅读 2019-10-09 15:17:28
    LCD1602+步进电机 protues电路仿真 仿真元器件 LCD:LM016L ULN2003A 步进电机:MOTOR-STEPPER 仿真电路截图 硬件说明 1.LCD 1.1 引脚定义 1.2 基本操作时序: 读状态 输入:RS=L,RW=H,E=H ...
  • 1、LCD1602.h文件,进行管脚定义和函数声明 #ifndef _LCD1602_H_ #define _LCD1602_H_ #include <reg52.h> /* 定义单片机的管脚 */ #define LCD1602_DATAPINS P0 //P0口用来发送数据,一整个字节地发送 ...
  • 单片机 LCD1602

    千次阅读 2019-05-18 16:12:31
    LCD1602为工业字符型液晶,LCD表示LiquidCrystal Display。能够同时显示16 x 2(16列2行)即32个字符。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5...
  • STM32单片机(9) LCD1602显示屏输出实验

    万次阅读 热门讨论 2014-08-08 11:29:53
    LCD1602显示屏输出实验
  • 点亮LCD1602

    2011-12-08 22:23:00
    LCD1602中的16表示16个字符,02表示有2行。是一个价格不贵比较常用到字符显示器,我在淘宝上买了一个10元。默认情况下能显示192个已经定义好的字符,当然不包括中文。不过他也提供了64字节的空间给您自己造字型。 这...
  • DS18B20+LCD1602温度监控

    2014-07-06 16:08:57
    亲自调试的 绝对实际可用 用的时候记得修改端口定义
  • FPGA之NIOS系统LCD1602核及自定义LCD液晶IP核 前言 在前期文章中提到了LCD1602一些基本知识,包括控制,显示,时序。那如何在NIOS系统创建LCD1602的IP核? 由于在Qsys中提供了Optrex 16207 LCD Controller Core...
  • LCD1602液晶显示

    千次阅读 2015-02-04 20:09:37
    LCD 1602液晶显示程序代码及一些存储器资料
  • 基于51单片机LCD1602

    千次阅读 2019-12-17 21:12:32
    (一)什么是LCD1602 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的...
  • lcd1602液晶

    2017-01-24 09:08:27
    include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的... //定义端口  sbit RW = P2^5; sbit EN = P2^7; sbit SPK = P3^0; unsigned char time[] = {'0','1','2','3','4','5','6','7','8',
  • MSP430F5529与LCD1602显示模块(上)

    千次阅读 2019-08-20 18:45:31
    源代码正在整理中,等MSP430F5529与LCD1602显示模块(下)发布后再一起上传至Github,敬请期待。 LCD1602介绍 外观 主要技术参数 **显示容量:**16X2个字符 **芯片工作电压:**4.5~5.5V 工作电流: 2.0mA...
  • 主要端口指定无法集成在类中,目前只能将端口定义LCD1602PortDef.inc, 在类文件 LCD1602.PAS 中用 {KaTeX parse error: Expected 'EOF', got '}' at position 22: …602PortDef.inc }̲ ,实现一定的灵活性。...
  • LCD1602液晶 - 开发技术详解

    万次阅读 多人点赞 2018-11-21 22:06:29
    1602液晶它也可以被叫做1602字符型液晶,这个是一种只用来显示字母、数字、符号等的点阵型液晶模块。1602里面存储器有三种:CGROM、CGRAM、DDRAM。 DDRAM(Display Data RAM)就是显示数据RAM,用来寄存待显示的字符...
  • LCD1602显示屏的驱动设置及例程

    万次阅读 多人点赞 2017-08-25 15:29:49
    一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。我手里这块LCD1602的型号是HJ1602A,是绘晶科技公司的产品,它有16条引脚。如图1所示: 图1 再来一张它...
  • 单片机显示原理(LCD1602)

    千次阅读 多人点赞 2015-08-15 11:22:00
    与此相仿的是LCD12864液晶显示器,它是一种图形点阵显示器,能显示的内容比LCD1602要丰富得多,除了普通字符外,还可以显示点阵图案,带有汉字库的还可以显示汉字,它的并行驱动方式与LCD1602相差无几,所以,在这里...
  • //定义端口 sbit RW = P2^1; sbit EN = P2^2; #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 Data
  • LCD1602(以51单片机为例)

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

    2013-10-19 00:13:00
    LCD 1602 使用 这个显示模块只能显示英文和日文。 使用简单价格便宜。 下面是测试通过的程序,可以直接用 #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,136
精华内容 4,054
关键字:

lcd1602端口定义