文档库 最新最全的文档下载
当前位置:文档库 › 51单片机驱动1602液晶(4线串行)

51单片机驱动1602液晶(4线串行)

51单片机驱动1602液晶(4线串行)
51单片机驱动1602液晶(4线串行)

51单片机驱动1602液晶(4线串行) 2015-06-26 12:04:01 来源:51hei

关键字:51单片机1602液晶4线串行

/*单片机I/O 口使单片机资源的重要组成部分,也是用来扩展外围设备的必选资源,尽可能以更少的I/O口实现更多的功能是单片机工程师追求的目标,现在的一些串行器件也为这一目标的实现添加了更多的可能性,比如I2C总线,MAXIM力推的1-WIRE等等,都可以以很少的I/O口实现更多的功能,当然这是以降低一定的速度为代价的。

废话少说,进入正题。

显示器件多见的是LED数码管,LCD液晶屏等。一般的数码管成本低廉,在显示内容要求不多的时候适用;LCD液晶屏以更多的显示空间得到了许多人的爱好,不过成本上要高的多(市场价在20元左右),本文以LCD1602为例说明如何驱动液晶屏。

LCD1602外接的控制接口有RS,R/W,E;数据接口为DB7--DB0。总共有11跟线与单片机的I/O口连接,若使用标准的51单片机,至少占用了一个端口再加上另一个端口的部分I/O口。这再很多应用场合是不大可取的。所以很有必要减少连接数。从其数据手册上介绍的4线连接方式可以达到只使用7个I/O口即可满足要求,其中为3个控制口RS,R/W,E和数据口的DB7--DB4;写入数据或指令的顺序是先写高半个字节,再写低半个字节。

其中P0口的高四位接到LCD1602的DB7-DB4,P3.0-P3.1分别接RS,R/W,E;

下面给出驱动源程序*/

#include

#include "intrins.h"

#define uint unsigned int

#define uchar unsigned char

#define TRUE 1

#define FALSE 0

#define nop _nop_()

#define PtData P0 //定义连接口线,#define PtContr P3

sbit RS="PtContr"^0;

sbit RW="PtContr"^1;

sbit E="PtContr"^2;

void InitialLcd();

void WriteLcdInstr(uchar);

void WriteLcdData(uchar);

void CheckLcdBusy();

uchar HexToDdram(uchar);

void Delay(unsigned int);

main()

{Delay(1000);

InitialLcd();

WriteLcdInstr(0x80); WriteLcdData('e');

WriteLcdData('l');

WriteLcdData('k');

WriteLcdData('e');

WriteLcdData('l');

WriteLcdData('i');

WriteLcdData('k');

WriteLcdData('e');

WriteLcdInstr(0xc0); WriteLcdData('L');

WriteLcdData('C');

WriteLcdData('D');

WriteLcdData('1');

WriteLcdData('6');

WriteLcdData('0');

WriteLcdData('2');

while(1)

{

WriteLcdInstr(0x0f);

Delay(30000);

WriteLcdInstr(0x08);

Delay(40000);

}

}

//----------------LCD1602函数---------------------//

//---初始化

void InitialLcd()

{Delay(600);//延时应大于15ms,不同的晶振使需要修改,本程序再6M下调试通过

RS=0;

RW=0;nop;

E=0;nop;

E=1;nop;

PtData=0x20;//

nop;

E=0;

Delay(200);//延时应大于4.1ms

E=1;nop;

PtData=0x20;//

nop;

E=0;

Delay(5);//延时应大于100us

E=1;nop;

PtData=0x20;//

nop;

E=0;//设置4位操作;

WriteLcdInstr(0x01);//清屏

WriteLcdInstr(0x28);//设置4位操作,1行显示,5x8

WriteLcdInstr(0x02);//光标归位

WriteLcdInstr(0x06);//AC自动加1,画面不动

WriteLcdInstr(0x0f);//0x0f:光标闪烁开;

}

//---写指令

void WriteLcdInstr(uchar Temp)

{CheckLcdBusy();

RS=0;

RW=0;

E=0;nop;

PtData=Temp;

nop;

E=0;nop;

E=1;nop;

PtData=(Temp<<4);

nop;

E=0;nop;

}

//---写数据

void WriteLcdData(uchar Temp) {

CheckLcdBusy();

RS=1;

RW=0;

E=0;nop;

E=1;nop;

PtData=Temp;

nop;

E=0;nop;

E=1;nop;

PtData=(Temp<<4);

nop;

E=0;nop;

}

//---查忙

void CheckLcdBusy()

{uchar Temp,t;

PtData=0xff;

RW=1;

RS=0;nop;

E=0;nop;

do

{nop;

E=1;nop;

Temp=PtData;

nop;nop;nop;

E=0;nop;nop;

t=PtData;

nop;nop;nop;

E=0;nop;nop;

Temp&=0x80;

}while(Temp==0x80);

}

//---delay

void Delay(unsigned int N) {unsigned int i;

for(i=0;i

}

lcd1602四线驱动

LCD1602 4 位数据线连接方式驱动程序(转载) 2008-10-14 11:00 LCD1602 4 位数据线连接方式驱动程序(转载) /* 单片机 I/O口使单片机资源的重要组成部分,也是用来扩展外围设备的必选资源, 尽可能以更少的 I/O口实现更多的功能是单片机工程师追求的目标,现在的一些串 行器件也为这一目标的实现添加了更多的可能性,比如 I2C总线,MAXIM 力推 的 1-WIRE 等等,都可以以很少的I/O 口实现更多的功能,当然这是以降低一定的速度 为代价的。 显示器件多见的是 LED数码管,LCD 液晶屏等。一般的数码管成本低廉,在显示内 容要求不多的时候适用;LCD 液晶屏以更多的显示空间得到了许多人的爱好,不过 成本上要高的多(市场价在 20元左右),本文以 LCD1602为例说明如何驱动液晶屏。 LCD1602 外接的控制接口有RS,R/W,E;数据接口为 DB7--DB0。总共有11 跟 线与单 片机的 I/O口连接,若使用标准的 51单片机,至少占用了一个端口再加上另一个端 口的部分 I/O 口。这再很多应用场合是不大可取的。所以很有必要减少连接数。从 其数据手册上介绍的 4线连接方式可以达到只使用 7个 I/O口即可满足要求,其中为 3 个控制口 RS , R/W , E 和数据口的 DB7--DB 4 ;写入数据或指令的顺序是先写高半个 字节,再写低半个字节。 其中 P2 口的高四位接到 LCD1602 的 DB7-DB4,P2.2-P2.3 分别接 RS,E; RW 接地

下面给出驱动源程序*/ /* -------------------------------------------------------- 液晶 LCD1602C 使用4 条数据线(D4~D7) ---------------------------------------------------------- */ /* ------------------------------------------------------------ LCD 引脚定义 1---GND 2---VCC 3---VO 4---RS 5---RW 6---EN 7 到 14--D0-D7 15--背景灯+ 16--背景灯- ---------------------------------------------------------------- */ #include #include #define LCD_DATA P2 sbit LCD1602_RS=P2^2; sbit LCD1602_EN=P2^3; //1602_RW 接地 int p=0; /* 函数说明 ----------------------------- */ void LCD_init(void);

LCD1602资料及单片机对其驱动

技术支持:https://www.wendangku.net/doc/688094454.html,/bbs 主 讲:wang1jin Wang1jin 带您从零学单片机 配套开发板:WJ-V4.0 AVR+51开发板 第三章:LCD 部分

技术支持:https://www.wendangku.net/doc/688094454.html,/bbs 主 讲:wang1jin 单片机驱动LED ?LCD1602简介 ?LCD1602硬件原理图?LCD1602工作方式?LCD1602时序及应用?LCD1602显示应用流程 ?实例操作:在LCD1602上显示一个字符?实例操作:在LCD1602上显示一串字符?实例操作:在LCD1602上显示自定义图形

这里介绍的字符型液晶模块是一种用 5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里我们使用常用的2行16个字的LCD1602液晶模块来介绍它的编程方法。 技术支持:https://www.wendangku.net/doc/688094454.html,/bbs 主讲:wang1jin

LCD1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,其代码与标准的ASCII字符代码一致。因此,我们只要写入显示字符的ASCII码即可,这种标准化的设计给使用带来很大的方便。 比如大写的英文字母“A”的ASCII代码是01000001B (41H),显示时单片机往液晶模块写入显示指令,模块就把地址41H中的点阵字符图形显示出来,我们就能在相应位置上看到字母“A”。 技术支持:https://www.wendangku.net/doc/688094454.html,/bbs 主讲:wang1jin

LCD1602液晶显示实验要点

实验报告 实验名称: [LCD1602液晶显示实验]姓名: 学号: 指导教师: 实验时间: [2013年6月15日] 信息与通信工程学院

LCD1602液晶显示实验 1.实验原理 1.1 基本原理 1.1.1 1602字符型LCD简介 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。 1.1.2 1602LCD的基本参数及引脚功能 1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图1-2所示: 图1-2 1602LCD尺寸图 1.1602LCD主要技术参数: 显示容量: 16×2个字符 芯片工作电压: 4.5~5.5V 工作电流: 2.0mA(5.0V) 模块最佳工作电压: 5.0V 字符尺寸: 2.95×4.35(W×H)mm 2.引脚功能说明: 1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表: 表1-3引脚接口说明表 编 符号引脚说明编号符号引脚说明 号 1 VSS 电源地9 D 2 数据 2 VDD 电源正极10 D 3 数据 3 VL 液晶显示偏压11 D 4 数据 4 RS 数据/命令选择12 D 5 数据 5 R/W 读/写选择13 D 6 数据 6 E 使能信号14 D 7 数据 7 D0 数据15 BLA 背光源正极 8 D1 数据16 BLK 背光源负极

1.1.3 1602LCD的指令说明及时序 1602液晶模块内部的控制器共有11条控制指令,如表1-4所示: 表1-4 控制命令表 序号指令RS R/W D7 D6 D5 D4 D3 D2 D1 D0 1 清显示0 0 0 0 0 0 0 0 0 1 2 光标返回0 0 0 0 0 0 0 0 1 * 3 置输入模式0 0 0 0 0 0 0 1 I/D S 4 显示开/关控制0 0 0 0 0 0 1 D C B 5 光标或字符移位0 0 0 0 0 1 S/C R/L * * 6 置功能0 0 0 0 1 DL N F * * 7 置字符发生存贮器 地址 0 0 0 1 字符发生存贮器地址 8 置数据存贮器地址0 0 1 显示数据存贮器地址 9 读忙标志或地址 0 1 BF 计数器地址 10 写数到CGRAM或 DDRAM) 1 0 要写的数据内容 11 从CGRAM或 DDRAM读数 1 1 读出的数据内容 1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)读写操作时序如图1-5和1-6所示: 图1-5 读操作时序

[VHDL代码]LCD1602驱动

[VHDL代码]LCD1602驱动 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity LCD1602 is Port ( Clk : in std_logic; --状态机时钟信号,同时也是液晶时钟信号,其周期应该满足液晶数据的建立时间Sec_low,Sec_high,Min_low,Min_high,Hour_low,Hour_high: in std_logic_vector(3 downto 0); LCD_RS : out std_logic; --寄存器选择信号 LCD_RW : out std_logic; --液晶读写信号 LCD_EN : out std_logic; --液晶时钟信号 LCD_Data : out std_logic_vector(7 downto 0)); --液晶数据信号 end LCD1602; architecture Behavioral of LCD1602 is type STATE_TYPE is (START,write_C,write_D,WRITE_BYTE_C,WRITE_BYTE_D,wait_3m1,wait_3m2,wait_5m1,wait_5m2,w ait_100m); type MY_ARRAY1 is array(0 to 4) of std_logic_vector(7 downto 0); type MY_ARRAY2 is array(0 to 7) of std_logic_vector(7 downto 0);--长度为14的8位/字数组 constant c_d: MY_ARRAY1:=(x"38",x"0c",x"06",x"01",x"84"); signal d_d: MY_ARRAY2:=(x"20",x"20",x"3A",x"20",x"20",x"3A",x"20",x"20"); signal STATE: STATE_TYPE:=START; signal w_c_flag : integer range 0 to 2:=0; signal w_d_flag : integer range 0 to 2:=0; signal write_c_cnt : integer range 0 to 5:=0; signal write_d_cnt : integer range 0 to 8:=0; signal cnt : integer range 0 to 10000:=0; signal count : integer range 0 to 10000:=0; begin LCD_RW <= '0' ; --写数据 d_d(0)<="0000"&Hour_high+x"30"; d_d(1)<="0000"&Hour_low+x"30"; d_d(3)<="0000"&Min_high+x"30"; d_d(4)<="0000"&Min_low+x"30"; d_d(6)<="0000"&Sec_high+x"30"; d_d(7)<="0000"&Sec_low+x"30";

LCD1602驱动详解

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

图1 再来一张它的背面的,如图2所示:

图2它的16条引脚定义如下:

3. VO是液晶显示的偏压信号,可接10K的3296精密电位器。或同样阻值的RM065/RM063蓝白可调电阻。见图3。 图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所示。

lcd1602C语言驱动

/*LCD1602 驱动程序 */ display (行号,数据指针) displayUser (行号,列号,字符/字符串) Ddisplay (行号、列号、字符/字符串) Fldisplay (行号、列号、字符/字符串) /* 声明代码(放工程中需要包含的自定义头文件中) void delay(unsigned char n); void init(); void display(unsigned char a,unsigned char table[]); void write_date(uchar); void write_command(uchar); void displayUser(unsigned char hang,unsigned lie,unsigned char table[]); void Ddisplay(unsigned char hang,unsigned lie,unsigned char table[]); void Fldisplay(unsigned char hang,unsigned lie,unsigned char table[]); */ #include #define uchar unsigned char sbit rs=P2A 4; sbit rw=P2A5; sbit e=P2A6; uchar busyc,line; void delay(uchar n) { uchar x,y; for(x=n;x>0;x--) for(y=110;y>0;y--); } void busy(uchar busyc) { rs=0; rw=1;e=1; delay(1); busyc=P0; e=0; } void write_command(uchar command) { /* 程序用法: 1、按行显示: 2、定位显示 3、动态显示 4、闪烁显示 */

LCD1602显示屏地驱动设置及例程

LCD1602显示屏的驱动设置及例程 一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。我手里这块LCD1602的型号是HJ1602A,是绘晶科 技公司的产品,它有16条引脚。如图1所示: 图1 再来一张它的背面的,如图2所示: 引脚号符号引脚说明引脚号符号引脚说明 1 VSS 电源地9 D 2 数据端口 2 VDD 电源正极10 D 3 数据端口 3 VO 偏压信号11 D 4 数据端口 4 RS 命令/数据12 D 5 数据端口 5 RW 读/写13 D 6 数据端口 6 E 使能14 D 7 数据端口 7 D0 数据端口15 A 背光正极

图3

图4 二.基本操作 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=高脉冲。输出:无。 读操作时序图(如图5): 图5 写操作时序图(如图6):

图6 时序时间参数(如图7): 图7 三.DDRAM、CGROM和CGRAM DDRAM(Display Data RAM)就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下(如图8): 图8 DDRAM相当于计算机的显存,我们为了在屏幕上显示字符,就把字符代码送入显存,这样该字符就可以显示在屏幕上了。同样LCD1602共有80个字节的显存,即DDRAM。但L CD1602的显示屏幕只有16×2大小,因此,并不是所有写入DDRAM的字符代码都能在屏幕上显示出来,只有写在上图所示范围内的字符才可以显示出来,写在范围外的字符不

LCD1602液晶显示实验实验报告及程序

实验三 LCD1602液晶显示实验 姓名专业学号成绩 实验目的 掌握Keil C51软件与proteus软件联合仿真调试的方法; 掌握LCD1602液晶模块显示西文的原理及使用方法; 掌握用8位数据模式驱动LCM1602液晶的C语言编程方法; 掌握用LCM1602液晶模块显示数字的C语言编程方法。 实验仪器与设备 1.微机一台C51集成开发环境仿真软件 实验内容 用Proteus设计一LCD1602液晶显示接口电路。要求利用P0口接LCD1602液晶的数据端,~做LCD1602液晶的控制信号输入端。~口扩展3个功能键K1~K3。参考电路见后面。 编写程序,实现字符的静态和动态显示。显示字符为 第一行:“1.姓名全拼”,第二行:“2.专业全拼+学号”。 编写程序,利用功能键实现字符的垂直滚动和水平滚动等效果显示。显示字符为: “1.姓名全拼 2.专业全拼+学号EXP8 DISPLAY ” 主程序静态显示“My information!” 实验原理 液晶显示的原理:采用的LCD显示屏都是由不同部分组成的分层结构,位于最后面的一层是由荧光物质组成的可以发射光线的背光层,背光层发出的光线在穿过第一层偏振过滤层之后进入包含成千上万水晶液滴的液晶层,液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。当LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。 LCD1602采用标准的14引脚(无背光)或16引脚(带背光)接口,各引脚接口说明如表:

编号符号引脚说明编号符号引脚说明 1VSS电源地9D2数据 2VDD电源正极10D3数据 3VL液晶显示偏压11D4数据 4RS数据/命令选择12D5数据 5R/W读/写选择13D6数据 6E使能信号14D7数据 7D0数据15BLA背光源正极 8D1数据16BLK背光源负极1602液晶模块内部的控制器共有11条控制指令,如表所示: 芯片时序表: 4.1602LCD的一般初始化(复位)过程

LCD1602的电路图和程序

MS 基于1602字符型液晶显示器的显示系统

姓名:杨越 班级:电子11-1 学号:110400104 一、实习目的 (1)了解飞思卡尔单片机的基本原理,掌握其基本的工作流程。 (2)了解LCD1602的基本原理及用法。 (3)能够熟练使用CodeWarrior软件编写C语言程序,使用BDM仿真器下 载程序。 (4)能够熟练焊接电路板。 二、实验设备与器件 CodeWarrior软件,BDM仿真器,万用电路板,飞思卡尔单片机,LCD1602液晶显示器, 三、实验内容 内容:利用飞思卡尔单片机制作基于1602字符液晶显示器的显示系统 要求:用四个按键控制,按下第一个按键显示1,按下第二个按键显示2,以此类推。 (1)LCD1602液晶显示器的原理:1602共16个管脚,但是编程用到的主要

管脚不过三个,分别为:RS(数据命令选择端),R/W(读写选择端),E(使能信号);以后编程便主要围绕这三个管脚展开进行初始化,写命令,写数据。 以下具体阐述这三个管脚: RS为寄存器选择,高电平选择数据寄存器,低电平选择指令寄存器。 R/W为读写选择,高电平进行读操作,低电平进行写操作。 E端为使能端,后面和时序联系在一起。 除此外,D0~D7分别为8位双向数据线。 操作时序: 注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0. 读取状态字时,注意D7位,D7=1,禁止读写操作;D7=0,允许读写操

作; 所以对控制器每次进行读写操作前,必须进行读写检测。(即后面的读忙子程序) 指令集: LCD_1602 初始化指令小结: 0x38 设置16*2显示,5*7点阵,8位数据接口 0x01 清屏 0x0F 开显示,显示光标,光标闪烁 0x08 只开显示 0x0e 开显示,显示光标,光标不闪烁 0x0c 开显示,不显示光标 0x06 地址加1,当写入数据的时候光标右移 0x02 地址计数器AC=0;(此时地址为0x80)光标归原点,但是DDRAM中断内容不变 0x18 光标和显示一起向左移动 (2)飞思卡尔单片机的功能及特点:MC9S12XS128是16 位单片机,由16 位中央处理单元(CPU12X)、128KB 程序、Flash(P-lash)、8KB RAM、8KB 数据Flash(D-lash)组成片内存储器。主要功能模块包括:内部存储器,内部PLL 锁相环模块,2 个异步串口通讯SCI ,1个串行外设接口SPI MSCAN 模块,1 个8 通道输入/输出比较定时器模块TIM ,周期中断定时器模块PIT ,16

LCD1602常用驱动子程序(汇编语言)

LCD1602常用驱动子程序(汇编语言) 文章发表于:2007-11-19 10:35 最近找到了LCD1602的驱动程序,经本人整理把常用的驱动子程序现上传给大家,希望能对大家有用。此程序以EDN的51实验板为基础,数据口为P0,控制口为P1。 程序共有9段,START为主程序,INSE为中断服务子程序,INIT为LCD显示模式设置子程序,QLCD为清屏子程序,WIR为写指令子程序,WDR为写数据子程序,CKLCD为查LCD空闲子程序,STS00为延时子程序,PWDR为批量写数据子程序。程序如下: RS BIT P1.0 RW BIT P1.1 E BIT P1.2 ORG 0000H AJMP START ORG 000BH AJMP INSE ORG 0100H ;程序地址 START: MOV TMOD,#00H ;设置计时/计数模式 MOV TL0,#00H ;#00H-->计时0低位 MOV TH0,#00H ;#00H-->计时0高位 SETB EA ;开中断 SETB ET0 ;中断使能 SETB TR0 ;计时0开绐 MOV 50H,#32H ;#32H-->50H MOV SP,#60H ;#60h-->SP 地址指针 ACALL INIT ;调 INIT 子程序 ( LCD 模式设置) ACALL QLCD ;调清屏子程序 MOV A,#80H ;#80H-->A (设LCD地址第一行第一列) ACALL WIR ;调写IR子程序 MOV DPTR,#L1 ;#L1-->DPTR ACALL PWDR ;调批量写DR子程序 MOV A,#0C0H ;#0C0H-->A (设LCD地址第二行第一列) ACALL WIR ;调写 IR 子程序 MOV DPTR,#L2 ;#L2-->DPTR ACALL PWDR ;调批量写DR子程序 LOOP: AJMP LOOP ;转LOOP INSE: MOV TL0,#00H ;#00H-->计时0低位 MOV TH0,#00H ;#00H-->计时0高位 DJNZ 50H,INSE0 ;50H-1 不等于0转INSE0

LCD1602原理及显示程序

在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED 数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。 在单片机系统中应用晶液显示器作为输出器件有以下几个优点:显示质量高 由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。 数字式接口 液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。 体积小、重量轻 液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。

功耗低 相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。 10.8.1 液晶显示简介 ①液晶显示原理 液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。 ②液晶显示器的分类 液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。 ③液晶显示器各种图形的显示原理: 线段的显示

LCD1602驱动程序(C51)

/****************************************************************************** ** * * Module: lcd1602_drv.h * Function: lcd1602显示屏驱动程序和中间接口 * Author: 槐之林 * * Version: 2016-05-29 * ******************************************************************************* */ #ifndef _lcd1602_drv_h_ #define _lcd1602_drv_h_ #ifndef NULL #define NULL ((void *) 0L) #endif typedef unsigned char uchar; typedef unsigned intuint; //LCD1602显示IO #define LCD_DATA P0 sbit LCD_RS = P2^0; sbit LCD_RW = P2^1; sbit LCD_EP = P2^2; #include "app_common.h" #define LCD_CLEAR 1 #define LCD_NORMER 2 #define LCD_CURSOR_BLINK 3 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> //对外接口 bit Lcd_bz(); //忙时判断,1表示忙 void Lcd_cmd(ucharcmd); //写指令 void Lcd_ctrl(uchar L, uchar C, uchar CC);//控制函数 void Lcd_pos(ucharx,uchar y); //定位 void Lcd_ch(ucharch); //写数据,单个字符并显示 void Lcd_str(uchar *str, uintlen); //写入字符串并显示(用到Lcd_ch()函数) void Lcd_num(intnum); //显示整数 voidLcd_init();

LCD1602的驱动

5.自制单片机之五LCD1602的驱动 LCD1602已很普遍了,具体介绍我就不多说了,市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,定义如下表所示: 字符型LCD的引脚定义 HD44780内置了DDRAM、CGROM和CGRAM。 DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表:

也就是说想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码就行了。但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。第二行也一样用前16个地址。对应如下: DDRAM地址与显示位置的对应关系 我们知道文本文件中每一个字符都是用一个字节的代码记录的。一个汉字是用两个字节的代码记录。在PC上我们只要打开文本文件就能在屏幕上看到对应的字符是因为在操作系统里和BIOS里都固化有字符字模。什么是字模?就代表了是在点阵屏幕上点亮和熄灭的信息数据。例如“A” 字的字模: 01110 ○■■■○ 10001 ■○○○■ 10001 ■○○○■ 10001 ■○○○■ 11111 ■■■■■ 10001 ■○○○■ 10001 ■○○○■ 上图左边的数据就是字模数据,右边就是将左边数据用“○”代表0,用“■”代表1。看出是个“A”字了吗?在文本文件中“A”字的代码是41H,PC收到41H的代码后就去字模文件中将代表A字的这一组数据送到显卡去点亮屏幕上相应的点,你就看到“A”这个字了。 刚才我说了想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码41H就行了,可41H这一个字节的代码如何才能让LCD模块在屏幕的阵点上显示“A”字呢?同样,在LCD模块上也固化了字模存储器,这就是CGROM和CGRAM。HD44780内置了192个常用字符的字模,存于字符产生器CGROM(Character Generator ROM)中,另外还有8个允许用户自定义的字符产生RAM,称为CGRAM(Character Generator RAM)。下图说明了CGROM 和CGRAM与字符的对应关系。

LCD1602.H51单片机LCD1602显示驱动程序

LCD1602.H(51单片机LCD1602显示驱动程 序) /*无敌高氯酸修改 函数功能 delay_ms(time) 延时time毫秒 LCD_init() 初始化清空LCD屏 LCD_print(x,y,str)在(x,y)坐标上显示str字符 0=;0;i--) for (j=0;j<1140;j++); } /************************************************ ********************* 函数名称:LCD_print() 功能描述:显示字符或字符串 入口参数:字符或字符串 返回值:无 ************************************************* *********************/ void LCD_print(uchar x,uchar y,uchar *str) {

LCD_gotoxy(x,y); while(*str!='\0') { LCD_wdata(*str); str++; } } /* ************************************************* ******************* 函数名称:LCD_wcommand() 功能描述:LCD写指令 入口参数:uchar lcd_cmd:命令字,uchar busy_f:忙检测标志位 返回值:无 ************************************************* ******************* */ void LCD_wcommand(uchar lcd_cmd,busy_f) { if (busy_f) Rstatus(); //不忙才执行下个程序 Port = lcd_cmd;

LCD1602.h头文件下载(完美液晶驱动文件)

LCD1602.h头文件下载(完美液晶驱动文件) 1602 液晶屏是在单片机系统中常用的显示器件,这里我给大家共享2 个完 美的LCD1602.h 头文件,下面是第一个:由于2 个文件组成:51hei/bbs/dpj- 24671-1.html 把里面的2 个代码分别保存为文件即可.点这里可以提供文件下载 还有一个是LCD1602.h 代码如下,复制代码并保存到文件即可,当然io 口 要改为你自己的.#ifndef _LCD1602_H#define _LCD1602_H/* #define uchar unsigned char#define uint unsigned int#define LCD_DATA P0sbit LCD_EN=P2 ;sbit LCD_RS=P2;sb it LCD_RW=P2;/********************************************** ***********************************************/void delay_ms(uint temp){uint x,y;for(x=temp;x>0;x--) for(y=110;y>0;y-- );}/****************************************************************** ***************************/void LCD_w_com(uchar com){LCD_RS=0;LCD_RW=0;LCD_DATA=com;delay_ms(5);LCD_EN=1;delay_ ms(5);LCD_EN=0;}/*************************************************** ******************************************/void LCD_w_data(uchar dat){LCD_RS=1;LCD_RW=0;LCD_DATA=dat;delay_ms(5);LCD_EN=1;delay_ms (5);LCD_EN=0;}/****************************************************** ***************************************/void LCD_init(){LCD_EN=0;LCD_w_com(0x38);LCD_w_com(0x0c);LCD_w_com(0x0 6);LCD_w_com(0x01);}/************************************************ *********************************************/void LCD_disp_cher(uchar x,uchar y,uchar *p){if(y==1){ LCD_w_com(0x80+x); while(*p) { LCD_w_data(*p);

74ls373驱动LCD1602显示程序

#include #include #include #include #define uchar unsigned char #define uint unsigned int #define LCD_CMD_WR 0x00 #define LCD_DATA_WR 0x01 #define LCD_BUSY_RD 0x02 #define LCD_DATA_RD 0x03 #define LCD_CLS 0x01 #define LCD_HOME 0x02 #define LCD_SETMODE 0x04 #define LCD_SETVISIBLE 0x08 #define LCD_SHIFT 0x10 #define LCD_SETFUNCTION 0x20 #define LCD_SETCGADDR 0x40 #define LCD_SETDDADDR 0x80 code char *s1=" LCD1602 makeby dk"; code char *s2=" port extension " ; void delay_ms(uint x) { uchar t;while(x--) for(t=0;t<120;t++); } void Busy_Wait() { uchar LCD_Status; do {LCD_Status = XBYTE[LCD_BUSY_RD];} while(LCD_Status&0x80); } void Write_LCD_Command(uchar cmd) { XBYTE[LCD_CMD_WR]=cmd;Busy_Wait(); } void Write_LCD_Data(uchar dat) { XBYTE[LCD_DA TA_WR]=dat;Busy_Wait(); } void LCD_Show_String(uchar r,uchar c,char *s) { uchar i=0; uchar DDRAM[]={LCD_SETDDADDR,LCD_SETDDADDR|0x40}; Write_LCD_Command(DDRAM[r]|c); while(s[i]&&i<16) Write_LCD_Data(s[i++]); for(;i<16;i++) Write_LCD_Data(' ');

LCD1602和LM016l中文资料(程序和使用说明)

LM016l 与LCD1602原理是一样的,只不过PROTEUS中016没显示调亮度的那两个端口,但并不影响。 在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED 数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。 在单片机系统中应用晶液显示器作为输出器件有以下几个优点: 显示质量高 由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。数字式接口 液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。 体积小、重量轻 液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。 功耗低 相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。 10.8.1 液晶显示简介 ①液晶显示原理 液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。 ②液晶显示器的分类 液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。 ③液晶显示器各种图形的显示原理: 线段的显示 点阵图形式液晶由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上开始显

相关文档