玩转12864液晶(1)--显示字符
12864液晶图像显示图文教程——最全版
uchar i,j; write_cmd(0x34);//扩充指令集动作 write_cmd(0x34);//关绘图显示功能 for(i=0;i<32;i++)//上半屏 { write_cmd(0x80+i);//垂直地址 write_cmd(0x80); //水平地址,水平地址自动加 1 for(j=0;j<16;j++) { write_data(0x00); } } for(i=0;i<32;i++)//下半屏 { write_cmd(0x88+i);//垂直地址 write_cmd(0x88);//水平地址,水平地址自动加 1 for(j=0;j<16;j++) { write_data(0x00); } } write_cmd(0x36);//开绘图显示 write_cmd(0x30);//回到基本指令集 } //函数名称:display_image(uchar *p) //函数功能:显示图片 void display_image(uchar *p) { uchar i,j; write_cmd(0x34);//扩充指令集动作 write_cmd(0x34);//关绘图显示功能 /*上半屏显示设置*/ for(i=0;i<32;i++)//上半屏 { write_cmd(0x80+i);//垂直地址 write_cmd(0x80); //水平地址,水平地址自动加 1
12864LCD液晶显示原理及使用方法
12864LCD液晶显示原理及使用方法
一、液晶显示原理
1.液晶材料的性质
液晶是介于固体和液体之间的一种物质状态。它具有流动性和定向性,通过控制电场可以改变其流动性。液晶分子呈现出各种不同的排列方式,
包括向列排列、向行排列、扭曲排列等。
2.电场的作用
当液晶材料处于电场作用下时,液晶分子会发生定向排列。电场的存
在导致液晶分子的定向,形成一定的直流电场效应。通过改变电场的强度
和方向,可以改变液晶分子的排列状态。
3.光的传输
液晶分子的定向排列对入射光的传播具有影响。根据液晶分子的不同
排列状态,可以选择性地传递或阻挡入射光。通过控制电场的强度和方向,可以调节液晶分子的排列状态,从而改变光的传输效果。
4.显示原理
二、液晶显示的使用方法
1.连接电源
2.初始化
在液晶屏开始显示之前,需要进行初始化设置。通过向液晶屏发送命令,配置液晶屏的各种参数,如显示模式、显示偏移量、对比度等。
3.显示图像
初始化完成后,可以通过向液晶屏发送数据以显示图像。可以通过控制每个像素点的液晶分子排列状态,从而显示出对应的图像。可以通过编写程序或者使用液晶屏驱动库来控制显示内容。
4.其他控制
除了显示图像外,液晶显示屏还具有其他一些控制功能。例如,可以通过发送命令来设置光标位置、清除屏幕内容、切换显示区域等。
总结:
12864液晶屏使用手册
12864液晶屏手册
一、液晶显示模块概述
12864A-1汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵,16*8=128,
16*4=64, 一行只能写8个汉字,4行;)、128个字符(8X16点阵)及64X256点阵显示RAM( GDRAM 主要技术参数和显示特性:
电源:VDD ~+5V(内置升压电路,无需负压);
显示内容:128列X 64行(128表示点数)
显示颜色:黄绿
显示角度:6: 00钟直视
LCD 类型:STN
与MC成口 : 8位或4位并行/3位串行
配置LED背光
多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等
、外形尺寸
1.外形尺寸图
□U U
PN12864A
2.主要外形尺寸
二、模块引脚说明
逻辑工作电压(VDD):〜
电源地(GND): 0V
工作温度(Ta) : 0〜60C (常温)/ -20 〜75 C (宽温)
三、接口时序
模块有并行和串行两种连接方法(时序如下):
8位并行连接时序图
MP如资料到模块
MPLM模块读出资料
2、串行连接时序图
串行数据传送共分三个字节完成:
第一字节:串口控制一格式11111ABC
A为数据传送方向控制: H表示数据从LCD到MCU L表示数据从MCHiJ LCD
B C 为数据类型选择:固
定为0
H表示数据是显示数据,L表示数据是控制指令
第二字节:(并行)8位数据的高 4 位一格式DDDD0000第三字节:(并行)8位数据的低 4 位一格式0000DDDD 串行接口时序参数:(测试条件:T=25C VDD=
四、用户指令集
玩转12864液晶显示图片
玩转12864液晶显示图片,画点,画任意直线
2009-10-30 01:24
通过上一篇的实验,相信大家都掌握了显示字符的基本用法。
下面我们来看一下12864液晶更高级的用法。
首先是它的绘图功能。
让我们先来显示一整副的图片吧,也就是128x64大小。
在使用绘图功能时,先要打开扩充指令集,然后再打开绘图功能。接着就是送数据显示了。这里我们首先要弄明白ST7920的显示坐标关系。其显示坐标如下。
从图中可以看出,X方向共有8个字(16个字节)Y方向共有0~31 行分为上下两个屏。
弄懂了之后我们就可以依照此坐标来显示一整屏的图片了。
随便用一个图片的提取转换软件,讲一副126X64大小的图片转换成字节数据,总共字节大小为128*64/8 = 1024个字节。
下面我们来看看这个显示整屏图像的函数
void v_Lcd12864DrawPicture_f( unsigned char code *pPicture )
{
unsigned char i, j, k ;
for( i = 0 ; i < 2 ; i++ )//分上下两屏写
{
for( j = 0 ; j < 32 ; j++ )
{
v_Lcd12864SendCmd_f( 0x80 + j ) ;//写Y坐标
if( i == 0 ) //写X坐标
{
v_Lcd12864SendCmd_f( 0x80 ) ;
}
else
{
v_Lcd12864SendCmd_f( 0x88 ) ;
}
for( k = 0 ; k < 16 ; k++ ) //写一整行数据
J12864 液晶模块使用说明书
技术QQ:1035715441
非常感谢您使用我们的产品,我们竭诚为您提供服务
J12864中文字库
注释:(1)模组背部自带3*3 10K硬封可调电位器VR1,可以调到理想对比度(默认5V出厂已经调试好,也可自行再次调节,电位器为微调,请尽量小心调试)
(2)LED背光极性可调,JP4为液晶背光正负反接处
(3)模组自带原装三星正品防静电电容,抗干扰性更强C6 C7 C8
(4)串并口可通过两种方式调节1种PSB接口控制2 种JP2短路到P为并口短路到S为串口
(5)自改3.3V可通过JP3调节,默认接+级为5V,接-为3.3V,然后C4 C5加极性电容即可型号
为106A或者104A,背光电阻33欧改成3.3欧
技术QQ:1035715441
一、液晶显示模块概述
J12864中文汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。
主要技术参数和显示特性:
电源:VDD 3.3V~+5V(内置升压电路,无需负压);
显示内容:128列× 64行
显示颜色:黄绿/蓝屏
显示角度:6:00钟直视
LCD类型:STN
与MCU接口:8位或4位并行/3位串行
配置LED背光
多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等
二、外形尺寸
外观尺寸:93×70×12.5mm 视域尺寸:73×39mm
外形尺寸图
外形尺寸
技术QQ:1035715441
ITEM NOMINAL DIMEN UNIT
模块体积93×70×12.5 mm
12864显示文字+图像
引用12864液晶原理分析3
他山之石2010-07-21 20:52:05 阅读7 评论0 字号:大中小
小峰的12864液晶原理分析3
一、ST7920控制IC的LCD12864实现反白显示
从使用手册上可知,扩展指令里的0x03+行号即可实现反白对应行。但是ST7920 控制器的128×64 点阵液晶其实原理上等同256×32 点阵,第三行对应的DDRAM 地址紧接第一行;第四行对应的DDRAM 地址紧接第二行。所以128×64 点阵的液晶执行反白功能时实用意义不大,因为用户对第一行执行反白显示操作时,第三行必然也反白显示;第二行反白,第四行也必然反白。
其实还是有办法做到单行反白的,解决方法就是混用图形显示和字符显示。其理论支持在于:在ST7920中,字符显示的DDRAM和图形的GDRAM是相互独立的,而最后显示到液晶上的结果,是两个RAM中数据的异或。
具体来说:假如某个点上,绘图RAM的没有绘图(数据为0),而字符RAM上有点阵(数据为1),那么异或的结果就是1,也就是说正常显示字符;当字符上RAM没有点阵的时候,异或的结果是0,自然也就不显示了。假如该点上绘图RAM绘图了(数据为1),当字符RAM上有点阵(数据为1时),异或的结果为0,效果就是反白显示;如果字符RAM没有点阵(数据为0时),异或结果为1,效果就是显示绘图的背景。
所以,如果要在某个地方反白显示,那么就在该点绘图并且写字,如果要取消反白,就重新用全0擦掉那个地方的绘图!这样一来可以实现任何地方、任意大小的反白显示,反而比原指令中的单行反白的功能更好更强大。
12864液晶屏学习使用手册
12864液晶屏学习手册
1.液晶模组概览
12864A-1汉字图形点阵液晶显示模块,可显示汉字和图形,内置8192个汉字(16X16点矩阵,16 * 8 = 128,16 * 4 = 64,一行,4行只能写8个汉字;),128个字符(8X16点矩阵)和64X256点矩阵显示RAM(GDRAM)。主要技术参数和显示特性:
电源:VDD 3.3V〜+5伏(内置升压电路,无负压);
显示内容:128列X第64行(128分)
显示颜色:黄绿色
显示角度:直接看6:00
LCD类型:STN
与MCU的接口:8位或4位并行/ 3位串行
配置LED背光
多种软件功能:光标显示,屏幕移位,自定义字符,睡眠模式等
2.尺寸
1.尺寸
2。主要尺寸
项目标准尺寸单元
模子片身体产品113.0X65.0X12.8毫米
2.模块引脚说明
逻辑工作电压(VDD):4.5〜5.5V
电源地(GND):0V
穿孔温度(Ta):0〜60°C(常温)/ -20〜75°C(宽温度)
三,接口定时
模块有两种连接方式:并行和串行(时间如下):
8位并行连接时序图
MPU将数据写入模块
MPU从模块读取数据
2,串行连接时序图
串行数据传输以三个字节完成:
第一个字节:串口控制—格式11111ABC
A是数据传输方向控制:H表示从LCD到MCU的数据,L表示从MCU到LCD的数据B是数据类型选择:H表示数据是显示数据,L表示数据是控制指令
C固定为0
第二字节:(并行)8位数据的高4位—格式DDDD0000
第三个字节:(并行)8位数据的低4位—格式0000DDDD
串行接口时序参数:(测试条件:T =25℃VDD = 4.5V)
12864液晶显示汉字
单片机综合实训题目:12864液晶显示
专业:电气工程与自动化
班级:自动化12-13班
*名:***
学号:********
1.1 基于单片机控制液晶显示系统的设计任务
设计一款基于单片机AT89S51液晶滚动显示系统。
1.2 系统设计要求
(1)通过单片机的控制使液晶进行滚动显示学校。
(2)通过单片机的控制使液晶进行滚动显示专业。
(3)通过单片机的控制使液晶进行滚动显示姓名。
(4)通过单片机的控制使液晶进行滚动显示学号。
1.3 系统设计思路
根据系统设计要求,初步思路如下:
(1)通过单片机最小系统的控制使液晶进行滚动显示。
(2)液晶模块采用LCD12864。
(3)系统采用并口连接方式。
(4)通过驱动ST7920控制器使用其自带字库来提取所需文字。
二、液晶显示控制电路与程序方案设计
2.1系统设计思路与框图
液晶显示器YM12864R 的控制器ST7920 可以显示字母、数字符号、中文字型及自定图形显示,只要一个最小的微处理系统,将液晶显示模块的接口作为I/O 设备直接与之连接,就可以进行控制液晶显示器和数据传输,从而达到理想的显示效果。使用P3 口给液晶显示器提供控制信号,P0 口给液晶显示器传送数据。YM12864R 液晶显示器的控制信号有PSB、RS、R/W、E,其中RS、R/W、E分别对应接在AT89C51 的P3.0、P3.1、P3.2、P2.3 上,在本次设计中采用并行接口,故PSB接高电平,而8位数据口DB0~ DB7对应接在P0 口上。背光灯的电源正极、液晶显示器模块的电源正极以及LCD 驱动电压输入端都接在+5V 的稳压电源上。背光灯负极和模块的电源负极统一接地。液晶显示器模块的复位脚连接开关按纽与地相连。选择按键接高电平,即可实现单片机对液晶显示汉字的控制。
玩转12864液晶--显示字符
在我们常用的人机交互显示界面中,除了数码管,LED,以及我们之前已经提到的LCD1602之外,还有一种液晶屏用的比较多。相信接触过单片机的朋友都知道了,那就是12864液晶。顾名思义,12864表示其横向可以显示128个点,纵向可以显示64个点。我们常用的12864液晶模块中有带字库的,也有不带字库的,其控制芯片也有很多种,如KS0108
T6963,ST7920等等。在这里我们以ST7920为主控芯片的12864液晶屏来学习如何去驱动它。(液晶屏采用金鹏的OCMJ4X8C)
关于这个液晶屏的更多信息,请参考它的DATASHEET,附件中有下载。
我们先来了解一下它的并行连接情况。
下面是电路连接图
从上面的图可以看出,液晶模块和单片机的连接除了P0口的8位并行数据线之外,还有RS,RW,E等几根线。其中R/S是指令和数据寄存器的选择控制线(串行模式下为片选),R/W是读写控制线(串行模式下是数据线),E是使能线(串行模式下为时钟线)。
通过这几根控制线和数据线,再结合它的时序图,我们就可以编写出相应的驱动程序啦。看看并行模式下的写时序图:
根据这个时序图,我们就可以写出写数据或者写命令到LCD12864液晶的子程序。
读时序图如下:
根据这个时序图我们就可以从LCD12864液晶模块内部RAM中读出相应的数据,我们的忙检测函数就是根据这个时序图写出来的。以及后面章节中讲的画点函数等都要用到读时序。有了这两个时序图,然后我们再看看OCMJ4X8C的相关指令集,就可以编写出驱动程序了。这里要注意的是指令集分为基本指令集和扩充指令集,其中扩充指令集主要是与绘图相关,在此后的章节中会有相应的介绍。
12864液晶图像显示图文教程——最全版
由图可以看到水平坐标一个单位是两字节(即 16 位 D15~D0),X 地址会自动加 1,是直接加一个单位 (即两字节 16 位),比如 0001(也即 0X80+000X80+01),从第一行第一列跳到第一行第二列。 代码: void display_image(uchar *p) { uchar i,j; write_cmd(0x34);//扩充指令集动作 write_cmd(0x34);//关绘图显示功能 /*上半屏显示设置*/ for(i=0;i<32;i++)//上半屏 { write_cmd(0x80+i);//垂直地址 write_cmd(0x80); //水平地址 for(j=0;j<16;j++) { write_data(*p);//连续写入 16 个字节 p++; } } /*下半屏半屏显示设置*/ for(i=0;i<32;i++)//下半屏 { write_cmd(0x80+i);//垂直地址 write_cmd(0x88);//水平地址 for(j=0;j<16;j++)//连续写入 16 个字节 { write_data(*p); p++; } } write_cmd(0x36);//开绘图显示 write_cmd(0x30);//回到基本指令集 } 源程序: #include <reg52.h> #include "12864.h" X 坐标(水平)方向以 2 字节 Byte 为单位,Y 坐标(垂直) 方向以 1 位 Bit 为单位,先连续写入垂直与水平坐标,再写入 两字节数据到 GDRAM。 这里是这样进行的:i=0 时,j=0,1 时,写入两字节到垂直 (0X80+00)水平(0X80+00)这格(D15~D0)里;然后 X 坐标地址自增 1, 地址变为垂直 (0X80+00) , 水平 (0X80+01) 这格,在 j=2,3 时写入两字节,………一直到垂直(0X80+00) 水平(0X80+07)这格,在 j=14,15 时写入两字节,此时循环 for(j=0;j<16;j++)结束跳出,刚好第一行 128 位写完数据;然后 i++,开始写第二行……
12864LCD液晶显示原理及使用方法
12864LCD液晶显示原理及使用方法
液晶简介
液晶是一种在一定温度范围内呈现既不同于固态液态又不同于气态的特殊物质态,它既具有各向异性的晶体所特有的双折射性又具有液体的流动性液晶显示器件(英文的简写为LCD)就是利用液晶态物质的液晶分子排列状态在电场中改变而调制外界光的被动型显示器件。
点阵式图形液晶显示屏是LCD 的一种能够动态显示图形汉字以及各种符号信息为各种电子产品提供了友好的人机界面点阵式图形液晶显示屏的主要特点如下(这些特点也就是LCD 的特点):工作电压低、微功耗、体积小、可视面积大、无电磁辐射、数字接口、寿命长等特点。
12864LCD是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64 全点阵液晶显示器组成。可完成图形显示,也可以显示8×4 个(16×16 点阵)汉字或者显示16×4个(8×16 点阵)ASCII码。分为两种,带字库的和不带字库的。不带字库的LCD需要自己提供字库字模,此时可以根据个人喜好设置各种字体显示风格,设计上较为灵活。带字库的LCD 提供字库字模,但是只能显示GB2312的宋体。各有优缺点,根据不同应用场景灵活选择。其液晶模块原理图如下所示。
12864LCD点阵图形液晶模块原理框图
下面给出了其应用连接电路,分别介绍其各引脚的功能和作用。
如下表所示:12864LCD 的引脚说明
管脚号管脚名称LEVER 管脚功能描述
1GND 0 电源地
2VCC+5.0V 电源电压
3VLCD - 液晶显示器驱动电压
4RS (D/I) H/LD/I=“H”,表示DB7∽DB0 为显示数据
12864液晶显示屏
12864液晶显示屏(带字库)
一、12864液晶显示屏介绍
市场上的12864 LCD主要分为二种,一种是采用KS0108及其兼容控制器,它不带任何字库;另一种是采用ST7920控制器的,它带有中文字库(8000多汉字)。
需要提醒读者的是,带字库的12864 LCD一般都集成有-10V负压电路,因此,可直接使用;而很多不带字库的12864 LCD不带-10V负压电路,使用时比较麻烦,需要自己组装负压电路,在选购12864 LCD时应特别注意!
我们这里出售的是带字库的12864液晶显示屏,可以直接和DD-900实验开发板配合使用,如下图所示。
二、12864液晶显示屏管脚功能
带字库12864液晶显示屏显示分辨率为128×64, 内置有8192 个16×16 点汉字和128 个16×8点ASCII 字符集,可构成全中文人机交互图形界面。带字库12864 LCD的管脚功能如下表所示。
12864点阵型LCD管脚功能
脚号符号功能
1 VSS 逻辑电源地
2 VDD +5V逻辑电源
3 V0 对比度调整端
4 RS(CS)数据\指令选择。高电平,表示数据DB0-DB7为显示数据;低电平,表示数据DB0-DB7为指令数据
5 R/W(SID)在并口模式下,该脚为读\写选择端
在串口模式下,该脚为串行数据输入端
6 E (SCLK)在并口模式下,该脚为读写使能端,E的下降沿锁定数据
在串口模式下,该脚为串行时钟端
7 ~14 DB0~DB7 在并口模式下,为8位数据输入输出引脚
在串口模式下,未用
15 PSB 并口/串口选择端。高电平时为8位或4位并口模式;低电平时为串口模式
带字库12864液晶详解
80H
81H
82H
83H
84H
85H
86H
87H
90H
91H
92H
93H
94H
95H
96H
97H
88H
89H
8AH
8BH
8CH
8DH
8EH
8FH
98H
99H
9AH
9BH
9CH
9DH
9EH
9FH
3 、图形显示 先设垂直地址再设水平地址(连续写入两个字节的资料来完成垂直与
水平的坐标地址) 垂直地址范围 AC5...AC0 水平地址范围 AC3…AC0 绘图 RAM 的地址计数器(AC)只会对水平地址(X 轴)自动加一,当
止 0 0 00000001
模式
待命模式
卷动地址开关
SR=1:允许输入垂直卷动地址
开启
0 0 0 0 0 0 0 0 1 SR SR=0:允许输入IRAM 和 CGRAM 地址
选择 2 行中的任一行作反白显示
反白
并可决定反白与否。初始值
选择 0 0 0 0 0 0 0 1 R1 R0 R1R0=00,第一次设定为反白显
再次设定变回正常
睡眠
SL=0:进入睡眠模式
ห้องสมุดไป่ตู้
0 0 0 0 0 0 1 SL X X
12864点阵LCD液晶屏带中文字库详细介绍
12864点阵LCD液晶屏带中文字库详细介绍
一、概述
二、带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和1 28个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
三、基本特性:
(1)、低电源电压(VDD:+3.0--+5.5V)(2)、显示分辨率:128×64点(3)、内置汉字字库,提供8 192个16×16点阵汉字(简繁体可选) (4)、内置 128个16×8点阵字符(5)、2MHZ时钟频率(6)、显示方式:STN、半透、正显(7)、驱动方式:1/32DUTY,1/5BIAS (8)、视角方向:6点(9)、背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 (10)、通讯方式:串行、并口可选(1 1)、内置DC-DC转换电路,无需外加负压(12)、无需片选信号,简化软件设计(13)、工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃
模块接口说明:
*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。
12864串行显示(字符、字符串)
12864串行显示(字符、字符串)
/************************************************************** ******
* 文件名:串行12864显示.c
* 描述 : 该程序实现了12864以串行的方式进行通信。
液晶上的R9。R10决定液晶的串行或者并行通讯方式。
液晶上的PSB已经拉为高电平。如果使用串行,需要取掉R9。
* 创建人:
* 版本号:
*************************************************************** ********/
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit CS=P2^5; //片选信号
sbit SID=P2^6; //数据信号
sbit SCLK=P2^7; //时钟信号
sbit RST=P2^2; //复位信号
sbit CH = P2^4; //并行、串行选择信号
/************************************************************** ******
* 名称 : delay()
* 功能 : 延时,延时时间为 100us * t。这是通过软件延时,有一定误差。
* 输入 : t
* 输出 : 无
*************************************************************** ********/
12864液晶屏幕使用说明及程序
12864使用说明
一、串/并接口
1.1 串口接口管脚信号
*注释1:如在实际应用中仅使用并口通讯模式,可将PSB 接固定高电平。
*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK 用焊锡短接。
1.2 并行接口管脚信号
*注释1:如在实际应用中仅使用并口通讯模式,可将PSB 接固定高电平。
*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。
*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK 用焊锡短接。
二、模块主要硬件构成说明
控制器接口信号说明:
2.1、RS,R/W的配合选择决定控制界面的4种模式:
2.2、E信号
●忙标志BF
BF 标志提供内部工作情况.BF=1 表示模块在进行内部操作,此时模块不接受外部指令和数据.BF=0 时, 模块为准备状态,随时可接受外部指令和数据.利用STATUS RD 指令,可以将BF 读到DB7 总线,从而检验模块之工作状态.
●字型产生ROM(CGROM)
字型产生ROM(CGROM)提供8192 个此触发器是用于模块屏幕显示开和关的控制。DFF=1 为开显示(DISPLAY ON),DDRAM 的内容就显示在屏幕上,DFF=0 为关显示(DISPLAY OFF)。DFF 的状态是指令DISPLAY ON/OFF 和RST 信号控制的。
●显示数据RAM(DDRAM)
模块内部显示数据 RAM 提供 64×2 个位元组的空间,最多可控制 4 行 16 字(64 个字)的中文字型显示,当写入显示数据 RAM 时,可分别显示 CGROM 与CGRAM 的字型;此模块可显示三种字型,分别是半角英、数字型(16*8)、CGRAM 字型及 CGROM 的中文字型。三种字型的选择,由在 DDRAM 中写入的编码选择,在0000H—0006H 的编码中(其代码分别是 0000、0002、0004、0006 共 4 个)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
unsigned int nTimeOut = 0 ;
SET_INC
SET_READ
CLR_EN
SET_EN
while( ( io_LCD12864_DATAPORT & 0x80 ) && ( ++nTimeOut != 0 ) ) ;
CLR_EN
SET_INC
SET_READ
}
void v_Lcd12864SendCmd_f( unsigned char byCmd ) //发送命令
#define SET_READ io_LCD12864_RW = 1 ;
#define SET_WRITE io_LCD12864_RW = 0 ;
#define SET_EN io_LCD12864_EN = 1 ;
#define CLR_EN io_LCD12864_EN = 0 ;
void v_Lcd12864CheckBusy_f( void ) //忙检测函数
{
v_Lcd12864CheckBusy_f() ;
SET_DATA
SET_WRITE
CLR_EN
io_LCD12864_DATAPORT = byData ;
_nop_();
_nop_();
SET_EN
_nop_();
_nop_();
CLR_EN
SET_READ
SET_INC
}
void v_DelayMs_f( unsigned int nDelay ) //延时
在我们常用的人机交互显示界面中,除了数码管,LED,以及我们之前已经提到的LCD1602之外,还有一种液晶屏用的比较多。相信接触过单片机的朋友都知道了,那就是12864液晶。顾名思义,12864表示其横向可以显示128个点,纵向可以显示64个点。我们常用的12864液晶模块中有带字库的,也有不带字库的,其控制芯片也有很多种,如KS0108
break ;
case 2 : byAddress = 0x88 + x ;
break ;
case 3 : byAddress = 0x98 + x ;
break ;
default :
break ;
}
v_Lcd12864SendCmd_f( byAddress ) ;
}
void v_Lcd12864PutString_f( unsigned char x, unsigned char y, unsigned char *pData )
T6963,ST7920等等。在这里我们以ST7920为主控芯片的12864液晶屏来学习如何去驱动它。(液晶屏采用金鹏的OCMJ4X8C)
关于这个液晶屏的更多信息,请参考它的DATASHEET,附件中有下载。
我们先来了解一下它的并行连接情况。
下面是电路连接图
从上面的图可以看出,液晶模块和单片机的连接除了P0口的8位并行数据线之外,还有RS,RW,E等几根线。其中R/S是指令和数据寄存器的选择控制线(串行模式下为片选),R/W是读写控制线(串行模式下是数据线),E是使能线(串行模式下为时钟线)。
{
unsigned int i ;
for( ; nDelay > 0 ; nDelay-- )
{
for( i = 125 ; i > 0 ; i-- ) ;
}
}
void v_Lcd12864Init_f( void ) //初始化
{
v_Lcd12864SendCmd_f( 0x30 ) ; //基本指令集
{
v_Lcd12864CheckBusy_f() ;
SET_INC
SET_WRITE
CLR_EN
io_LCD12864_DATAPORT = byCmd ;
_nop_();
_nop_();
SET_EN
_nop_();
_nop_();
CLR_EN
SET_READ
SET_INC
}
void v_Lcd12864SendData_f( unsigned char byData ) //发送数据
v_Lcd12864PutString_f( 2,1, "欢迎光临") ;
v_Lcd12864PutString_f( 0,2, "*LCD12864ST7920*") ;
v_Lcd12864PutString_f( 0,3, "★○◇◆※☆■△") ;
while( 1 ) ;
}
怎么样,你弄出来了吗,很简单吧~~
sbit io_LCD12864_RW = P1^1 ;
sbit io_LCD12864_EN = P1^2 ;
#define io_LCD12864_DATAPORT P0
#define SET_DATA io_LCD12864_RS = 1 ;
#define SET_INC io_LCD12864_RS = 0 ;
{
v_Lcd12864SetAddress_f( x, y ) ;
while( *pData != '\0' )
{
v_Lcd12864SendData_f( *pData++ ) ;
}
}
void main( void )
{
v_Lcd12864Init_f() ;
v_Lcd12864PutString_f( 0,0, "电子工程师之家") ;
通过这几根控制线和数据线,再结合它的时序图,我们就可以编写出相应的驱动程序啦。
看看并行模式下的写时序图:
根据这个时序图,我们就可以写出写数据或者写命令到LCD12864液晶的子程序。
读时序图如下:
根据这个时序图我们就可以从LCD12864液晶模块内部RAM中读出相应的数据,我们的忙检测函数就是根据这个时序图写出来的。以及后面章节中讲的画点函数等都要用到读时序。
下一章节内容将学习如何在LCD12864液晶屏上画图。尽请期待^_^
本文来自:电子工程师之家http://www.eehome.cn
v_DelayMs_f( 50 ) ;
v_Lcd12864SendCmd_f( 0x01 ) ; //清屏
v_DelayMs_f( 50 ) ;
v_Lcd12864SendCmd_f( 0x06 ) ; //光标右移
v_DelayMs_f( 50 ) ;
v_Lcd12864SendCmd_f( 0x0c ) ; //开显示
有了这两个时序图,然后我们再看看OCMJ4X8C的相关指令集,就可以编写出驱动程序了。
这里要注意的是指令集分为基本指令集和扩充指令集,其中扩充指令集主要是与绘图相关,在此后的章节中会有相应的介绍。
下面让我们根据这些编写出它的驱动程序吧。
我的硬件测试条件为:STC89C516(11.0592MHz) + OCMJ4X8C
实际显示效果图片如下:
程序部分如下,请结合液晶模块的DATASHEET看程序,这样能够更加快速的弄懂程序的流程。大致有如下几个函数:写数据,写指令,忙检测,初始化,指定地址显示字符串等等。
[p][/p]
#include "reg52.h"
#include "intrins.h"
sbit io_LCD12864_RS = P1^0 ;
}
void v_Lcd12864SetAddress_f( unsigned char x, y ) //地址转换
{ຫໍສະໝຸດ Baidu
unsigned char byAddress ;
switch( y )
{
case 0 : byAddress = 0x80 + x ;
break;
case 1 : byAddress = 0x90 + x ;