SG12864-12带汉字库LCD显示器

SG12864-12带汉字库LCD显示器
SG12864-12带汉字库LCD显示器

中文字库液晶显示模块使用

手册

SG12864

深圳市显能实业有限公司

深圳市福田区上梅林越华路12号珠宝城大厦四楼电话:0755-******** 传真:0755-******** http://https://www.360docs.net/doc/6b16880424.html, E-mail:shine@https://www.360docs.net/doc/6b16880424.html,

一、液晶显示模块概述

1. 液晶显示模块是128×64点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置8192个中文

汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。可与CPU直接接

口,提供两种界面来连接微处理机:8-位并行及串行两种连接方式。具有多种功能:光标显示、画

面移位、睡眠模式等。

2. 外观尺寸:93×70×12.5mm

3. 视域尺寸:73×39mm

外形尺寸图

二、模块引脚说明

128X64 引脚说明

引脚名称方向说明引脚名称方向说明

1 VSS - GND(0V) 11

DB4

I

数据4

2 VDD - Supply Voltage For Logic (+5v) 12 DB5 I 数据5

3 VO - Supply Voltage For LCD (+5v) 13 DB6 I 数据6

4 RS (CS) O H: Data L: Instruction Code 14 DB7 I 数据7

5 R/W (SID) O H: Read L: Write

15 PSB O H: Parallel Mode L: Serial Mode

6 E (SCLK) O Enable Signal

16 NC - 空脚

7 DB0 I 数据0 17 /RST O Reset Signal 低电平有效

8 DB1 I 数据1 18

NC

-

空脚

9 DB2 I 数据2 19

LEDA

-

背光源正极(LED+5V)

10 DB3 I 数据3 20

LEDK

-

背光源负极(LED-OV)

外形尺寸

ITEM NOMINAL

DIMEN UNIT 模块体积 93×78×12.5 mm 视域 70.7×38.8 mm 行列点阵数 128×64 dots 点距离 0.52×0.52 mm

点大小 0.48×0.48 mm

三、液晶硬件接口

1、逻辑工作电压(VDD):4.5~5.5V

2、电源地(GND):0V

3、工作温度(Ta):0~60℃(常温) / -20~75℃(宽温)

4、电气特性见附图1 外部连接图(参考附图2)

模块有并行和串行两种连接方法(时序如下):1、8位并行连接时序图

MPU写资料到模块

RS

R/W

E

DB0-DB7

MPU从模块读出资料

RS

R/W

E

2、串行连接时序图

四、用户指令集

1、指令表1:(RE=0:基本指令集)

指令码

指令

RS RW DB7 DB6 DB5

DB4 DB3 DB2

DB1

DB0

说明

执行时间

(540KHZ )

清除显示 0 0 0 0 0 0 0 0 0 1

将DDRAM 填满“20H ”,并且设定DDRAM 的地址计数器(AC )到“00H ” 4.6ms

地址归位 0 0 0 0 0 0 0 0 1 X 设定DDRAM 的地址计数器(AC )到

“00H ”,并且将游标移到开头原点位置;这个指令并不改变DDRAM 的内容

4.6ms

进入点 设定 0 0 0 0 0 0 0 1 I/D S

指定在资料的读取与写入时,设定游标移动方向及指定显示的移位 72us

显示状态 开/关 0 0 0 0 0 0 1 D C B D=1:整体显示ON

C=1:游标ON B=1:游标位置ON

72us

游标或显示移位控制

0 0 0 0

1 S/C R/L X X

设定游标的移动与显示的移位控制位元;这个指令并不改变DDRAM 的内容 72us

功能设定 0 0 0 0 1 DL X

RE

X X DL=1 (必须设为1)

RE=1: 扩充指令集动作 RE=0: 基本指令集动作

72us

设定CGRAM

地址 0 0 0 1 AC5AC4 AC3 AC2AC1

AC0

设定CGRAM 地址到地址计数器(AC ) 72us

设定DDRAM

地址 0 0 1 AC6 AC5AC4 AC3 AC2AC1AC0设定DDRAM 地址到地址计数器(AC ) 72us

读取忙碌标志(BF )和地址 0 1 BF AC6 AC5AC4 AC3 AC2AC1AC0读取忙碌标志(BF )可以确认内部动作

是否完成,同时可以读出地址计数器(AC )的值

0us

写资料到RAM 1 0 D7 D6 D5 D4 D3 D2 D1 D0

写入资料到内部的RAM

(DDRAM/CGRAM/IRAM/GDRAM ) 72us

读出RAM 的

1 1 D7 D6 D5 D4 D3 D

2 D1 D0

RAM

(DDRAM/CGRAM/IRAM/GDRAM )

72us

指令表—2:(RE=1:扩充指令集)

指令码

指令

RS RW DB7 DB6 DB5

DB4 DB3 DB2

DB1

DB0

说明

执行时间

(540KHZ )

待命模式 0 0 0 0 0 0 0 0 0 1

将DDRAM 填满“20H ”,并且设定DDRAM 的地址计数器(AC )到“00H ”

72us

卷动地址或IRAM 地址

0 0 0 0 0 0 0 0 1 SR SR=1:允许输入垂直卷动地址 72us

选择

SR=0:允许输入IRAM 地址

反白选择

0 0 0 0 0 0 0 1 R1 R0

选择4行中的任一行作反白显示,并可

决定反白与否 72us

睡眠模式 0 0 0 0 0 0 1 SL X X

SL=1:脱离睡眠模式

SL=0:进入睡眠模式 72us

扩充功能设

0 0 0 0

1

1 X

1

RE

G 0

RE=1: 扩充指令集动作

RE=0: 基本指令集动作

G=1 :绘图显示ON G=0 :绘图显示OFF

72us

设定IRAM 地址或卷动

地址 0 0 0 1 AC5

AC4 AC3 AC2

AC1

AC0

SR=1:AC5—AC0为垂直卷动地址 SR=0:AC3—AC0为ICON IRAM 地址

72us

设定绘图RAM 地址

0 0 1 AC6 AC5

AC4 AC3 AC2

AC1

AC0

设定CGRAM 地址到地址计数器(AC ) 72us

SG12864-12串口接线方式:

备注:

1、 当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取BF 标志时BF 需为0,方可接受新的指令;如果在送出一个指令前并不检查BF 标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。 2“RE ”为基本指令集与扩充指令集的选择控制位元,当变更“RE ”位元后,往后的指令集将维持在最后的状态,除非再次变更“RE ”位元,否则使用相同指令集时,不需每次重设“RE ”位元。

具体指令介绍:

1、清除显示

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

L L L L L L L L L H

功能:清除显示屏幕,把DDRAM位址计数器调整为“00H”

2、位址归位

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

L L L L L L L L H X

功能:把DDRAM位址计数器调整为“00H”,游标回原点,该功能不影响显示DDRAM

3、位址归位

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

L L L L L L L H I/D S

功能:把DDRAM位址计数器调整为“00H”,游标回原点,该功能不影响显示DDRAM功能:执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由Z地址计数器控制的,该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。

4、显示状态开/关

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

L L L L L L H D C B

功能: D=1;整体显示ON C=1;游标ON B=1;游标位置ON

5、游标或显示移位控制

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

R/L X X L L L L L H S/C

功能:设定游标的移动与显示的移位控制位:这个指令并不改变DDRAM的内容

6、功能设定

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

RE X X L L L L H DL X 0

功能:DL=1(必须设为1)RE=1;扩充指令集动作RE=0:基本指令集动作

7、设定CGRAM位址

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

AC2 AC1 AC0

AC3

L L L H AC5

AC4

功能:设定CGRAM位址到位址计数器(AC)

8、设定DDRAM位址

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L H AC6 AC5 AC4 AC3 AC2 AC1 AC0

功能:设定DDRAM位址到位址计数器(AC)

9、读取忙碌状态(BF)和位址

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L H BF AC6 AC5 AC4 AC3 AC2 AC1 AC0

功能:读取忙碌状态(BF)可以确认内部动作是否完成,同时可以读出位址计数器(AC)的值

10、写资料到RAM

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

H L D7 D6 D5 D4 D3 D2 D1 D0

功能:写入资料到内部的RAM(DDRAM/CGRAM/TRAM/GDRAM)

11、读出RAM的值

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

H H D7 D6 D5 D4 D3 D2 D1 D0

功能:从内部RAM读取资料(DDRAM/CGRAM/TRAM/GDRAM)

12、待命模式(12H)

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L L L L L L L H

功能:进入待命模式,执行其他命令都可终止待命模式

13、卷动位址或IRAM位址选择(13H)

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L L L L L L H SR

功能:SR=1;允许输入卷动位址SR=0;允许输入IRAM位址

14、反白选择(14H)

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L L L L L H R1 R0

功能:选择4行中的任一行作反白显示,并可决定反白的与否

15、睡眠模式(015H)

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L L L L H SL X X

功能:SL=1;脱离睡眠模式SL=0;进入睡眠模式

16、扩充功能设定(016H)

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

RE G L L L L L H H X 1

功能:RE=1;扩充指令集动作RE=0;基本指令集动作G=1;绘图显示ON G=0;绘图显示OFF

17、设定IRAM位址或卷动位址(017H)

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

AC2 AC1 AC0

AC3

L L L H AC5

AC4

功能:SR=1;AC5~AC0为垂直卷动位址SR=0;AC3~AC0写ICONRAM位址

18、设定绘图RAM位址(018H)

CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

L L H AC6 AC5 AC4 AC3 AC2 AC1 AC0

功能:设定GDRAM位址到位址计数器(AC)

五、显示坐标关系

1、图形显示坐标

2、汉字显示坐标

X坐标

Line1

80H 81H 82H 83H 84H 85H 86H 87H

90H 91H 92H 93H 94H 95H 96H 97H Line2

Line3

88H 89H 8AH 8BH 8CH 8DH 8EH 8FH

98H 99H 9AH 9BH 9CH 9DH 9EH 9FH Line4

3、字符表

深圳市显能实业有限公司 SHENZHNE SHINE INDUSTRY CO ;LTD

SG12864 中文字库

代码(02H---7FH )

六、显示步骤

1、显示资料RAM (DDRAM )

显示资料RAM 提供64×2个位元组的空间,最多可以控制4行16字(64个字)的中文字型显示,

当写入显示资料RAM 时,可以分别显示CGROM 、HCGROM 与CGRAM 的字型;ST7920A 可以显示三种字型 ,分别是半宽的HCGROM 字型、CGRAM 字型及中文CGROM 字型 ,三种字型的选择,由在DDRAM 中写入的编码选择,在0000H —0006H 的编码中将自动的结合下一个位元组,组成两个位元组的编码达成中文字型 的编码(A140—D75F ),各种字型详细编码如下:

1、显示半宽字型 :将8位元资料写入DDRAM 中,范围为02H —7FH 的编码。

2、显示CGRAM 字型:将16位元资料写入DDRAM 中,总共有0000H ,0002H ,0004H ,0006H

四种编码。 3、显示中文字形:将16位元资料写入DDRAMK ,范围为A1A1H —F7FEH 的编码。

绘图RAM (GDRAM )

绘图显示RAM 提供64×32个位元组的记忆空间,最多可以控制256×64点的二维也纳绘图缓冲空间,在更改绘图RAM 时,先连续写入水平与垂直的坐标值,再写入两个8位元的资料到绘图RAM ,

本页已使用福昕阅读器进行编辑。福昕软件(C)2005-2009,版权所有,仅供试用。

深圳市显能实业有限公司SHENZHNE SHINE INDUSTRY CO;LTD SG12864 中文字库

而地址计数器(AC)会自动加一;在写入绘图RAM的期间,绘图显示必须关闭,整个写入绘图RAM 的步骤如下:

1、关闭绘图显示功能。

2、先将水平的位元组坐标(X)写入绘图RAM地址;

3、再将垂直的坐标(Y)写入绘图RAM地址;

4、将D15——D8写入到RAM中;

5、将D7——D0写入到RAM中;

6、打开绘图显示功能。

绘图显示的记忆体对应分布请参考表

2、游标/闪烁控制

ST7920A提供硬体游标及闪烁控制电路,由地址计数器(address counter)的值来指定DDRAM中的游标或闪烁位置。

LCD12864显示程序

;实验目的:熟悉12864LCD的使用 ;12864LCD带中文字库 ;编程让12864LCD显示公司名称“深圳乾龙盛电子”,公司电话“0975”,公司传真“6”;硬件设置: ;关断所有拨码开关。 #include<> ;__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_H S_OSC ;芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 #define RS PORTA,5 ;命令/数据选择 #DEFINE RW PORTA,4 ;读/写选择 #DEFINE E PORTA,3 ;使能信号 #DEFINE PSB PORTA,2 ;并口/串口选择(H/L) #DEFINE RST PORTA,0 ;复位信号 ;----------------------------------------------- LCD_X EQU 30H ;页地址 LCD_Y EQU 31H ;Y地址 COUNT EQU 32H ;循环计数用 COUNT1 EQU 33H ;循环计数用 COUNT2 EQU 34H ;循环计数用 POINT EQU 35H ;查表偏移地址 POINT1 EQU 36H ;查表偏移地址 POINT2 EQU 37H ;查表偏移地址 TEMP EQU 38H ;临时寄存器 TEMP1 EQU 39H ;临时寄存器 ;----------------------------------------------- ORG 0000H ;复位地址 NOP ;ICD需要的空指令 GOTO MAIN ;跳转到主程序 ;**********************主程序************************ MAIN BANKSEL TRISA CLRF TRISA ;A口输出 CLRF TRISD ;D口输出 BANKSEL ADCON1 MOVLW 06H MOVWF ADCON1 ;A口全为数字口 CLRF STATUS

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

LCD12864显示程序

本例程为通过用A T89C52芯片操作LCD12864显示的程序,使用的晶振为12M。 /********************************************************** 程序说明:LCD12864显示主程序 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ #include #include"12864.c" void main() { Ini_Lcd(); //液晶初始化子程序 Disp(1,0,6,"莫剑辉"); //显示数据到LCD12864子程序 while(1); } 这里我们通过调用下面的头文件就可以了,这样的做法方便我们以后要用到LCD12864的程序的调用。 /********************************************************** 程序说明:LCD12864显示头文件 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ //#include #define uchar unsigned char #define uint unsigned int #define DATA P2 //数据输出端0~7 sbit RS=P0^0; //LCD12864 RS端 sbit RW=P0^1; //LCD12864 RW端 sbit E =P0^2; //LCD12864 E 端 sbit PSB =P0^3; /********************************************* 延时子程序 *********************************************/ void Delay_1ms(uint x) { uint j,i; for(j=0;j

LCD显示程序

本例程为通过用AT89C52芯片操作LCD12864显示的程序,使用的晶振为12M。 /********************************************************** 程序说明:LCD12864显示主程序 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ #include #include"12864.c" void main() { Ini_Lcd(); //液晶初始化子程序 Disp(1,0,6,"莫剑辉"); //显示数据到LCD12864子程序 while(1); } 这里我们通过调用下面的头文件就可以了,这样的做法方便我们以后要用到LCD12864的程序的调用。 /********************************************************** 程序说明:LCD12864显示头文件 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ //#include #define uchar unsigned char #define uint unsigned int #define DATA P2 //数据输出端0~7 sbit RS=P0^0; //LCD12864 RS端 sbit RW=P0^1; //LCD12864 RW端 sbit E =P0^2; //LCD12864 E 端 sbit PSB =P0^3; /********************************************* 延时子程序 *********************************************/ void Delay_1ms(uint x) { uint j,i; for(j=0;j

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

基于STM32--LCD12864驱动程序

基于STM32--LCD12864驱动程序

STM32 LCD12864驱动程序(头文件)(2012-05-29 21:25:08)转载▼ 标签:杂谈 #ifndef LCD12864_H #define LCD12864_H #define LCD_CONTROL GPIOD //默认LCD12864的控制口在PD口 #define LCD_DATAPORT GPIOD //默认LCD12864的数据口在PD口 #define LCD_RESET_Pin GPIO_Pin_12 //默认LCD12864的复位引脚连接到PD.12 也可不用 #define LCD_RS_Pin GPIO_Pin_13 //默认LCD12864 RS -- PD.13 #define LCD_RW_Pin GPIO_Pin_14 //默认LCD12864 RW -- PD.14 #define LCD_EN_Pin GPIO_Pin_15 //默认LCD12864 E -- PD.15 #define LCD_CONTROL_CLOCK RCC_APB2Periph_GPIOD //默认LCD12864的控制口时钟

#define LCD_DATAPORT_CLOCK RCC_APB2Periph_GPIOD //默认LCD12864的数据口时钟 #define LCD_RS_1 LCD_CONTROL->BSRR &=~LCD_RS_Pin;LCD_CONTROL->BSRR |=LCD_RS_Pin //RS置高电平 #define LCD_RS_0 LCD_CONTROL->BRR &=~LCD_RS_Pin;LCD_CONTROL->BRR |=LCD_RS_Pin //RS置低电平 #define LCD_RW_1 LCD_CONTROL->BSRR &=~LCD_RW_Pin;LCD_CONTROL->BSRR |=LCD_RW_Pin //RW置高电平 #define LCD_RW_0 LCD_CONTROL->BRR &=~LCD_RW_Pin;LCD_CONTROL->BRR |=LCD_RW_Pin //RW置低电平 #define LCD_EN_1 LCD_CONTROL->BSRR &=~LCD_EN_Pin;LCD_CONTROL->BSRR |=LCD_EN_Pin //EN置高电平 #define LCD_EN_0 LCD_CONTROL->BRR &=~LCD_EN_Pin;LCD_CONTROL->BRR |=LCD_EN_Pin //EN置低电平

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)

12864液晶显示程序(图案+文字)

#include sbit LCD12864_RS = P2^0; //RS控制引脚 sbit LCD12864_RW = P2^1; //RW控制引脚 sbit LCD12864_EN = P2^2; //EN控制引脚 sbit LCD12864_PSB = P2^3; //模式选择引脚,ST7920控制器,1为8位并行接口,0为串行接口 #define LCDPORT P0//数据引脚 void LCD12864_Init(void); //LCD12864初始化函数 void LCD12864_WriteInfomation(unsigned char ucData,bit bComOrData); //向LCD12864写入数据,bComOrData为1时写入的是数据,0时写入的是命令 void LCD12864_CheckBusy(void);//忙检测函数 void LCD12864_DisplayImage(unsigned char code *ucImage); void Delay(unsigned int uiCount); unsigned char code ucPic1[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x06,0x30,0x01,0xE0,0x00,0x00,0x2A,0x00,0x00,0xD8,0x00,0x00,0x00,0x00,0x00, 0x00,0x0F,0x7B,0x63,0xE0,0x00,0x00,0x22,0x00,0x01,0x24,0x00,0x00,0x00,0x00,0x00, 0x00,0x0F,0xFB,0x63,0x07,0x34,0x00,0x14,0x00,0x01,0x04,0x00,0x00,0x00,0x00,0x00, 0x00,0x0D,0xDB,0x63,0x01,0xBC,0x00,0x08,0x00,0x00,0x88,0x00,0x00,0x00,0x00,0x00, 0x00,0x0C,0x1B,0x63,0x07,0xB0,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x00, 0x00,0x0C,0x1B,0x63,0xED,0xB0,0xDB,0x00,0x01,0x00,0x20,0x00,0x00,0x00,0x00,0x00, 0x00,0x0C,0x19,0xE1,0xE7,0xB0,0xDB,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0C,0x19,0xE1,0xE7,0xB0,0xDB,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x05,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x0A,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0A,0x00,0x00,0xFF,0xF8,0xE0,0x05,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x06,0xC0,0x15,0x00,0x1F,0xFF,0xFF,0xC0,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x09,0x20,0x11,0x00,0xFB,0xFF,0xE1,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x08,0x20,0x0A,0x03,0x9F,0x00,0x9E,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x04,0x40,0x04,0x0E,0x70,0x00,0x81,0xC7,0x80,0x01,0x40,0x00,0x00,0x00,0x00, 0x00,0x02,0x80,0x00,0x1D,0x80,0x00,0xE0,0x61,0xE0,0x02,0xA0,0x00,0x00,0x00,0x00, 0x00,0x01,0x00,0x00,0x77,0x9F,0xFC,0xF0,0x18,0xF8,0x02,0x20,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xDF,0x00,0x00,0xF3,0x0C,0x3C,0x01,0x40,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x03,0x9E,0x00,0x00,0xF8,0x06,0x1E,0x00,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x07,0x0E,0x30,0x01,0xFC,0x7F,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x07,0x0E,0x30,0x01,0xFC,0x7F,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0x83,0xC0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x0F,0xFD,0xFF,0xFF,0xFF,0xFF,0xFC,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,

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

12864LCD显示倒计时程序

简介:第一行显示,距离系统爆炸时间 第二行显示,还剩 第三行显示,00时,00分,00秒 第四行显示,周林 按下旋钮开关,开始设定秒,秒编辑位闪动。左右旋转设定数值, 在按下开关,秒确定,设定分,分编辑位闪动左右调数值, 再按下,分确定,小时位闪动。左右转调小时,再按一下。时间确定,开始倒计时。到达定时时间后停止,并闪动。 #include #include /********************* 定义********************************/ #define LCD_data P0 //数据口 sbit LCD_RS = P2 ^ 0; //寄存器选择输入 sbit LCD_RW = P2 ^ 1; //液晶读/写控制 sbit LCD_EN = P2 ^ 2; //液晶使能控制 sbit LCD_PSB = P2 ^ 3; //串/并方式控制 sbit LCD_RST = P2 ^ 5; //液晶复位端口 sbit sset=P3^4;//设置按钮 sbit spk=P1^4; sbit sadd=P2^7; sbit sdel=P2^6;

signed char second=0,minute=0,hour=0,count=0,keycount=0; signed char key=0; unsigned char code DIS1[] = { "距离系统爆炸时间" }; unsigned char code DIS2[] = { "还剩:" }; unsigned char code DIS31[] = { "时" }; unsigned char code DIS32[] = { "分" }; unsigned char code DIS33[] = { "秒" };

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--); }

LCD12864(串口)显示程序

#ifndef jh_f330 #define jh_f330 #include #endif typedef unsigned char uint8; typedef unsigned int uint16; /*************端口配置**************/ sbit LCD_CS = P0^4; //片选信号,低电平有效 sbit LCD_RST = P0^3; //复位信号,低电平有效 sbit LCD_A0 = P0^2; //数据、指令选择,H:数据、L:指令 sbit LCD_DAT = P1^0; //串行输入数据引脚 sbit LCD_CLK = P1^1; //串行时钟输入引脚 uint8 code word1[]= { 0x04,0x44,0x84,0x04,0xE4,0x1F,0x84,0x44,0xA4,0x3F,0xA4,0xA4,0x64,0x06,0x04,0x00, 0x20,0x10,0x09,0x04,0xFF,0x04,0x04,0x14,0x26,0x05,0x84,0xFF,0x04,0x06,0x04,0x00 }; /**********预定义数据*********/ #define LCD_X 128-1 //屏幕的X轴的物理宽度 #define LCD_Y 64-1 //屏幕的Y轴的物理宽度 /***********LCD指令集***************/ //LCD开关命令 #define LCD_ON() Wr_Com(0xaf) #define LCD_OFF() Wr_Com(0xae) //设置显示起始行 #define LCD_START_LINE 0x40 //起始行地址为,0x40+(0-63)//页地址设置 #define LCD_Page 0xb0 //页地址为:0xb0+(0-8) //列地址设置 #define LCD_Ad_H 0x10 //列高四位地址:0x10+() #define LCD_Ad_L 0x00 //列低四位地址:0x00+() //行列地址方向设置 #define ADC_Norm() Wr_Com(0xa0); #define ADC_Reve() Wr_Com(0xa1); #define Com_Norm() Wr_Com(0xc0); #define Com_Reve() Wr_Com(0xc8);

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;

LCD12864串行显示程序

#include #include #define uchar unsigned char #define uint unsigned int sbit SCLK=P2^7; //时钟信号 E sbit CS=P2^6; //片选信号RS sbit SID=P2^5; //数据信号RW sbit PSB=P3^2; //串、并行选择信号uchar code dis1[]=" 2010"; uchar code dis2[]="Ψ00:00:00 Ψ"; uchar code dis3[]=" 26℃"; uchar code dis4[]="!!"; uchar code shu[]="0123456789"; uchar num,gw,sw,count; /*********延时函数,延时xms************/ void delay(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } /********以串行口协议发送数据************/ void send_bit(uchar byte) { uchar x; for(x=0;x<8;x++) { if((byte<

delay(5); } /**********写串口指令*************/ void write_com(uchar com) { CS=1; //每次传数据前把CS端拉高 send_bit(0xf8); //写指令 send_bit(com&0xf0); //0xf0为1111 0000,送高四位 send_bit((com<<4)&0xf0); //0xf0为1111 0000,送低四位delay(10); CS=0; } /**********写串口数据*************/ void write_date(uchar date) { CS=1; //每次传数据前把CS端拉高 send_bit(0xfa); //写指令 send_bit(date&0xf0); //0xf0为1111 0000,送高四位 send_bit((date<<4)&0xf0); //0xf0为1111 0000,送低四位delay(10); CS=0; } /*********初始化函数****************/ /*********初始化液晶****************/ void init() { delay(100); write_com(0x30); //基本指令模式 delay(10); write_com(0x0c); //开显示,关游标,关反白 delay(10); write_com(0x01); //清屏 delay(100); /***显示初始化***/ /////* write_com(0x80); for(num=0;num<16;num++) {

相关文档
最新文档