当前位置:文档之家› 1602液晶模块数据手册(中文)

1602液晶模块数据手册(中文)

1602液晶模块数据手册(中文)
1602液晶模块数据手册(中文)

LCD 模块使用手册

EDM1602-10

字符点阵式液晶显示模块

使用说明

大连东显电子有限公司

地址: 大连开发区哈尔滨路25-1号

邮编: 116600

电话: (0411)7612956 7632020 7612955

传真: (0411)7612958

1. 使用范围----------------------------------------------------3

2. 质量保证----------------------------------------------------3

3. 性能特点----------------------------------------------------3

4. 外形图-------------------------------------------------------6

5. I/O接口特性-----------------------------------------------7

6. 质量等级---------------------------------------------------26

7. 可靠性---------------------------------------------------28

8. 生产注意事项---------------------------------------------29

9. 使用注意事项---------------------------------------------30

第 2 页共30页

第 3 页 共30页

1. 使用范围

该检验标准适用于大连东显电子有限公司设计提供的标准液晶显示模块。如果在使用中出现了异常问题或没有列明的项目,建议同最近的供应商或本公司联系。

2. 质量保证

如在此手册列明的正常条件下使用、储存该产品,公司将提供12个月的质量保

证。

3. 性能特点

3-1.性能:

显示方式 : 半透、正显

TN LCD 显示颜色 : 显示点: 黑色

背景:

灰色

显示形式 : 16 (C)×1 (L) 字符

输入数据 : 来自MPU 的8位并行数据接口 驱动路数 :

1/16 Duty

视 角 :

6 点

CGROM 容量:

160 5×8dots character fonts generator (CG) ROM

CGRAM 容量: 8 5×8dots character fonts generator(CG)RAM

3-2.机械性能:

项 目

规 格

单位 外形尺寸 85.0(W)

×30.0(H)×14.5 Max.(T)

mm

视 域 64.5(W)×17.0(H) mm 显示图形域 57.7(W)×10.2(H) mm 字符尺寸 2.95 (W)×4.75 (H)

mm

点间距 0.55(W)×0.55(H) mm 点尺寸 0.6(W)×0.6(H) mm

重量 Approx. g

第 4 页 共30页

3-3. 极限参数:

项 目 符 号 最小值 最大值 单位 注 释

逻辑 Vdd -0.3 5.5 V

电源电压

LCD 驱动 Vdd – Vee Vdd-15.0Vdd+0.3V

输入电压 Vi - Vdd V 操作温度 Top 0 50 ℃ 储存温度 Tstg -20 60 ℃ 湿度 — — 90 %RH 注释:倘若在超过上述极限参数的条件下使用,极易永久性地损坏本模块,因而建议用户在下列表中的电性能参数范围内,使用本模块。 3-4. 电气特性:

3-4-1电气参数 (Vcc=5v ±5%,Ta=+25℃)

项 目 符 号 条 件 最小值典型值 最大值 单 位

逻辑 Vdd 4.5 5.0 5.5

电源电压 LCD 驱动 Vdd–Vee

0 4.5 5.0 高电平 Vih 0.7Vdd — Vdd

输入电压 低电平 Vil -0.3 — 0.55 高电平 V oh Ioh=1mA 0.75Vdd — —

输出电压

低电平 V ol Iol=1mA — — 0.2Vdd

V

频 率 Fflm Rf=91k Ω±2% 190 270 350 Hz 功 耗

逻辑 Idd — 1.2 1.4 mA

注释:<1> 驱动路数=1/16 <2> 所有点在静态条件下

3-5. 光电特性

项 目 符号 温度 条件 最小值典型值最大值 单位 注释 LCD 驱动电压

(推荐电压)

V op 25℃ φ=0°,θ=0°— 5.0 — V 1,2,5

-20℃ — 1500 2000 上升时间 tr 25℃ — 150 200

-20℃ — 3000 3500

应 时间 衰退时间 td 25℃ φ=0°,θ=0°— 200 250

mS 1,3,5

垂直 -35 — 35

视 角 Δφ 25℃ 水平 -30 — 30

deg. 1,4,5

对比度 K 25℃ φ=0°,θ=0° 2.0 5.0 — — 1,5,6

注释:<1> φ和θ的定义<2> 在此电压范围内能获得对比度大于2(k≥2)

注释:<6> 对比度定义(K)

第 5 页共30页

第 6 页 共30页

正显 负显

非选择点的亮度(B2) 选择点的亮度(B1)

4. 外形图

第 7 页 共30页

5. I/O 接口特性

5-1. I/O 接口表:

管脚号 符号 功 能

1

Vdd 电源电压(+5V) 2 Vss 电源地 3 Vee LCD 驱动电压(可调)

4 RS

输入口,输入MPU 选择模块内部寄存器类型信号: RS=0,当MPU 进行写模块操作,指向指令寄存器;

当MPU 进行读模块操作,指向地址计数器;

RS=1,无论MPU 读操作还是写操作,均指向数据寄存器

第 8 页 共30页

5 R/W

输入口,输入MPU 选择读/写模块操作信号:

R/W=0 读操作;R/W=1 写操作

6 E

输入口,输入MPU 对于模块上半屏读/写操作使能信号:

读操作时,信号下降沿有效;写操作时,高电平有效 7~14 DB0~DB7

输入/输出口,MPU 与模块之间的数据传送通道

5-2.时序及时序图: 5-2-1 写操作

项 目

符号 条件 最小值最大值 单位

E 周期 t cycE 1000 — E 脉宽(高电平) PW EN 450 — E 上升/下降时间 t Er ,t Ef — 25 地址设置时间(RS ,R/WtoE )t AS 140 — 地址保持时间 t AH 10 —

数据设置时间 t DSW 195 320 数据保持时间 t H Vdd=5V ±5%

Vss=0V Ta=25℃ 10 —

ns

第 9 页 共30页

5-2-2读操作

项 目

符号 条件 最小值最大值 单位

E 周期 t cycE 1000 — E 脉宽(高电平) PW EN 450 — E 上升/下降时间 t Er ,t Ef — 25 地址设置时间(RS ,R/WtoE )t AS 140 — 地址保持时间 t AH 10 —

数据延迟时间 t DDR — 320 数据保持时间 t DHR Vdd=5V ±5%

Vss=0V Ta=25℃ 20 —

ns

5-3. 电源连接图

LCD 模块

+5V GND 0.5V

第 10 页 共30页

使用内部复位电路供电参数

项 目

符号 条件 最小值最大值 单位 供电上升时间 t rdd 0.1 10

供电下降时间 t OFF 1 —

ms

注释:如果供电电压低于4.5v ,内部复位电路可能不会正常工作,在这种情况下,建 5-4模块显示特性:

本模块适宜与4位或者8位MPU 接口,接口由状态标志位BF 控制,MPU 访问

模块时,首先应判断状态标志位BF 。在电源Vdd=+5V 情况下,模块与MPU 通讯速度可以达到2MHz ;

本模块提供5X8点阵两种字符结构显示模式,用户可以通过指令设置方便地进

行选择;

本模块提供了80字节容量的显示缓冲区,最多可以显示80个字符(20CX4L );

同时提供了9,920位容量240个字符的CGROM ,其中包含208个5X8点阵的字符,32个5X10点阵的字符;CGRAM 的容量为64X8位,用户可以使用它来存储自己定义的8个5X8点阵的字符或者4个5X10点阵的字符的字模数据; 本模块字符在LCD 显示屏上的显示位置与该字符的字符代码在显示缓冲区内的

存储地址一一对应;

本模块通过指令设置来选择占空比(

duty )周期,选择参数如下:

单行5X8点阵字符带光标显示:1/8 单行5X10点阵字符带光标显示:1/11

双行5X8点阵字符带光标显示:1/16

本模块提供了较为丰富的指令设置:

清显示;光标回原点;显示开/关;光标开/关;显示字符闪烁;光标移

位;显示移位

通过选择相应的指令设置,用户可以实现多种字符显示样式;

本模块提供了内部上电自动复位电路,当外加电源电压超过+4.5v 时,初始化模

块,设置默认显示状态; 本模块采用低功耗CMOS 设计

5-5 软硬件注解

5-6-1 模块组件内部结构

从5-4的电路图解中可以看出,模块的内部结构主要由LCD 显示屏(LCD PANEL)、控制器S6A0069、列驱动器S6A0065和偏压产生电路组成。

LCD显示屏为16路COMMON 200路SEGMENT 组成的点阵,可以显示40(character)X2(line)个5X8点阵的字符。

列驱动器S6A0065与控制器S6A0069配套使用,它接收来自控制器的振荡、帧同步输出、串行输出的数据和移位及锁存脉冲,产生16路COMMON的60列交流扫描驱动信号。

控制器S6A0069接收来自MPU的指令和数据,控制着整个模块的工作,由CGROM、CGRAM和DDRAM等字符存储区域、以及与MPU和列驱动器S6A0065的I/O接口、指令寄存和译码机构、地址计数器等部分组成。在控制器的控制下,模块通过数据总线DB0~DB7和E、R/W、RS三个输入控制端与MPU接口。这三根控制线按照规定的时序相互协调作用,使控制器通过数据总线DB接收MPU发送来的指令和数据,从CGROM中找到欲显示字符的字符码,送入DDRAM,在LCD显示屏上与DDRAM存储单元对应的规定位置显示出该字符。控制器还可以根据MPU的指令,实现字符的显示、闪烁和移位等显示效果。

控制器主要由指令寄存器IR、数据寄存器DR、忙标志BF、地址计数器AC、DDRAM、CGROM、CGRAM以及时序发生电路组成:

指令寄存器(IR)和数据寄存器(DR)

本模块内部具有两个8位寄存器:指令寄存器(IR)和地址寄存器(DR)。用户可以通过RS和R/W输入信号的组合选择指定的寄存器,进行相应的操作。下表中列出了组合选择方式。

RS R/W 说明

0 将DB0~DB7的指令代码写入指令寄存器中

1 分别将状态标志BF和地址计数器(AC)内容读到DB7和 DB6~DB0

0 将DB0~DB7的数据写入数据寄存器中,模块的内部操作自动将数据写到DDRAM或者CGRAM中

1

1 将数据寄存器内的数据读到DB0~DB7,模块的内部操作自动将DDRAM或者CGRAM中的数据送入数据寄存器中

指令寄存器IR,内部存储DDRAM和CGRAM中的数据显示的指令代码和地址信息,只能由MPU对其执行写操作;

数据寄存器DR,内部暂时存储MPU与模块内部DDRAM和CGRAM之间的传送

第 11 页共30页

第 12 页 共30页

数据,内部操作使DR 与DDRAM 或者CGRAM 之间的数据传送自动进行:

DDRAM (CGRAM ) 忙标志位BF

忙标志BF=1时,表明模块正在进行内部操作,此时不接受任何外部指令和数据。当RS=0、R/W=1以及E 为高电平时,BF 输出到DB7。每次操作之前最好先进行状态字检测,只有在确认BF=0之后,MPU 才能访问模块; 地址计数器(AC )

AC 地址计数器是DDRAM 或者CGRAM 的地址指针。随着IR 中指令码的写入,指令码中携带的地址信息自动送入AC 中,并行做出AC 作为DDRAM 的地址指针还是CGRAM 的地址指针的选择。

AC 具有自动加1或者减1的功能。当DR 与DDRAM 或者CGRAM 之间完成一次数据传送后,AC 自动会加1或减1。在RS=0、R/W=1且E 为高电平时,AC 的内容送到DB6~DB0;

显示数据寄存器(DDRAM )

DDRAM 存储显示数据,容量为80X8位共80个字符。DDRAM 地址与LCD 显示屏上的显示位置的对应关系如下:

一行显示

字符列位置 1 2 3 …………………………….78 79 80 DDRAM 地址 00H

01H

03H

…………………………….

4DH 4EH 4FH

执行显示移位操作时,对应的DDRAM 地址也发生移位,以每行8个字符的显示为例,移位前后的地址对应关系如下:

字符列位置 1 2 3 4 5 6 7 8 DDRAM 地址00H 01H 02H 03H 04H 05H 06H 07H

左移一位

1 2 3 4 5 6 7 8 01H

02H 03H 04H 05H 06H 07H 08H

右移一位

1 2 3 4 5 6 7 8 4fH

00H 01H 02H 03H 04H 05H 06H

两行显示

字符列位置 1 2 3 ……………………………. 38 39 40 DDRAM地址第一行00H01H03H ……………………………. 25H 26H 27H DDRAM地址第二行40H41H42H ……………………………. 65H 66H 67H 执行显示移位操作时,对应的DDRAM地址也发生移位,以每行8个字符的显示

为例,移位前后的地址对应关系如下:

字符列位置 1 2 3 4 5 6 7 8 DDRAM地址第一行00H01H 02H03H04H05H06H 07H

DDRAM地址第二行40H41H 42H43H44H45H46H 47H

左移一位

1 2 3 4 5 6 7 8

01H02H03H 04H05H06H07H08H

41H42H43H 44H45H46H47H48H

右移一位

1 2 3 4 5 6 7 8

27H00H01H 02H03H04H05H06H

67H40H41H 42H43H44H45H46H

字符发生器ROM

在CGROM中,模块已经以8位字符码的形式,生成了5X8点阵或者5X10点阵的字符字模组,其中包含5X8点阵的字符字模208组(一个字符对应一组字模),5X10

点阵的字符字模32组。字符字模是显示字符的5X8点阵或者5X10点阵的位图数据,

每一组字符字模都有一个由其在CGROM中存放地址的高八位数据组成的字符码对

应。字符码地址范围为00H~FFH,其中00H~07H字符码与用户在CGRAM中生成的

自定义字符的字模组相对应。

字符发生器RAM

在CGRAM中,用户可以生成自定义字符的字模组。对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组。相对应的字符码从CGROM的00H~07H

范围内选择。

第 13 页共30页

CGROM中,字符码与字符字模之间的对应关系表

第 14 页共30页

5X8点阵字符的CGROM地址、字符字模和字符码三者之间的关系示意图例如下:

注释:

高八位CGROM地址A11~A4组合形成字符码;

低四位CGROM地址A3~A0定义字模数据存储行地址;

数据O4~O0为字符字模数据;

必须将高三位数据O5~O7赋值为0;

对应数据1的位置为显示位(黑);

对于5X8点阵字体,第九行以下(包括第九行)数据应赋值为0;

用户自定义5X8点阵字符的CGRAM地址、字符码和字符字模间关系示意图例如下:

注释:

字符码0~2位与CGRAM地址3~5位对应;

CGRAM地址0~2位生成字模数据行位置。第八行是光标位置,因此构成字符字模数据时,在设置光标显示的情况下,应赋值为0;如果赋值为1,不论光标显示与否,第八行均处于显示状态;

字符字模数据0~4位的赋值状态构成了自定义字符的位图数据;

从图中可以看出,字符码3位的赋值状态并不影响用户自定义字符在CGROM 中的字符码,用户自定义字符码的范围为00H~07H或者08H~0FH,也就是说字

第 15 页共30页

符码00H与08H对应同一组用户自定义字符字模;

CGRAM数据为1时,处于显示状态;

5-6-2 指令说明

由于MPU可以直接访问模块内部的IR和DR,作为缓冲区域,IR和DR在模块进行内部操作之前,可以暂存来自MPU的控制信息。这样就给用户在MPU和外围控制设备的选择上,增加了余地。模块的内部操作由来自MPU的RS、R/W、E以及数据信号DB决定,这些信号的组合形成了模块的指令。

本模块向用户提供了11条指令,大致可以分为四大类:

模块功能设置,诸如:显示格式、数据长度等;

设置内部RAM地址;

完成内部RAM数据传送;

完成其他功能;

一般情况下,内部RAM的数据传送的功能使用最为频繁,因此,RAM中的地址指针所具备的自动加一或减一功能,在一定程度上减轻了MPU编程负担。此外,由于数据移位指令与写显示数据可同时进行,这样用户就能以最少系统开发时间,达到最高的编程效率。

这里值得一提的是,在每次访问模块之前,MPU应首先检测忙标志BF,确认BF=0后,访问过程才能进行。

第 16 页共30页

Clear display 清显示

指令码:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 0 0 0 0 0 0 1 清显示指令将空位字符码20H送入全部DDRAM地址中,使DDRAM中的内容全部

清除,显示消失;地址计数器AC=0,自动增1模式;显示归位,光标或者闪烁回到

原点(显示屏左上角);但并不改变移位设置模式;

Return home 归位

指令码:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 0 0 0 0 0 1 * 归位指令置地址计数器AC=0;将光标及光标所在位的字符回原点;但DDRAM中的

内容并不改变;

Entry mode set 设置输入模式

指令码:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 0 0 0 0 1 I/D S I/D:字符码写入或者读出DDRAM后DDRAM地址指针AC变化方向标志:I/D=1,完成一个字符码传送后,AC自动加1;

I/D=0,完成一个字符码传送后,AC自动减1;

S:显示移位标志:

S=1,将全部显示向右(I/D=0)或者向左(I/D=1)移位;

S=0,显示不发生移位;

S=1时,显示移位时,光标似乎并不移位;此外,读DDRAM操作以及对CGRAM

的访问,不发生显示移位;

Display on/off control 显示开/关控制

指令码:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 0 0 0 1 D C B D:显示开/关控制标志:D=1,开显示;D=0,关显示;

关显示后,显示数据仍保持在DDRAM中,立即开显示可以再现;

C:光标显示控制标志:C=1,光标显示;C=0,光标不显示;

不显示光标并不影响模块其它显示功能;显示5X8点阵字符时,光标在第八行显

示,显示5X10点阵字符时,光标在第十一行显示;

B:闪烁显示控制标志:B=1,光标所指位置上,交替显示全黑点阵和显示字符,产

生闪烁效果,Fosc=250kHz时,闪烁频率为0.4ms左右;通过设置,光标可以与其所

第 17 页共30页

指位置的字符一起闪烁;

Cursor or display shift 光标或显示移位

指令码:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 0 0 1 S/C R/L * *

光标或显示移位指令可使光标或显示在没有读写显示数据的情况下,向左或向右移动;运用此指令可以实现显示的查找或替换;在双行显示方式下,第一行和第二行会同时移位;当移位越过第一行第四十位时,光标会从第一行跳到第二行,但显示数据只在本行内水平移位,第二行的显示决不会移进第一行;倘若仅执行移位操作,地址计数器AC的内容不会发生改变;

S/C R/L 说明

光标向左移动,AC自动减1

0 0

光标向右移动,AC自动加1

0 1

光标和显示一起向左移动

1 0

光标和显示一起向右移动

1 1

Function set 功能设置

指令码:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 0 1 DL N F * *

功能设置指令设置模块数据接口宽度和LCD显示屏显示方式,即MPU与模块接口数据总线为4位或者是8位、LCD显示行数和显示字符点阵规格;所以建议用户最好在执行其它指令设置(读忙标志指令除外)之前,在程序的开始,进行功能设置指令的执行;

DL:数据接口宽度标志:DL=1,8位数据总线DB7~DB0;DL=0,4位数据总线DB7~DB4,DB3~DB0不用,使用此方式传送数据,需分两次进行;

N:显示行数标志;

F:显示字符点阵字体标志;

N F 显示行数字符点阵字体驱动路数备注

0 0 1 5X8 1/8

0 1 1 5X10 1/11

1 *

2 5X8 1/16 模块不能双行显示5X10点阵字符字体

Set CGRAM address CGRAM地址设置

指令码:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 1 A CG5A CG4A CG3A CG2A CG1A CG0

CGRAM地址设置指令设置CGRAM地址指针,它将CGRAM存储用户自定义显示

第 18 页共30页

字符的字模数据的首地址A CG5~A CG0送入AC中,于是用户自定义字符字模就可以写

入CGRAM中或者从CGRAM中读出;

Set DDRAM address DDRAM地址设置

指令码:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 1 A DD6A DD5A DD4A DD3A DD2A DD1A DD0 DDRAM地址设置指令设置DDRAM地址指针,它将DDRAM存储显示字符的字符

码的首地址A DD6~A DD0送入AC中,于是显示字符的字符码就可以写入DDRAM中

或者从DDRAM中读出;

值得一提的是:在LCD显示屏一行显示方式下,DDRAM的地址范围为:00H~4FH;

两行显示方式下,DDRAM的地址范围为:第一行00H~27H,第二行40H~67H;

Read busy flag and address 读忙标志BF和AC

指令码:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 1 BF AC6 AC5 AC4 AC3 AC2 AC1 AC0 当RS=0和R/W=1时,在E信号高电平的作用下,BF和AC6~AC0被读到数据总线DB7~DB0的相应位;

BF:内部操作忙标志,BF=1,表示模块正在进行内部操作,此时模块不接收任何外

部指令和数据,直到BF=0为止;

AC6~AC0:地址计数器AC内的当前内容,由于地址计数器AC被CGROM、CGRAM

和DDRAM的公用指针,因此当前AC内容所指区域由前一条指令操作区域决定;同时,只有BF=0时,送到DB7~DB0的数据AC6~AC0才有效;

Write data to CGRAM or DDRAM 写数据到CGRAM或DDRAM

指令码:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

1 0 D7 D6 D5 D4 D3 D

2 D1 D0 写数据到CGRAM或DDRAM指令,是将用户自定义字符的字模数据写到已经设置

好的CGRAM的地址中,或者是将欲显示字符的字符码写到DDRAM中;欲写入的

数据D7~D0首先暂存在DR中,再由模块的内部操作自动写入地址指针所指定的CGRAM单元或者DDRAM单元中;

Read data from CGRAM or DDRAM 从CGRAM或DDRAM中读数据

指令码:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

1 1 D7 D6 D5 D4 D3 D

2 D1 D0 从CGRAM或DDRAM中读数据指令,是从地址计数器AC指定的CGRAM或者DDRAM单元中,读出数据D7~D0;读出的数据D7~D0暂存在DR中,再由模块的

第 19 页共30页

第 20 页 共30页

内部操作送到数据总线DB7~DB0上;需要注意的是,在读数据之前,应先通过地址计数器AC 正确指定读取单元的地址;

5-6-3 内部复位电路初始化

本模块设有内部复位电路,上电后,当电源电压超过+4.5v 时,自动对模块进行初始化。此期间,忙标志BF=1,直到初始化结束后,忙标志BF 才为0。初始化大约持续10ms 左右。

上电复位初始化,对模块进行了下列指令的操作:

清显示;

功能设置:

DL=1:8位数据接口; N=0:一行显示; F=0:5X8点阵字符字体;

显示开/关控制: D=0:关显示; C=0:不显示光标; B=0:关闪烁;

输入模式设置: I/D=1:AC 自动加1; S=0:不移位;

需要说明的是,倘若供电电源达不到要求,模块内部复位电路非正常操作,上电复位初始化就会失败。此时,建议用户通过指令设置对模块进行初始化。

5-7 MPU 接口

本模块可以利用总线模式,直接与4位或8位MPU 接口。在控制信号E 高电平或下降沿的作用下,模块通过区分控制信号RS 和R/W 的组合形式,来区分数据总线DB7~DB0上传送的指令和数据。数据总线DB7~DB0是MPU 访问模块和与模块之间信息交换的数据通道。

E RS R/W

说 明

1 0 将数据总线DB7~DB0上的指令码写入指令寄存器IR 中

1→0 0

1 读BF 和AC 到DB7~DB0 1 0 将DB7~DB0上的数据写到CGRAM 或者DDRAM 中

1→0 1

1 从CGRAM 或DDRAM 中读数据到DB7~DB0

LCD1602汇编显示程序

;1602显示ABC LCD_RS EQU P2.5 LCD_RW EQU P2.6 LCD_EN EQU P2.7 LCD_DATA EQU P3 ;----------------- ORG0000H JMP START ORG0030H ;----------------- LCD: CALL LCD_INIT MOV A, #80H CALL LCD_WCMD MOV A, #'A' CALL LCD_WDATA MOV A, #'B' CALL LCD_WDATA MOV A, #'C' CALL LCD_WDATA AJMP$ ;---------------- DELAY5MS: MOV R6, #10 DL1:DJNZ R7, $ DJNZ R6, DL1 RET ;---------------- LCD_INIT: CALL DELAY5MS MOV A, #38H CALL LCD_WCMD CALL DELAY5MS

CALL DELAY5MS MOV A, #06H CALL LCD_WCMD MOV A, #01H CALL LCD_WCMD MOV A, #0CH CALL LCD_WCMD RET ;===================================== LCD_WCMD: CALL CHECKBUSY CLR LCD_RS JMP W_LCD ;---------------- LCD_WDATA: CALL CHECKBUSY SETB LCD_RS W_LCD: CLR LCD_RW MOV LCD_DATA, A SETB LCD_EN NOP CLR LCD_EN RET ;---------------- CHECKBUSY: PUSH ACC MOV LCD_DATA, #255 CLR LCD_RS SETB LCD_RW BUSYLOOP: SETB LCD_EN NOP MOV A, LCD_DATA CLR LCD_EN JB ACC.7, BUSYLOOP POP ACC RET

lcd1602显示程序

lcd1602显示程序 液晶显示简介①液晶显示原理 液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。 ②液晶显示器的分类 液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(StaTIc)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(AcTIve Matrix)三种。 ③液晶显示器各种图形的显示原理: 线段的显示 点阵图形式液晶由MN个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共168=128个点组成,屏上6416个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。 字符的显示 用LCD显示一个字符时比较复杂,因为一个字符由68或88点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为1,其它的为0,为1的点亮,为0的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显

已经采用过-LCD1602显示字符和(RAM)数字的汇编程序

单片机LCD1602显示字符和数字的汇编程序(无聊原创) 1,单片机和LCD1602的连线,和程序结果显示如下图: 2,LCD第一行显示字符XIAORENGUANG第二行显示RAM中40H到46H中的数字。程序如下: ORG 0000H AJMP MAIN RS EQU P2.4 RW EQU P2.5 E EQU P2.6 MAIN: MOV SP,#60H MOV 40H,#01H MOV 41H,#02H MOV 42H,#03H MOV 43H,#04H MOV 44H,#05H MOV 45H,#06H MOV 46H,#07H ACALL DD1 ;DD1是LCD初始化

MOV DPTR,#TABLE1 ACALL DD2;DD2是LCD第一行显示TABLE1 ACALL PPP ;PPP是LCD第二行显示RAM中40H到46H中的数据 SJMP $ DD1: MOV p0,#01H ;清屏 CALL ENABLE MOV p0,#38H ;显示功能 CALL ENABLE MOV p0,#0FH ;显示开关控制 CALL ENABLE MOV p0,#06H ;+1 CALL ENABLE RET DD2: MOV p0,#80H;第一行的开始位置 cALL ENABLE CALL WRITE1;到TABLE1取码? RET DD3: MOV p0,#0C0H;第二行的位置 CALL ENABLE CALL WRITE1;到TABLE2 取码 RET ENABLE: CLR RS ;送命令 CLR RW CLR E CALL DELAY SETB E RET WRITE1: MOV R1,#00H ;显示table中的值 A1: MOV A,R1;到table取码 MOVC A,@A+DPTR call wRITE2 ;显示到lcd INC R1 CJNE A,#00H,A1 ;是否到00h RET WRITE2:MOV p0,A ;显示 SETB RS CLR RW CLR E CALL DELAY SETB E RET

1602液晶显示计算器电路图及程序

#include #include #include #include unsigned char code Error[]={"error"}; unsigned char code Systemerror[]={"system error"}; unsigned char code Lcd[]={"lcd calculate"}; char str[16]; sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2; sbit BF=P0^7; /*********************** 函数功能:延时1ms ***********************/ void delay1ms() { unsigned char i,j; for (i=0;i<10;i++) for (j=0;j<33;j++) ; } /************************ 函数功能:延时n毫秒 入口参数:n ************************/ void delaynms(unsigned char n) { unsigned char i; for (i=0;i

LM1602液晶显示程序

#include #define uchar unsigned char #define uint unsigned int unsigned char code tab1[16]=" Now time is: "; unsigned char tab2[16]=" 00:00:00 "; uchar second = 30; uchar minite = 11; uchar hour = 15; sbit RS = P2^5; sbit RW = P2^6; sbit E = P2^7; void delay() { int i,j; for(i=0; i<=100; i++) for(j=0; j<=20; j++); } void Write_Command(uchar command) { P0 = command; RS = 0; RW = 0; E = 1; delay(); E = 0; } void Write_Data(uchar Data) { P0 = Data; RS = 1; RW = 0; E = 1; delay(); E = 0; } void LCD_Init(void)//初始化 { Write_Command(0x01); Write_Command(0x38);

Write_Command(0x0c); Write_Command(0x06); } void LCD_Printfc(uchar hang,uchar lie,uchar sign) { uchar a; if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie; Write_Command(a); Write_Data(sign); } void LCD_Display(uchar *tab1) { uchar i; Write_Command(0x80); for(i=0; i<16; i++) { Write_Data(tab1[i]); delay(); } /* Write_Command(0xc0); for(i=0; i<16; i++) { Write_Data(tab2[i]); delay(); }*/ } void time_view(void) { if(second == 60) { minite ++; second = 0; } if(minite == 60) { hour++; minite = 0; } if(hour == 24)

51单片机控制1602LCD显示程序

LCD显示电路 #include sbit RS=P3^7; //寄存器选择位,将RS位定义为P2.0引脚 sbit RW=P3^6; //读写选择位,将RW位定义为P2.1引脚 sbit E=P2^7; //使能信号位,将E位定义为P2.2引脚 sbit BF=P0^7; //忙碌标志位,将BF位定义为P0.7引脚 #define Lcd_Data P0 #include #include //包含_nop_()函数定义的头文件 unsigned char code string1[ ]= {0x77,0x75,0x20,0x79,0x61,0x6E,0x67,0x20,0x79,0x61,0x6E,0x67,0x20,0x20,0x20,0x20}; //第一行显示的字符 void Lcd_delay1ms() // 函数功能:延时1ms //注:不同单片机不同晶振需要对此函数进行修改 { unsigned char i,j; for(i=0;i<90;i++) for(j=0;j<33;j++); } void Lcd_delay(unsigned int n) // 函数功能:延时若干毫秒,入口参数:n { unsigned int i; for(i=0;i

/***************************************************** 函数功能:判断液晶模块的忙碌状态 返回值:result。result=1,忙碌;result=0,不忙 ***************************************************/ bit Lcd_BusyTest(void) { bit result; RS=0; //根据规定,RS为低电平,RW为高电平时,可以读状态 RW=1; E=1; //E=1,才允许读写 _nop_(); //空操作 _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 result=BF; //将忙碌标志电平赋给result E=0; return result; } /***************************************************** 函数功能:将模式设置指令或显示地址写入液晶模块 入口参数:dictate ***************************************************/ void Lcd_WriteCom (unsigned char dictate) { while(Lcd_BusyTest()==1); //如果忙就等待 RS=0; //根据规定,RS和R/W同时为低电平时,可以写入指令RW=0; E=0; //E置低电平(写指令时就是让E从0到1发生正跳变,所以应先置"0" _nop_(); _nop_(); //空操作两个机器周期,给硬件反应时间 Lcd_Data=dictate; //将数据送入P0口,即写入指令或地址 _nop_(); _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 E=1; //E置高电平 _nop_(); _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令} /***************************************************** 函数功能:指定字符显示的实际地址 入口参数:x

LCD1602字符测试显示程序与仿真

#include "reg51.h" #include "intrins.h" #define uchar unsigned char #define uint unsigned int uchar code table1 []={" WELCOME "}; //欢迎显示,包括空格在内<=16 uchar code table2 []={"Name: "};//欢迎显示,包括空格在内<=16 //************管脚定义************************ sbit lcd_rs = P3^0; //液晶数据命令选择端 sbit lcd_en = P3^1; //液晶使能 //************参数定义************************ uint tvalue;//温度值 uchar tflag;//温度正负标志 uchar data disdata[5]; //************子函数定义************************ void delay(uchar z); //delay延时子程序 void init_lcd(); //LCD1602初始化函数 void write_com(uchar com); //LCD1602写指令函数 void write_data(uchar date); //LCD1602写数据函数 void lcd1602_display(uchar *q,uchar *p);//LCD1602显示函数 void welcome_1(); //LCD1602显示欢迎函数1 //************主函数************************ void main() { welcome_1(); delay(200); while(1); } //************delay延时子程序************************ void delay(uchar z)

【51单片机】温度传感器DS18B20程序-LCD1602显示

仿真截图: //仿真文件网盘地址: //程序: #include #include #define uchar unsigned char #define uint unsigned int sbit P00 = P0^0; sbit P01 = P0^1; sbit P02 = P0^2; sbit P03 = P0^3; sbit P04 = P0^4; sbit P05 = P0^5; sbit P06 = P0^6; sbit P07 = P0^7; sbit P10 = P1^0; sbit P11 = P1^1; sbit P12 = P1^2; sbit P13 = P1^3; sbit P14 = P1^4;

sbit P15 = P1^5; sbit P16 = P1^6; sbit P17 = P1^7; sbit P20 = P2^0; sbit P21 = P2^1; sbit P22 = P2^2; sbit P23 = P2^3; sbit P24 = P2^4; sbit P25 = P2^5; sbit P26 = P2^6; sbit P27 = P2^7; sbit P30 = P3^0; sbit P31 = P3^1; sbit P32 = P3^2; sbit P33 = P3^3; sbit P34 = P3^4; sbit P35 = P3^5; sbit P36 = P3^6; sbit P37 = P3^7; //****** DS18B20 ****** #define DQ P17 /*************精确延时函数*****************/ void delay10us(void) //误差0us { unsigned char a,b; for(b=1;b>0;b--) for(a=2;a>0;a--); } void delay20us(void) //误差0us { unsigned char a,b; for(b=1;b>0;b--) for(a=7;a>0;a--); } void delay30us() //误差0us { unsigned char a,b; for(b=3;b>0;b--) for(a=3;a>0;a--); }

DHT11温湿度传感器51单片机在LCD1602显示程序

//51单片机控制温湿度传感器DHT11LCD1602 YL-9最小系统。 # include # include typedef unsigned char BYTE; typedef unsigned int WORD; #define uint unsigned int #define uchar unsigned char sbit io=P1^0;//dht11data端接单片机的P1^0口// sbit rw=P2^1;//一下三行是设置lcd1602的使能端// sbit rs=P2^0; sbit ep=P2^2; typedef bit BOOL;//此声明一个布尔型变量即真或假// uchar data_byte; uchar RH,RL,TH,TL;

//***************延时函数************************************* void delay(uchar ms) //延时模块// { uchar i; while(ms--) for(i=0;i<100;i++); } void delay1()//一个for循环大概需要81us 12MHz8us

{ uchar i; for(i=0;i<1;i++); } //*************************************************************** //lcd模块// BOOL lcd_bz()//测试lcd'1'.'0' { BOOL result; rs=0; // 读忙信号 rw=1;

基于51单片机的1602液晶显示温度和时间的C程序

//液晶显示温度 #include "AT89X52.H" #define Ddata P0 sbit RS=P2^7; //命令数据控制端 sbit RW=P2^6; //读写选择端 sbit LCDE=P2^5; //液晶使能端 sbit DQ=P2^0; //ds18b20与单片机连接口 #define uchar unsigned char #define uint unsigned int unsigned char hour=0,min=0,sec=0; //定义初值 unsigned int count=0; unsigned char line1[16]={" temp: "}; //16个字符 unsigned char line2[16]={" time: 00:00:00"}; //16个字符 unsigned char tab[]={'0','1','2','3','4','5','6','7','8','9'}; //数组 uchar data disdata[5]; uint tvalue; //温度值 uchar tflag; //温度正负标志 void time(); /*************************lcd1602程序**************************/ void delay1ms(unsigned int ms)//延时1毫秒(不够精确的) { unsigned int i,j; for(i=0;i

void delay5ms()//延时5毫秒(不够精确的) { unsigned int i; for (i=0;i<1000;i++); } void delay50us() { register int i; for (i=0;i<20;i++); } void delay() {unsigned char m,n; for(m=255;m>0;m--) for(n=255;n>0;n--); } void wr_com(unsigned char comm) //********写控制字符程序E=1 RS=0 RW=0 **********// { LCDE=0; //使能端 RS=0; //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。 RW=0; //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。LCDE=1; Ddata=comm; RS=0; RW=0; LCDE=0;

51单片机 1602显示程序 C语言

/****************************************************************************** ** * 描述: LCD1602 滚动显示* * 显示方式:* * 1、从左到右逐字显示,闪动二次,清屏。* * 2、再从右到左逐字显示,闪动二次,清屏。* * 3、周期性地重复上述显示方式。* ******************************************************************************* */ #include #include typedef unsigned char BYTE; typedef bit BOOL; sbit LCD_RS = P2^6; sbit LCD_RW = P2^5; sbit LCD_EP = P2^7; BYTE code dis1[] = {" WELCOME TO "}; BYTE code dis2[] = {" https://www.doczj.com/doc/c08991178.html, "}; BYTE code dis3[] = {" OT EMOCLEW "}; BYTE code dis4[] = {" MOC.NIHCERP.WWW "}; delay(int ms) { // 延时子程序 int i; while(ms--) { for(i = 0; i< 250; i++) { _nop_(); _nop_(); _nop_(); _nop_(); } } } BOOL lcd_bz() { // 测试LCD忙碌状态 BOOL result;

LCD1602显示全部字库字符

LCD1602显示全部字库字符、看门狗定时器测试 LCD1602液晶内含有192个字符字库,这个程序是分6屏进行显示,整个显示过程长约7秒,看门狗定时器设置时间为8.38秒,刚好显示完全部字符,修改看门狗就可以看到在显示中途重启,比较直观 LCD_E BIT P3.4 ;LCD片选 LCD_RS BIT P3.5 ;指令、数据位 LCD_RW BIT P3.6 ;读、写位 PORT EQU P0 ;端口定义 WDT_COUNT EQU 0E1H ;看门狗 START: LCALL LCD_INIT LCALL WDT_INIT MOV A,#01H ;清屏 LCALL WR_CMD DISP_LOOP: MOV R0,#06H ;循环计数器 MOV R1,#80H ;LCD地址计数器 MOV R2,#00H ;字符表指针计数器 MOV DPTR,#TAB WR_DAT_LOOP: MOV A,R1 ;地址命令 LCALL WR_CMD INC R1 ;地址加一 MOV A,R2 ;表指针 MOVC A,@A+DPTR LCALL WR_DA T LCALL DELAY100MS INC R2 ;表指针加一 CJNE R1,#90H,BIJIAO ;字符是否到16 MOV R1,#0C0H ;到16,换地址 BIJIAO: CJNE R1,#0D0H,WR_DAT_LOOP ;字符数是否到32 MOV R1,#80H ;地址回归 LCALL DELAY1S MOV A,#1B ;清屏 LCALL WR_CMD DJNZ R0,WR_DA T_LOOP MOV WDT_COUNT,#00110111B LJMP DISP_LOOP LCD_INIT: MOV A,#111000B ;8位总线 LCALL WR_CMD MOV A,#10B ;数据指针清零

LCD1602原理及显示程序

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

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

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 通道 A/D 转换模块 ADC ,1 个 8 通道脉冲宽度调制模块 PWM ,输入/输出数字 I/O 口。

LCD1602简单显示程序(单片机)

#include #define uchar unsigned char #define uint unsigned int sbit LCD_E=P3^5; //定义接口 sbit LCD_RW=P3^6; sbit LCD_RS=P3^7; #define LCD_Data P1 //数据接口 uchar up[]={"IvU,hupeixian"}; uchar code down[]={"_by fu "} /*************************延时函数*****************************/ void Delay_ms(uint time) { uint i,j; for(i = 0;i < time;i ++) for(j = 0;j < 930;j ++); } /**********************检测状态************************************/ uchar LCD_ReadStatus(void) { LCD_Data = 0xFF; LCD_RS = 0; LCD_RW = 1; LCD_E = 1; LCD_E = 1; LCD_E = 0;

while (LCD_Data & 0x80); //检测忙信号 return(LCD_Data); } /************************写数据***********************************/ void LCD_WriteData(uchar WDLCD) { LCD_ReadStatus();//检测忙 LCD_Data = WDLCD LCD_RS = 1; LCD_RW = 0; LCD_E = 1;//若晶振速度太高可以在这后加小的延时 LCD_E = 1;//延时 LCD_E = 0; } /************************写指令********************************/ void LCD_WriteCommand(uchar WCLCD,BuysC) //BuysC为0时忽略忙检测{ if (BuysC) LCD_ReadStatus(); //根据需要检测忙 LCD_Data = WCLCD; LCD_RS = 0; LCD_RW = 0; LCD_E = 1; LCD_E = 1; LCD_E = 0; }

LCD1602的简单显示程序

/*========================================================= 1602液晶显示的实验例子 ------------------------------------------------- | DB4-----P0.4 | RW-------P2.1 | DB5-----P0.5 | RS-------P2.2 | DB6-----P0.6 | E--------P2.0 | DB7-----P0.7 | --------------------------------------------------- LCD1602的简简单显示 =========================================================*/ #include #include #define LCM_RW P2_1 //定义引脚 #define LCM_RS P2_2 #define LCM_E P2_0 #define LCM_Data P0 #define Busy 0x80 //用于检测LCM状态字中的Busy标识 /*------------------------------------------ 子函数声明 ------------------------------------------*/ void Write_Data_LCM(unsigned char WDLCM); void Write_Command_LCM(unsigned char WCLCM,BuysC); void Read_Status_LCM(void); void LCM_Init(void);

lcd1602按键显示程序

#include #include //包含_nop_()函数定义的头文件 typedef unsigned int uint ; typedef unsigned char uchar ; sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚 sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚 sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚 sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚 uchar keyscan(); void delay1ms(); void delay(unsigned char n); unsigned char BusyTest(void); void WriteInstruction (unsigned char dictate); void WriteAddress(unsigned char x); void WriteData(unsigned char y); void LcdInitiate(void); void delay1ms() { unsigned char i,j; for(i=0;i<10;i++) for(j=0;j<33;j++); } void delay(unsigned char n) { unsigned char i; for(i=0;i

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

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

基于LCD1602液晶显示屏的电子万年历设计两个C程序

基于LCD1602液晶显示屏的电子万年历设计 基于LCD1602液晶显示屏的电子万年历设计 摘要 现在是一个知识爆炸的新时代,新产品、新技术层出不穷,电子技术的发展更是日新月异。可以毫不夸张的说,电子技术的应用无处不在,电子技术正在不断地改变我们的生活,改变着我们的世界。在这快速发展的年代,时间对人们来说是越来越宝贵,在快节奏的生活时,人们往往忘记了时间,一旦遇到重要的事情而忘记了时间,这将会带来很大的损失。因此我们需要一个定时系统来提醒这些忙碌的人,而数字化的钟表给人们带来了极大的方便。由于单片机具有灵活性强、成本低、功耗低、保密性好等特点,所以电子日历时钟一般都以单片机为核心,外加一些外围设备来实现。 本设计是一种基于液晶显示屏的电子万年历,该系统结合了LCD显示技术,断电时间保护技术和语音录放技术,系统用点阵式液晶显示时间和日期,具有人性化和美观的页面效果,除具备传统的万年历所具有的时间显示和调整功能之外,该系统还兼有语音报时,闰年补偿等功能;以单片机的C51语言进行软件设计,增加了程序的可读性和可移植性,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。实际使用中该设计能准确地显示时间和日期,能准确清晰地完成语音报时功能。 关键词: 单片机,LCD,语音报时,万年历 引言 万年历是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和 石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表数字化为基础的。因此,研究万年历及扩大其应用,有着非常现实的意义。 市场上有许多电子钟的专用芯片如:LM8363、LM8365等,但它们功能单一,电路连接复杂,不便于调试制作!但是考虑到用单片机配合时钟芯片,可制成功能任意的电子钟,而且可以做到硬件简单、成本低廉。所以本系统采用了以广泛使用的单片机AT89C51技术为核心,配合时钟芯片DS1302。软硬件结合,使硬件部分大为简化,提高了系统稳定性,并采

DHT11测温湿度程序lcd1602显示

DHT11测温湿度程序lcd1602显示#include #include #define uchar unsigned char #define uint unsigned int #define Data P0 //数据端口 sbit RS=P2^4; sbit RW=P2^5; sbit E=P2^6; sbit DHT=P1^0; uchar FirstLine[] ="wen:00.00"; //第一行数据 uchar SecondLine[]="shi:00.00"; //第二行数据 unsigned char shiZ,shiX,wenZ,wenX,check; unsigned char tr_shiZ,tr_shiX,tr_wenZ,tr_wenX; unsigned char flag; unsigned int n=20,m; void delay_1ms(unsigned int i) { unsigned int j=88; for(;i>0;i--) { while(j>0)j--; } } void delay_10us()

{ unsigned char i; i--; i--; i--; i--; i--; i--; } /******************************************/ /*************温湿度读取函数***************/ /******************************************/ char read_data() { unsigned char i,num,temp; num=0; for(i=0;i<8;i++) { flag=2; while((!DHT)&&flag++); delay_10us(); delay_10us(); delay_10us(); if(DHT==1)

相关主题
文本预览
相关文档 最新文档