12864LCD液晶显示屏中文资料

12864LCD液晶显示屏中文资料
12864LCD液晶显示屏中文资料

12864LCD液晶显示屏中文资料

一、概述

二、带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。

三、基本特性:

(1)、低电源电压(VDD:+3.0--+5.5V)(2)、显示分辨率:128×64点(3)、内置汉字字库,提供8192个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)、通讯方式:串行、并口可选(11)、内置DC-DC转换电路,无需外加负压(12)、无需片选信号,简化软件设计(13)、工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃

模块接口说明:

*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。

*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。

*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。

2.2并行接口

的J8和“VCC”用焊锡短接。

*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。

*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。四.模块主要硬件构成说明

控制器接口信号说明:

1、RS,R/W的配合选择决定控制界面的4种模式:

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个)将选择CGRAM的自定义字型,02H—7FH的编码中将选择半角英数字的字型,至于A1以上的编码将自动的结合下一个位元组,组成两个位元组的编码形成中文字型的编码BIG5(A140—D75F),GB(A1A0-F7FFH)。

● 字型产生RAM(CGRAM)字型产生RAM提供图象定义(造字)功能, 可以提供四组

16×16点的自定义图象空间,使用者可以将内部字型没有提供的图象字型自行定义到CGRAM 中,便可和CGROM中的定义一样地通过DDRAM显示在屏幕中。

● 地址计数器AC地址计数器是用来贮存DDRAM/CGRAM之一的地址,它可由设定指令暂存器来改变,之后只要读取或是写入DDRAM/CGRAM的值时,地址计数器的值就会自动加一,当RS为“0”时而R/W为“1”时,地址计数器的值会被读取到DB6——DB0中。

光标/闪烁控制电路

此模块提供硬体光标及闪烁控制电路,由地址计数器的值来指定DDRAM中的光标或闪烁位置。

五、指令说明

模块控制芯片提供两套控制命令,基本指令和扩充指令如下:

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

备注:当IC1在接受指令前,微处理器必须先确认其内部处于非忙碌状态,即读取BF标志时,BF需为零,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延长一段较长的时间,即是等待前一个指令确实执行完成。

应用举例:

1、使用前的准备:先给模块加上工作电压,再按照下图的连接方法调节LCD的对比度,使其显示出黑色的底影。此过程亦可以初步检测LCD有无缺段现象。

2、字符显示:带中文字库的128X64-0402B每屏可显示4行8列共32个16×16点阵的汉字,每个显示RAM可显示1个中文字符或2个16×8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。带中文字库的128X64-0402B内部提供128×2字节的字符显示RAM缓冲区(DDRAM)。字符显示是通过将字符显示编码写入该字符显示RAM 实现的。根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII 码字库)及CGRAM(自定义字形)的内容。三种不同字符/字型的选择编码范围为:0000~0006H(其代码分别是0000、0002、0004、0006共4个)显示自定义字型,02H~7FH显示半宽ASCII码字符,A1A0H~F7FFH显示8192种GB2312中文字库字形。字符显示RAM在液晶模块中的地址80H~9FH。字符显示的RAM的地址与32个字符显示区域有着一一对应的关

3 、图形显示

先设垂直地址再设水平地址(连续写入两个字节的资料来完成垂直与水平的坐标地址)

垂直地址范围 AC5...AC0

水平地址范围AC3…AC0

绘图RAM 的地址计数器(AC)只会对水平地址(X 轴)自动加一,当水平地址=0FH 时会重新设为00H 但并不会对垂直地址做进位自动加一,故当连续写入多笔资料时,程序需自行判断垂直地址是否需重新设定。GDRAM的坐标地址与资料排列顺序如下图:

4、应用说明

用带中文字库的128X64显示模块时应注意以下几点:

①欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。

②显示ASCII字符过程与显示中文字符过程相同。不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。

③当字符编码为2字节时,应先写入高位字节,再写入低位字节。

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

玩转12864液晶(1)--显示字符

在我们常用的人机交互显示界面中,除了数码管,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的相关指令集,就可以编写出驱动程序了。这里要注意的是指令集分为基本指令集和扩充指令集,其中扩充指令集主要是与绘图相关,在此后的章节中会有相应的介绍。 下面让我们根据这些编写出它的驱动程序吧。 我的硬件测试条件为:STC89C516(11.0592MHz) + OCMJ4X8C 实际显示效果图片如下: 程序部分如下,请结合液晶模块的DATASHEET看程序,这样能够更加快速的弄懂程序的流程。大致有如下几个函数:写数据,写指令,忙检测,初始化,指定地址显示字符串等等。[p][/p] #include "reg52.h" #include "intrins.h" sbit io_LCD12864_RS = P1^0 ;

LCD12864图形液晶并口显示

LCD12864图形液晶并口显示 【教学引入】 液晶屏,在生活中很常见,我们常见的液晶显示器,如电脑的显示器,电视机,手机等等。 液晶屏在生活中已得到了普遍应用,它显示个各种各样的画面。 【教学目标】 1、掌握LCD12864液晶屏的用法; 2、编写LCD12864液晶屏的指令代码; 【知识目标】 1、掌握LCD12864液晶屏的用法; 2、掌握LCD12864液晶屏指令代码; 【教学准备】 电脑、Proteus、Keil 【教学方法】 教法:讲授法、讨论法 学法:练习法、探究法 【教学课时】 四课时 【教学过程】 一、12864液晶介绍 (1)12864是128*64点阵液晶模块的点阵数简称,业界约定俗成的简称。12864点阵的屏显成本相对较低,适用于各类仪器,小型设备的显示领域。12864M汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。

12864引脚说明 查阅“12864M.PDF”12864M液晶显示模块技术手册——四、用户指令集 1、指令表1:(RE=0:基本指令表),如下图,讲解了12864的基本指令集和扩充指令集。

当模块在接受指令前,微处理器必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0。“RE”为基本指令集与扩充指令集的选择控制位元,往后的指令集将维持在最后的状态。 当选择G=0 :绘图显示OFF,汉字显示的时,12864屏只能显示8X4=32个汉字,下面是汉字显示的坐标

二、12864液晶屏驱动电路 AT89C52的P0口连接12864的并行数据口,RP1为P0口的上拉排阻。 三、52代码编写 (1)打开keil uVision4,建立一个新的工程,工程名为"12864 graphic LCD parallel display",保存类型*.uvproj,单片机型号AT89C52。在工程中添加12864 graphic LCD parallel display.c文件,如下图

12864显示图形

看到工具箱旁边那个LCD12864很久没用了(当初买回来用的时候只是简单地测试了一下),于是萌生了重新写一次接口程序的想法(而且这次要给它加个图片显示的功能),好,说做就做,就用Atmega16和ICCAVR来做吧,最近这MCU和平台用得比较熟练。 马上从书堆里把当初打印出来的中文datasheet给翻了出来,依葫芦画瓢地写了个初始化程序。好,OK。编译通过。于是又写了一个可以自定义从XY坐标值开始输出显示的函数,再次编译,也通过,OK。于是呼马上写了四行简单的字符烧到单片机上试了一下,嘿嘿,一次通过。如下图: 后来在进一步测试的时候也出了点小问题。就是我是使用USBISP烧写器把程序烧写进AVR的(此时实验板由USBISP烧写器供电),想要实现从第一行的第一个字符开始连续显示"0123456789"。刚烧写完程序后能看到LCD12864上正常显示"0123456789",但是把烧写器从实验板上断开连接,单独用USB给实验板供电的时候,LCD的第一行只是显示"123456789",第一个字符消失了……,左思右想地弄了一个多小时后,终于把问题给解决了,就是把初始化程序的延时适当增加了些,真是奇怪。刚开始一直想不通为什么在烧写器供电的情况下就正常显示,而换到USB供电后就出了问题。后来再想想,估计是跟供电有关。在使用USBISP烧写器供电的时候,LCD的背光灯明显比用USB供电的时候来得亮,而且对比度也高很多,看来是因为换到USB供电后,供电不怎么充足,以至于LCD在上电初始化的时候花上了更多的时间去初始化(因为供电低了,功率小了,跑起来有点力不从心,用的时间就久了嘛……我是觉得可以这样去理解的 接下来呢,就到了有点难度的画图了。当初刚买到12864的时候只是简单测试了字符显示功能,除了因为画图还不需要用到,另外一个原因就是那datasheet上关于画图那部分的内容不怎么看得懂…。现在重新拿起来看,依然一头雾水……。马上上网百度了一下“12864 7920 显示图片”,看到了不少的例子程序,可是……就是没看到有关于这部分功能实现的详细思路和讲解……下载下来的那些程序,基本上没注释,不是说晦涩难懂,但是至少看起来一团糟,让人家不想继续看下去……于是还是硬着头皮去啃那datasheet。上面对于画图这部分的内容是这样讲解的:

在12864显示任意图片及参考程序

用12864显示单色图片 首先介绍本12864液晶显示器: 型号:QC12864B 因为单片机读取的是数据,而不是直接的图片。得将图片进行取模,图片应该是单色图片,像素128*64。 下面我为大家介绍个实例。 ①、在电脑附件画图,首先设置属性

开始画图 保存文件,注意格式: ②、然后进行取模。

③、编程: #include #define uchar unsigned char #define uint unsigned int //宏定义 #define lcd P2 //数据端口 sbit rs=P1^2; //指令/数据选择信号 sbit rw=P1^1; //读写选择信号 sbit e=P1^0; //使能端 sbit psb=P1^3; //串并选择端,高电平为并行,低电平为串行 uchar code ai[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xCE,0x00,0x00,0x00,0x00,0x00,0x01,0xC1,0xE0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xC7,0x00,0x00,0x00,0x00,0x00,0x03,0x31,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x0E,0xC0,0x00,0x00,0x00,0x00,0x00,0x03,0x9B,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0x82,0x08,0x00,0x00,0x00, 0x00,0x00,0x00,0x78,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFC,0x00,0x00,0x00, 0x00,0x00,0x00,0xF8,0xEF,0x00,0x00,0x00,0x00,0x00,0x1B,0xFC,0x1E,0x00,0x00,0x00, 0x00,0x00,0x00,0x18,0xFE,0x00,0x00,0x00,0x00,0x00,0x1E,0x60,0x38,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x38,0x70,0x20,0x00,0x00,0x00,

函数信号发生器的设计(12864实现动态波形显示)

课程设计(论文)任务书 电气与电子工程学院系自动化专业13—2 班级 一、课程设计(论文)题目简易信号发生器的设计 二、课程设计(论文)工作自2016 年 1 月 5 日起至2016 年 1 月 14 日止。 三、课程设计(论文)的内容要求: 课程设计不仅仅要求学生完成所规定的题目要求,同时还要培养学生良好的科学态度和严谨的设计习惯。课程设计报告要求内容如下: (1)设计思想和设计说明 (2)硬件原理框图 (3)硬件原理图与软件配合介绍 (4)程序存储器和数据存储器的单元分配(5) 程序流程图 (6)系统功能描述 (7) 设计调试过程总结 (8) 附录里面包括:芯片资料、源程序清单和符合制图规范的硬件原理图的图纸。 设计要求内容: 用D/A实现正弦信号,三角波信号,方波信号的输出,并且在LCD上显示出当前波形。要求输出信号的频率和幅度可调。 设计内容:

(1)满足设计要求内容。 (2)扩展锯齿波波形输出。 (3)汉字显示当前波形形状与当前频率的大小 学生签名 年月日课程设计(论文)评审意见 (1)题目复杂程度:复杂()、较复杂()、一般()、简单() (2)总体方案的选择是否正确:正确()、较正确()、欠正确()、不正确() (3) 系统能否满足任务要求:满足()、较满足()、欠满足()、不满足() (4) 元器件选择是否合理:合理()、较合理()、欠合理()、不太合理() (5) 学习实践态度:好()、较好()、一般()、不太好() (6) 独立工作能力:强()、较强()、一般()、较差() (7) 回答问题是否正确:正确()、较正确()、基本正确()、大多不正确() (8) 图表是否符合标准:符合()、较符合()、基本符合()、大多不符合() (9) 撰写是否规范整洁:规范整洁()、较规范()、欠规范()、不太规范() 总评成绩:优()、良()、中()、及格()、不及格() 评阅人职称副教授 2016 年 1 月日

单片机12864动态波形显示

/****************************************************************************** * * 描述: * * 12864标准字库液晶演示数据p0,控制p2 * ******************************************************************************* */ #include #include #include #define uchar unsigned char #define uint unsigned int /************* 12864LCD引脚定义*************/ #define LCD_data P0 //数据口 sbit LCD_RS = P2^6; //寄存器选择输入 sbit LCD_RW = P2^5; //液晶读/写控制 sbit LCD_EN = P2^7; //液晶使能控制 sbit LCD_PSB = P3^2; //串/并方式控制 sbit LCD_RST = P3^7; //液晶复位端口 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; /*********************************************************/ uchar code DIS1[] = {"Vpp:"}; uchar code DIS2[] = {"F:"}; uchar DIS3[] = {"5V"}; uchar DIS4[] = {"12Hz"}; uchar D1[]={"0123456789"}; /*********************************************************/ //正弦波代码 uchar code tab[]={ 126,100,80,70,65,62,65,70,80,100,126,152,172,182,187,190,187,182,172,152 }; //背景图片 uchar code Photo1[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,

单片机LCD12864显示系统课程设计

目录 一、概述 (2) 二、系统总体方案及硬件设计 (2) 系统框图 (3) 单片机最小系统 (4) 显示电路 (6) 按键控制电路 (6) ] 三、系统软件设计 (9) 软件设计概述 (9) 汉字显示 (10) 上下移屏 (10) 左右移屏 (11) 四、课程设计体会 (13) 五、参考文献 (13) 六、附录 (14) … 总电路图. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 总程序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . %

一、概述 / 随着社会的发展,趣来趣多的地方需要应用显示功能,各种数字显示仪器中的显示、广告牌、数码产品等,传统的数码管显示已经远远不能满足各行各业的需求。基于单片机的LCD显示是一种用单片机来控制的一种显示系统,它不仅能显示种各数字、字母、还能显示各种字体的汉字以及一些简单的图象,使用起来极为方便,只要通过对单片机写入一定的程序来控制LCD 的显示即可完成,根据程序的不同而产生不同不效果以满足各种不同需求。 本文围绕设计以单片机作为LCD液晶显示系统控制器为主线,基于单片机AT89S51,采用的液晶显示控制器的芯片是SED1520,主要实现由按键控制的中文显示、图片显示、滚屏以及左右移动功能。同时也对部分芯片和外围电路进行了介绍和设计,并附以系统结构框图加以说明,着重介绍了本系统应用的各硬件接口技术和各个接口模块的功能及工作过程,并详细阐述了程序的各个模块。本系统是以单片机的C语言来进行软件设计,指令的执行速度快,可读性强。为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。使硬件在软件的控制下协调运作。其次阐述了部分程序的流程图和实现过程。本文撰写的主导思想是软、硬件相结合,以硬件为基础,来进行各功能模块的编写。最后对我所开发的用单片机实现LCD液晶显示器控制原理的设计思想和软、硬件调试作了详细的论述。 二、系统总体方案及硬件设计 系统框图

12864显示任意128 64像素图片

工具箱旁边那个LCD12864很久没用了(当初买回来用的时候只是简单地测试了一下),于是萌生了重新写一次接口程序的想法(而且这次要给它加个图片显示的功能),好,说做就做,就用Atmega16和ICCAVR来做吧,最近这MCU 和平台用得比较熟练。 马上从书堆里把当初打印出来的中文datasheet给翻了出来,依葫芦画瓢地写了个初始化程序。好,OK。编译通过。于是又写了一个可以自定义从XY坐标值开始输出显示的函数,再次编译,也通过,OK。于是呼马上写了四行简单的字符烧到单片机上试了一下,嘿嘿,一次通过。如下图: 后来在进一步测试的时候也出了点小问题。就是我是使用USBISP烧写器把程序烧写进AVR的(此时实验板由USBISP烧写器供电),想要实现从第一行的第一个字符开始连续显示"0123456789"。刚烧写完程序后能看到LCD12864上正常显示"0123456789",但是把烧写器从实验板上断开连接,单独用USB给实验板供电的时候,LCD的第一行只是显示"123456789",第一个字符消失 了……,左思右想地弄了一个多小时后,终于把问题给解决了,就是把初始化程序的延时适当增加了些,真是奇怪。刚开始一直想不通为什么在烧写器供电的情况下就正常显示,而换到USB供电后就出了问题。后来再想想,估计是跟供电有关。在使用USBISP烧写器供电的时候,LCD的背光灯明显比用USB供电的时候来得亮,而且对比度也高很多,看来是因为换到USB供电后,供电不怎么充足,以至于LCD在上电初始化的时候花上了更多的时间去初始化(因为供电低了,功率小了,跑起来有点力不从心,用的时间就久了嘛……我是觉得可以这样去理 解的) 接下来呢,就到了有点难度的画图了。当初刚买到12864的时候只是简单测试了字符显示功能,除了因为画图还不需要用到,另外一个原因就是那 datasheet上关于画图那部分的内容不怎么看得懂……。现在重新拿起来

LCD12864带中文字库图形显示单片机程序多图

LCD12864带中文字库图形显示-单片机程 序(多图) 代码: #include ; #define uchar unsigned char sbit rs=P2^2;//写指令/数据 sbit rw=P2^3;//读状态/写 sbit e=P2^4;//使能端 sbit psb=P2^5;//串/并输入 //校徽 unsigned char code image[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x00,0x00,0x1F,0xFF,0x80,0x00,0x00,0x0F,0xFF ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x00,0x07,0xF4,0xFC,0x7E,0x00,0x00,0x0F,0xFF ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x00,0x0D,0xF0,0xFC,0xFF,0x80,0x00,0x0F,0xFF ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x00,0x13,0xF0,0x78,0x7F,0xC0,0x00,0x0F,0xFF ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x00,0x75,0xF7,0xFF,0xFC,0xE0,0x00,0x0F,0xFF ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x00,0xF8,0xF8,0x00,0xF9,0x78,0x00,0x0F,0xFF ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x01,0xFD,0xCF,0xFF,0x1E,0xFC,0x00,0x0F,0xFF ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x03,0xFA,0x3F,0xFF,0x66,0xFE,0x00,0x0F,0xFF ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x07,0xFD,0xFF,0xFD,0x79,0xFF,0x00,0x0F,0xFF ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x0E,0xF3,0xFF,0xFA,0xFE,0xF0,0x00,0x0F,0xFF ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x18,0x2F,0xFF,0xF0,0xFF,0x69,0x80,0x0F,0xFF ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

12864显示汉字,图型,任意点,任意直线程序(绝对能用)

#include #include #include #include sbit RS=P0^0; sbit RW=P0^1; sbit E=P0^2; sbit PSB=P0^3; sbit RES=P0^4; #define LCD12864_DatePort P2 unsigned char lcd_x,lcd_y; unsigned char h[]={"aaaaaaaaaaaaaaaa"}; unsigned char code image[1024]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0B,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xC0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0xFF,0xE0,0x00,0x00,0x00,0x1F,0xC1,0xC0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x07,0xFF,0xF8,0x00,0x00,0x00,0xFF,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1F,0xFF,0xFC,0x00,0x00,0x01,0xFF,0xFE,0x1F,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x3F,0xFF,0xFF,0x00,0x00,0x07,0xFF,0xFF,0x9E,0xC0,0x00,0x00,0x00,0x00, 0x00,0x00,0x7F,0xFF,0xFF,0x80,0x00,0x0F,0xFF,0xFF,0xEC,0x60,0x00,0x00,0x00,0x00, 0x00,0x00,0xFF,0xFF,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xE0,0x40,0x00,0x00,0x00,0x00, 0x00,0x01,0xFF,0x3E,0x3F,0xC0,0x00,0x1F,0xE3,0xE7,0xF0,0x80,0x00,0x00,0x00,0x00, 0x00,0x01,0xFE,0x1E,0x1F,0xE0,0x00,0x3F,0xE3,0xC3,0xF9,0x00,0x00,0x00,0x00,0x00, 0x00,0x03,0xFC,0x1C,0x1F,0xE0,0x00,0x3F,0xC1,0xC3,0xFC,0x00,0x00,0x00,0x00,0x00, 0x00,0x03,0xFC,0x6D,0x9F,0xF0,0x00,0x7F,0xC1,0x81,0xFE,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0xFC,0x6D,0x8F,0xF0,0x00,0x7F,0xCD,0xB1,0xFE,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0xFC,0x6D,0x9F,0xF0,0x00,0x7F,0xCF,0xB1,0xFF,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0xFC,0x1C,0x1F,0xF0,0x00,0xFF,0xC5,0xF3,0xFF,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0xFE,0x1E,0x1F,0xF8,0x00,0xFF,0xE3,0xC3,0xFF,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0xFF,0x3E,0x3F,0xF8,0x00,0xFF,0xE3,0xE7,0xFF,0x00,0x00,0x00,0x00,0x00, 0x00,0x0F,0xFF,0xF3,0xFF,0xF8,0x00,0xFF,0xFE,0x7F,0xFF,0x80,0x00,0x00,0x00,0x00,

LCD12864 全部子函数(包涵画图)

#include void delayu() { _nop_(); } //延时a * 1ms void delaym(uint a) { uint i, j; for(i = a; i > 0; i--) for(j = 110; j > 0; j--); } //检测LCD是否处于忙状态, 若忙返回1, 空闲返回0 bit checkBusy() { bit busy; RS = 0; RW = 1; E = 1; delayu(); busy = (bit)(LCD_DA TA&0x80); E = 0; return busy ; } //等待LCD到空闲 void wait() { while(checkBusy()); } //写命令 void write_com(uchar cmd) { wait(); RS = 0; RW = 0; E = 0; LCD_DATA = cmd; delayu(); E = 1; E = 0; } //写数据 void write_data(uchar dat)

{ wait(); RS = 1; RW = 0; E = 0; LCD_DATA = dat; delayu(); E = 1; E = 0; } //读数据 uchar read_data(void) { uchar dsp_data; wait(); LCD_DATA=0xFF; RS = 1; RW = 1; E=0; E=1; delayu(); dsp_data=LCD_DA TA; E = 0; return(dsp_data); } //初始化LCD void init() { write_com(0x30); //基本指令, 扩充指令为34H write_com(0x0c); //显示开, 关光标 write_com(0x01); //清屏 delaym(10); } void setPosition(uchar x, uchar y) { uchar p; switch(y%4) { case 0: p = 0x80; break; //第一行开始地址 case 1: p = 0x90; break; //第二行 case 2: p = 0x88; break; //第三行 case 3: p = 0x98; break; //第四行 } p += x;

12864液晶显示图片原理(完整版)

51单片机综合学习 12864液晶原理分析1 辛勤学习了好几天,终于对12864液晶有了些初步了解~没有视频教程学起来真有些累,基本上内部程序写入顺序都是根据程序自我变动,然后逆向反推出原理…… 芯片:YM12864R P-1 控制芯片:ST7920A 带中文字库 初步小结: 1、控制芯片不同,寄存器定义会不同 2、显示方式有并行和串行,程序不同 3、含字库芯片显示字符时不必对字符取模了 4、对芯片的结构地址一定要理解清楚 5、显示汉字时液晶芯片写入数据的顺序(即显示的顺序)要清楚 6、显示图片时液晶芯片写入数据的顺序(即显示的顺序)要清楚 7、显示汉字时的二级单元(一级为八位数据写入单元)要清楚

8、显示图片时的二级单元(一级为八位数据写入单元)要清楚 12864点阵液晶显示模块(LCM)就是由128*64个液晶显示点组成的一个128列*64行的阵列。每个显示点对应一位二进制数,1表示亮,0表示灭。存储这些点阵信息的RAM称为显示数据存储器。要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。图形或汉字的点阵信息由自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8 bits显示数据RAM。左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。显示点在64*64液晶屏上的位置由行号(line,0~63)与列号(column,0~63)确定。512*8 bits RAM中某个存储单元的地址由页地址(Xpage,0~7)和列地址

如何在LCD12864上任意画点

一、关于12864的画图功能。 我们知道在纸上画出一个点,我们要知道这个点在张纸上面的位置,也就是这个点在这张纸上面的坐标。而在12864上面画点也是一样,我们要先知道这个点在液晶屏上面的坐标,然后我们该坐标点黑或是点白可以了。而在这之前,我们要首先理解12864图形显示坐标。 12864的绘图显示坐标如图所示: 需要注意的是它的水平位址并不是一个点有一个位址的,它是16个格才有一个位址。它的垂直位址也分为上下两半部分。当我们给出位址是X是0,Y是0的时候,其实里面包含了16个点,也就是说我们一次要操作16个点。所有当我们要点亮一个点的时候,我们不仅要知道的位址,还要知道它在这个位址中是第几个位,也就是第几个点。 #include #define uint unsigned int #define uchar unsigned char sbit RS=P2^6; //这个是LCD的数据命令选择端 sbit RW=P2^5; //这个是LCD的写入或是读出选择端 sbit PSB=P3^2; //这个是LCD串行还是并行选择端 sbit RST=P3^4; //这个是LCD的复位端口 sbit LCDE=P2^7; // 这个是LCD的使能端 /* 延时子函数 */ void delay(uint x)

{ uint y; for(;x>0;x--) for(y=110;y>0;y--); } /* 忙碌检查 */ void lcd_busy() { RS=0; RW=1; P0=0XFF; LCDE=1; delay(2); while((P0&0x80)==0x80); /*如下图1,当LCD忙碌的时候BF位是为1,而我们只需要想知道这位,所有与上0x80,当它是1的时候得到0X80,当它是0的时候得到0.*/ LCDE=0; } /* 写入命令 */ void write_com(uchar com) { lcd_busy(); /*每次操作LCD之前都需要检查一次LCD是否忙碌,不过一般LCD工作比单片机快,所有都不用检查。*/ RS=0; RW=0; LCDE=0; P0=com; delay(1); LCDE=1; delay(3); LCDE=0; } /* 写入数据 */ void write_num(uchar num) { lcd_busy(); RS=1;

LCD12864 串行方式-画sin,直线,显示图像

#include #include #include /**************************************/ #define uchar unsigned char #define uint unsigned int #define clear 0x01 //清屏 #define reset_DDRAM 0x02 //DDRAM地址归位 #define left_move 0x04 //游标左移 #define right_move 0x06 //游标右移 #define all_left_move 0x05 //画面整体左移 #define all_right_move 0x07 //画面整体右移 #define display_left_move 0x10 //显示游标左移 #define display_right_move 0x14 //显示游标右移 #define set_function1 0x30 //基本指令集动作 #define set_CGRAM 0x40 //设定CGRAM地址 #define set_DDRAM 0x80 //设定DDRAM地址 #define set_function2 0x34 //扩充指令集动作 #define fanbai 0x04 //反白第一行(扩充指令集) #define set_GDRAM 0x80 //设定GDRAM地址(扩充指令集) #define ON_G 0x36 //开绘图显示(扩充指令集) #define set_function2 0x34 //关绘图显示(扩充指令集) //端口定义 sbit LCD_CS=P3^5; //片选信号 sbit LCD_SID=P3^6; //串行数据线 sbit LCD_SCLK=P3^4; //串上时钟输入 /**************************************/ //数组,字定义 /**************************************/ uchar code a[]={"阿姆YOUNG"}; //定义要显示的字符串 uint x=0; /**************************************/ //图片取模 /**************************************/ codeuchartu[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

LCD12864显示函数

#include #include //头文件 #include #define uint unsigned int #define uchar unsigned char sbit rs=P3^5; //数据命令选择端sbit wr=P3^6; //读写选择端 sbit psb=P3^7; //串、并方式控制sbit en=P3^4; //使能端 uchar t[10]; uchar code a[]="https://www.360docs.net/doc/3d15118258.html,"; //定义的数组uchar code b[]="一米阳光"; uchar code c[]="yimi23"; void delay(uint x) //延时函数 { uint i,j; for(i=0;i

P0=com; delay(5); en=1; delay(5); en=0; } void write_data(uchar dat) //写数据函数 { rs=1; //选择数据端 wr=0; en=0; P0=dat; //将所要发送的数据送到P0口delay(5); en=1; delay(5); en=1; } void lcdpos(uchar x,uchar y) //设定显示位置 { uchar pos; if(x==0){x=0x80;} else if(x==1){x=0x90;} else if(x==2){ x=0x88; } else if(x==3){ x=0x88;}

12864画圆程序 12864显示任意图形和字符

#include #include #define uchar unsigned char #define uint unsigned int #define Lcd_DatBus P0 sbit rs=P1^0; sbit rw=P1^1; sbit en=P1^2; sbit PSB=P1^3; uchar table[]={"我们是都好孩子!"}; uchar GDRAM_hbit=0; uchar GDRAM_lbit=0; /**************************************************************** 名称:delay1ms 功能:延时约1ms 参数:uchar n 返回值:无 *****************************************************************/ void delayms(uchar z) { uchar x,y; for(x=0;x

rw=1; do //判忙 { en=1; delayms(1); temp=P0; en=0; } while(temp&0x80); rw=0; P0=com; delayms(1); en=1; delayms(1); en=0; } /******************************************************** 名称:write_dat 功能:向液晶写入数据 参数:dat——显示数据 返回值:无 *********************************************************/ void Write_data(uchar dat) { uchar temp=0; rs=0; rw=1; do //判忙 { en=1; delayms(1); temp=P0; en=0; } while(temp&0x80); rs=1; rw=0; P0=dat; en=1; delayms(1); en=0;

相关文档
最新文档