12864液晶显示原理(C代码)

12864液晶显示原理(C代码)本文详细介绍了 12864 点阵型液晶显示原理 包括显示模式 指令系统及时序 并提供了软硬件设计实例

大家好,欢迎来到IT知识分享网。

目录:

一、12864液晶显示原理

1、点阵LCD的显示原理

2、12864点阵型LCD简介

3、12864LCD的指令系统及时序

4、12864点阵LCD软硬件设计

1)简介   2)硬件原理图   3)程序流程图   4)字模代码

5、12864点阵型LCD应用举例

1)硬件部分   2)软件部分

6、实物显示效果

二、12864液晶显示任何图像

1、所需软件

1)Any to Icon软件   2)Windows画图软件   3)字模提取软件

2、DIY一副图画

3、C语言代码

附录

1、机内码和区位码的区别

2、液晶屏常识

1)什么是COG型LCD   2)LCD显示模块的外部接口


一、12864液晶显示原理

1、点阵LCD的显示原理

在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码(汉字ASCII码)。而剩下的低128位则留给英文字符使用,即英文的内码。机内码和区位码的区别见附录。

那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的’A’在字模的记载方式如图1所示:

12864液晶显示原理(C代码)

图1 “A”字模图

而中文的“你”在字模中的记载却如图2所示:

12864液晶显示原理(C代码)

图2 “你”字模图

如果需要反白只要取反“位代码”即可。

2、12864点阵型LCD简介

12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128*64全点阵液晶显示器组成。可完成图形显示,也可以显示8*4个(16*16点阵)汉字。

管脚号 管脚名称 LEVER 管脚功能描述
1 VSS 0 电源地
2 VDD +5.0V 电源电压
3 V0 液晶显示器驱动电压
4 D/I(RS) H/L D/I=“H”,表示DB7~DB0为显示数据
D/I=“L”,表示DB7~DB0为显示指令数据
5 R/W H/L R/W=“H”,E=“H”数据被读到DB7DB0
R/W=“L”,E=“H→L”数据被写到IR或DR
6 E H/L
R/W=“L”,E信号下降沿锁存DB7~DB0
R/W=“H”,E=“H”DDRAM数据读到DB7~DB0
7 DB0 H/L 数据线
8 DB1 H/L 数据线
9 DB2 H/L 数据线
10 DB3 H/L 数据线
11 DB4 H/L 数据线
12 DB5 H/L 数据线
13 DB6 H/L 数据线
14 DB7 H/L 数据线
15 CS1 H/L H:选择芯片(右半屏)信号
16 CS2 H/L H:选择芯片(左半屏)信号
17 RET H/L 复位信号,低电平复位
18 VOUT -10V LCD驱动负电压
19 LED+ LED背光板电源
20 LED- LED背光板电源

表1:12864LCD的引脚说明

在使用12864LCD前先必须了解以下功能器件才能进行编程。12864内部功能器件及相关功能如下:

①指令寄存器(IR)

     IR是用于寄存指令码,与数据寄存器数据相对应。当D/I=0时,在E信号下降沿的作用下,指令码写入IR。

②数据寄存器(DR)

       DR是用于寄存数据的,与指令寄存器寄存指令相对应。当D/I=1时,在下降沿作用下,图形显示数据写入DR,或在E信号高电平作用下由DR读到DB7~DB0数据总线。DR和DDRAM之间的数据传输是模块内部自动执行的。

③忙标志:BF

       BF标志提供内部工作情况。BF=1表示模块在内部操作,此时模块不接受外部指令和数据。BF=0时,模块为准备状态,随时可接受外部指令和数据。

       利用STATUS READ指令,可以将BF读到DB7总线,从检验模块之工作状态。

④显示控制触发器DFF

       此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAY ON),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。

     DDF的状态是指令DISPLAY ON/OFF和RST信号控制的。

⑤XY地址计数器

       XY地址计数器是一个9位计数器。高3位是X地址计数器,低6位为Y地址计数器,XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为DDRAM的页指针,Y地址计数器为DDRAM的Y地址指针。

       X地址计数器是没有记数功能的,只能用指令设置。

       Y地址计数器具有循环记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。

⑥显示数据RAM(DDRAM)

       DDRAM是存储图形显示数据的。数据为1表示显示选择,数据为0表示显示非选择。DDRAM与地址和显示位置的关系见DDRAM地址表。

⑦Z地址计数器

       Z地址计数器是一个6位计数器,此计数器具备循环记数功能,它是用于显示行扫描同步。当一行扫描完成,此地址计数器自动加1,指向下一行扫描数据,RST复位后Z地址计数器为0。

       Z地址计数器可以用指令DISPLAY START LINE预置。因此,显示屏幕的起始行就由此指令控制,即DDRAM的数据从哪一行开始显示在屏幕的第一行。此模块的DDRAM共64行,屏幕可以循环滚动显示64行。

3、12864LCD指令系统及时序

       该类液晶显示模块(即KS0108B及其兼容控制驱动器)的指令系统比较简单,总共只有七种。其指令表如表2所示:

指令名称 控制信号 控制代码
R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
显示开关 0 0 0 0 1 1 1 1 1 1/0
显示起始行设置 0 0 1 1 X X X X X X
页设置 0 0 1 0 1 1 1 X X X
列地址设置 0 0 0 1 X X X X X X
读状态 1 0 BUSY 0 ON/OFF RST 0 0 0 0
写数据 0 1 写数据
读数据 1 1 读数据

                                                  表2:12864LCD指令表

各功能指令分别介绍如下。

①显示开/关指令

R/WRS DB7 DB6 DB5 DB4 DB3DB2DB1 DB0
00 00/0

当DB0=1时,LCD显示RAM中的内容;DB0=0时,关闭显示。

显示起始行(ROW)设置指令

R/WRS DB7 DB6 DB5 DB4 DB3DB2DB1 DB0
00 11显示起始行(0~63)

该指令设置了对应液晶屏最上一行的显示RAM的行号,有规律地改变显示起始行,可以使LCD实现显示滚屏的效果。

页(PAGE)设置指令

R/WRS DB7 DB6 DB5 DB4 DB3DB2DB1 DB0
00 10111页号(0~7)

显示RAM共64行,分8页,每页8行。

列地址(Y Address)设置指令

R/WRS DB7 DB6 DB5 DB4 DB3DB2DB1 DB0
00 01显示列地址(0~63)

设置了页地址和列地址,就唯一确定了显示RAM中的一个单元,这样MPU就可以用读、写指令读出该单元中的内容或向该单元写进一个字节数据。

读状态指令

R/WRS DB7 DB6 DB5 DB4 DB3DB2DB1 DB0
10 BUSY0ON/OFFREST0000

该指令用来查询液晶显示模块内部控制器的状态,各参量含义如下:

BUSY:    1-内部在工作,0-正常状态

ON/OFF:1-显示关,0-显示打开

RESET:   1-复位状态,0-正常状态

在BUSY和RESET状态时,除读状态指令外,其它指令均不对液晶显示模块产生作用。

在对液晶显示模块操作之前要查询BUSY状态,以确定是否可以对液晶显示模块进行操作。

写数据指令

R/WRS DB7 DB6 DB5 DB4 DB3DB2DB1 DB0
01 写数据

⑦读数据指令

R/WRS DB7 DB6 DB5 DB4 DB3DB2DB1 DB0
11 读显示数据

读、写数据指令每执行完一次读、写操作,列地址就自动增一。必须注意的是,进行读操作之前,必须有一次空读操作,紧接着再读才会读出所要读的单元中的数据。

4、12864点阵LCD软硬件设计

1)简介

通过以上学习,现在就来实际应用12864LCD的软硬件设计。本实例将在LCD上显示如图3所示内容。

12864液晶显示原理(C代码)

图3 模拟显示效果图

在调试前先将显示切换开关切换到LCD显示状态。

12864液晶显示原理(C代码)

12864液晶显示原理(C代码)

图4 128*64LCD实验演示图

——————————

2)硬件原理图

12864液晶显示原理(C代码)

图5 硬件原理图

——————————

3)程序流程图

12864液晶显示原理(C代码)

图6 软件流程图

——————————

4)字模代码

(1)选择小四号字体(12号):宽*高=16*16(横向16点,竖向16点)。

在编写软件代码之前必须要先掌握汉字取模的方法。要得到上表中的文字,可以借助取模软件来完成。目前点阵LCD的取模软件有很多,本处使用的软件移步:LCD、数码管-生成代码软件。

打开取模软件出现如下显示界面:

12864液晶显示原理(C代码)

在文字输入区中输入文字,我们以输入一个欢迎的“欢”字为例,了解其取模过程。在文字输入区中输入“欢”后按CTRL+ENTER组合键后就看到“欢”字已经在模拟显示区显示出来了。

12864液晶显示原理(C代码)

在“取模方式”中选择“C51格式”就可以在“点阵生成区”得到你要的汉字“欢”的显示代码。

12864液晶显示原理(C代码)

12864液晶显示原理(C代码)

经过以上步骤后一个汉字就取模成功了,在程序中只要调用这段代码就可显示出汉字“欢”了,其它汉字也用同样的方法。取完要显示的全部汉字代码后我们就可以编程了。

——————

(2)选择五号字体(11号):横向取模16*14,纵向取模14*16。

横向取模:

12864液晶显示原理(C代码)

0001 0010,0000 0000    0x12,0x00

0001 0010,0000 0000    0x12,0x00

0001 0111,1111 1000    0x17,0xF8

0010 0100,0000 1000    0x24,0x08

横向取模,字节倒序,所得点阵数据如下:

12864液晶显示原理(C代码)

即对上面“横向取模,字节正序”的每一字节倒过来,即:

0100 1000,0000 0000    0x48,0x00

0100 1000,0000 0000    0x48,0x00

1110 1000,0001 1111    0xE8,0x1F

0010 0100,0001 0000    0x24,0x10

纵向取模:

12864液晶显示原理(C代码)

0000 0010,0000 0100    0x02,0x04

0001 1111,0111 0000    0x1F,0xE0

1110 0001,0010 0000    0x08,0x30

0010 0111,0010 0111    0xE1,0x20

纵向取模,字节倒序,所得点阵数据如下: 

12864液晶显示原理(C代码)

即对上面“纵向取模,字节正序”的每一字节倒过来,即:

0100 0000,0010 0000

1111 1000,0000 0111

0010 0000,0000 1100

1000 0111,0000 0100

5、12864点阵型LCD应用举例

1)硬件部分

(1)整体电路

一块驱动器控制64*64个点,左右显示,这就是为什么引脚有CS1和CS2的原因。

12864液晶显示原理(C代码)

12864液晶显示原理(C代码)

——————

(2)原件列表

12864液晶显示原理(C代码)

2)软件部分

常用数据类型内存存储形式请移步:常用数据类型内存存储形式汉字在内存中的存储形式见“7、使用C-Free查看数据在内存中的存储”。

(1)程序架构

12864液晶显示原理(C代码)

—————–

(2)主程序

#include "includes.h" void main() {     lcd_init(); //初始化     lcd_clear(0); //清屏     lcd_set_line(0); //设置起始行为0     display(1,2,2*16,jiao); //交     display(1,2,3*16,liu); //流     display(2,2,4*16,shi); //使     display(2,2,5*16,yong); //用     while(1); }

—————–

(3)驱动程序

#include "lcd.h>" #include "intrins.h" #define lcd_databus P2         //LCD的8位数据总线 void lcd_r_busy() {     P2=0x00;     RS=0;     RW=1;     EN=1;     while(P2&0x80);     EN=0;  } void lcd_w_cmd(uchar value) {     lcd_r_busy();        //每次读写操作前都要忙判断     RS=0;     RW=0;     lcd_databus=value;     EN=1;                //下降沿锁存写入的数据/命令     _nop_();     _nop_();     EN=0; } void lcd_w_data(uchar value) {     lcd_r_busy();     RS=1;     RW=0;     lcd_databus=value;     EN=1;                //下降沿锁存写入的数据/命令     _nop_();     _nop_();     EN=0; } void lcd_set_page(uchar page) {     page=0xb8 | page;     //页的首地址为0xb8:page或上0xb8=选择page页     lcd_w_cmd(page); } void lcd_set_line(uchar sline) {     sline=0xc0 | sline;   //起始行地址为0xc0:sline或上0xc0=选择行     lcd_w_cmd(sline); } void lcd_set_column(uchar column) {     column=0x3f & column;   //与上列的最大值63:0x3f  可得所选列值<63     column=0x40 | column;   //得列的首地址     lcd_w_cmd(column); } void lcd_on_off(uchar set) {     set=0x3e | set;        //=0011 111x----0x3e为关闭显示;0x3f为开启显示     lcd_w_cmd(set); } void lcd_cs(uchar sel) {     switch(sel)     {         case 0:CS1=0; CS2=0; break;     //全屏显示         case 1:CS1=0; CS2=1; break;     //左显示         case 2:CS1=1; CS2=0; break;     //右显示         default:break;     } } void lcd_clear(uchar sel) {     uchar i,j;     lcd_cs(sel);     for(i=0;i<8;i++)     {         lcd_set_page(i);         lcd_set_column(0);         for(j=0;j<64;j++)         {             lcd_w_data(0x00);   //每列全部写0,列地址指针自动+1         }     } } void lcd_init() {     lcd_r_busy();     lcd_cs(0);     lcd_on_off(0);  //关显示     lcd_cs(0);     lcd_on_off(1);  //开显示     lcd_cs(0);     lcd_clear(0);   //清全屏     lcd_set_line(0);    //起始行设为0 } void display(uchar cs, uchar page, uchar column, uchar *p) {     uchar i;     lcd_cs(cs);     lcd_set_page(page);             //要在本页写上半个汉字8*16     lcd_set_column(column);         //选择起始列     for(i=0;i<16;i++)     {         lcd_w_data(p[i]);           //按列输入上半个汉字的编码8*16     }     lcd_set_page(page+1);           //要在下一页写下半个汉字8*16     lcd_set_column(column);         //选择起始列     for(i=0;i<16;i++)     {         lcd_w_data(p[i+16]);     } }

—————–

(4)字库文件

#ifndef _ZIKU_H_ #define _ZIKU_H_ //  交 const uchar code jiao[]={ 0x08,0x08,0x88,0x68,0x08,0x08,0x09,0x0E,0x08,0x08,0x88,0x28,0x48,0x88,0x08,0x00, 0x80,0x81,0x40,0x40,0x21,0x22,0x14,0x08,0x14,0x22,0x41,0x40,0x80,0x81,0x80,0x00, }; //  流 const uchar code liu[]={ 0x10,0x60,0x02,0x8C,0x00,0x44,0x64,0x54,0x4D,0x46,0x44,0x54,0x64,0xC4,0x04,0x00, 0x04,0x04,0x7E,0x01,0x80,0x40,0x3E,0x00,0x00,0xFE,0x00,0x00,0x7E,0x80,0xE0,0x00, }; //  使 const uchar code shi[]={ 0x80,0x60,0xF8,0x07,0x04,0xE4,0x24,0x24,0x24,0xFF,0x24,0x24,0x24,0xE4,0x04,0x00, 0x00,0x00,0xFF,0x00,0x80,0x81,0x45,0x29,0x11,0x2F,0x41,0x41,0x81,0x81,0x80,0x00, }; //  用 const uchar code yong[]={ 0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00, 0x80,0x60,0x1F,0x02,0x02,0x02,0x02,0x7F,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00, }; #endif

6、实物显示效果

支持中文与英文显示,中文显示效果如下图所示。

12864液晶显示原理(C代码)

英文显示效果如下图所示。

12864液晶显示原理(C代码)

偶遇了一个人工智能学习的宝藏网站,知识深入浅出,讲解风格既风趣又幽默,让人欲罢不能!快来一起探索,让学习AI变得轻松又有趣,保证让你大呼过瘾,不容错过! 点击跳转到网站

二、12864液晶显示任意图像

1、所需软件

1)Any to Icon软件

12864液晶显示原理(C代码)

作用:用来把随意彩图,转化成黑白2色图。

——————————

2)Windows画图软件

12864液晶显示原理(C代码)

作用:用来编辑DIY2色图片,并可改属性改成128X64像素。

——————————

3)字模提取软件

12864液晶显示原理(C代码)

作用:把128X64像素的图片,生成编程所需要的十六进制代码。

2、DIY一副图画

12864液晶显示原理(C代码)

Win7系统画图软件,128 x 64像素,放大到最大。就像在一张白纸上画自己想画的,或修改一副2色的BMP图,然后在让它在液晶上显示。步骤如下:

1)双击打开Windows画图软件

2)点击 图像->属性,设置如下,确定

12864液晶显示原理(C代码)

 3)点击 查看-> 缩放-> 自定义

选择缩放到600%,确定。

4)点击 查看-> 缩放-> 显示网格

12864液晶显示原理(C代码)

5)通过画图工具可在网格内自己写字和画图

12864液晶显示原理(C代码)

6)如果已有一幅2色的BMP图,但不是128X64,用同样方法把图像用画图软件打开,放大,加上网格,再进行编辑。

12864液晶显示原理(C代码)

编辑成自己需要的,如下:

12864液晶显示原理(C代码)

7)保存,退出画图。

8)双击打开取字模软件软件,点击“打开图像图标”按钮。

12864液晶显示原理(C代码)

9)点击‘参数设置’->其他选项,设置如下:

12864液晶显示原理(C代码)

10)取模方式用C51格式,把点阵生成区的代码复制到程序中即可。若是彩图,先用Any to Icon软件转化成2色黑白图,重复以上步骤即可。

3、C语言代码

#include "AT89X52.h" #include "intrins.h" #define uint unsigned int #define uchar unsigned char #define lcddata P0   //宏定义lcddata为P0口数据 sbit rs=P2^0;    //定义数据,命令端 sbit rw=P2^1;   //定义读写端 sbit e=P2^2;     //定义使能端 sbit busy=P0^7; uchar code tab[]= { 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x20,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,0x40, 0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x40, 0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x40, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x01,0xC2,0x40, 0x00,0x00,0x00,0x06,0x30,0x01,0xE0,0x00,0x00,0x2A,0x00,0x00,0xD8,0x01,0xC6,0x40, 0x00,0x00,0x00,0x0F,0x7B,0x63,0xE0,0x00,0x00,0x22,0x00,0x01,0x24,0x00,0x04,0x40, 0x00,0x00,0x00,0x0F,0xFB,0x63,0x07,0x34,0x00,0x14,0x00,0x01,0x04,0x00,0x08,0xF8, 0x00,0x00,0x00,0x0D,0xDB,0x63,0x01,0xBC,0x00,0x08,0x00,0x00,0x88,0x00,0x1F,0x40, 0x00,0x04,0x00,0x0C,0x1B,0x63,0x07,0xB0,0x00,0x00,0x00,0x00,0x50,0x00,0x30,0x40, 0x00,0x06,0x00,0x0C,0x1B,0x63,0xED,0xB0,0xDB,0x00,0x01,0x00,0x20,0x00,0x00,0x40, 0x00,0x02,0x00,0x0C,0x19,0xE1,0xE7,0xB0,0xDB,0x00,0x02,0x00,0x00,0x00,0x00,0x40, 0x00,0x02,0x00,0x0C,0x19,0xE1,0xE7,0xB0,0xDB,0x00,0x02,0x00,0x00,0x00,0x00,0x40, 0x00,0x02,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x42, 0x00,0x02,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x03,0xFF,0xFE, 0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x05,0x00,0x00,0x00,0x40, 0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x0A,0x80,0x00,0x00,0x40, 0x00,0x02,0x20,0x00,0x00,0x0A,0x00,0x00,0xFF,0xF8,0xE0,0x05,0x00,0x00,0x00,0x40, 0x00,0x82,0x20,0x06,0xC0,0x15,0x00,0x1F,0xFF,0xFF,0xC0,0x02,0x00,0x00,0x00,0x40, 0x00,0x82,0x30,0x09,0x20,0x11,0x00,0xFB,0xFF,0xE1,0xF8,0x00,0x00,0x00,0x00,0x40, 0x01,0x82,0x10,0x08,0x20,0x0A,0x03,0x9F,0x00,0x9E,0x3E,0x00,0x00,0x00,0x00,0x40, 0x01,0x02,0x10,0x04,0x40,0x04,0x0E,0x70,0x00,0x81,0xC7,0x80,0x01,0x40,0x00,0x40, 0x01,0x02,0x08,0x02,0x80,0x00,0x1D,0x80,0x00,0xE0,0x61,0xE0,0x02,0xA0,0x00,0x40, 0x02,0x02,0x08,0x01,0x00,0x00,0x77,0x9F,0xFC,0xF0,0x18,0xF8,0x02,0x20,0x00,0x40, 0x06,0x02,0x08,0x00,0x00,0x01,0xDF,0x00,0x00,0xF3,0x0C,0x3C,0x01,0x40,0x00,0x00, 0x0C,0x06,0x0C,0x00,0x00,0x03,0x9E,0x00,0x00,0xF8,0x06,0x1E,0x00,0x80,0x00,0x00, 0x00,0x44,0x04,0x00,0x00,0x07,0x0E,0x30,0x01,0xFC,0x7F,0x07,0x00,0x00,0x00,0x00, 0x00,0x6C,0x06,0x00,0x00,0x07,0x0E,0x30,0x01,0xFC,0x7F,0x07,0x00,0x00,0x00,0x00, 0x00,0x38,0x03,0x00,0x00,0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0x83,0xC0,0x00,0x00,0x00, 0x00,0x18,0x00,0x00,0x0F,0xFD,0xFF,0xFF,0xFF,0xFF,0xFC,0x01,0xF0,0x00,0x78,0x00, 0x00,0x00,0x00,0x00,0x3F,0x81,0xFF,0x00,0x00,0x00,0x00,0x1F,0xF0,0x00,0x48,0x00, 0x00,0x00,0x00,0x00,0xFE,0xF0,0x00,0x00,0x01,0x00,0x00,0xC0,0x1C,0x00,0x44,0x00, 0x00,0x03,0x00,0x03,0xC0,0x07,0x80,0x00,0x03,0xE2,0x07,0x00,0x1C,0x00,0x46,0x00, 0x00,0x06,0x00,0x03,0x80,0x03,0x40,0x00,0x03,0xE0,0x0C,0x00,0x0E,0x00,0x42,0x00, 0x00,0x1C,0x00,0x07,0x00,0x00,0xC0,0x00,0x00,0x20,0x18,0x00,0x07,0x00,0x42,0x00, 0x00,0xF0,0x00,0x09,0x01,0x80,0x60,0x00,0x00,0x20,0x73,0x9F,0x03,0x80,0x42,0x00, 0x00,0x10,0x00,0x1E,0x0F,0xF2,0x20,0x00,0x00,0x20,0x67,0xFF,0xC1,0xC0,0x46,0x00, 0x00,0x10,0x00,0x1E,0x1F,0xF9,0x30,0x00,0x00,0x20,0xEF,0xFF,0xE0,0xE0,0x7C,0x00, 0x03,0xFC,0x00,0x38,0x3F,0xFC,0x90,0x00,0x00,0x20,0xCB,0xFF,0xF9,0xF0,0xFF,0x00, 0x00,0x10,0x00,0x7F,0x7F,0xFE,0x10,0x00,0x00,0x20,0xDB,0xFF,0xFF,0xF0,0x41,0xC0, 0x00,0x10,0x00,0x6E,0xF9,0xBF,0x10,0x00,0x00,0x20,0xF7,0xED,0xFF,0xF0,0x40,0x60, 0x00,0x11,0x00,0x7C,0xFC,0x3F,0x10,0x00,0x00,0x20,0x67,0xE1,0xFD,0xE0,0x40,0x30, 0x03,0xFF,0x00,0x7C,0xFC,0x3F,0x10,0x00,0x00,0x20,0x67,0xE1,0xFD,0xE0,0xC0,0x10, 0x00,0x10,0x00,0x38,0xFC,0x3F,0x18,0x00,0x00,0x20,0x87,0xE0,0xFD,0xC0,0x80,0x08, 0x00,0x20,0x00,0x38,0xF1,0x8F,0x18,0x00,0x1F,0xE7,0x87,0x9C,0x7D,0xC0,0x80,0x08, 0x00,0x60,0x00,0x1C,0xFE,0x1F,0x81,0xFF,0xFF,0xC0,0x0F,0xE0,0xFF,0x80,0x80,0x04, 0x00,0x40,0x00,0x0C,0xFC,0x3F,0x80,0x00,0x00,0x00,0x0F,0xE1,0xF8,0x00,0x80,0x04, 0x01,0x80,0x00,0x00,0xF9,0xBF,0xE0,0x00,0x00,0x00,0x03,0xEC,0xF6,0x01,0x80,0x0C, 0x01,0xC3,0x00,0x00,0xF9,0xBF,0x00,0x00,0x00,0x00,0x00,0xFF,0xCC,0x01,0x80,0x18, 0x00,0x3F,0x80,0x00,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x81,0xF0, 0x00,0x00,0xC0,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00, 0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x20,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,0x00,0x00,0x00,0x00, }; void delaynms(uint aa) {   uchar bb;   while(aa--)   {    for(bb=0;bb<115;bb++) //1ms基准延时程序    {      ;    }   } } void busy_lcd(void) {    busy=1;    //把忙标志位置1    e=0;       //把使能端置0    rs=0;      //把rs端置0,为指令操作    rw=1;      //为读操作    e=1;       //拉高使能端    _nop_();   //等待    while(busy==1); //检测忙标志位    e=0;       //忙标志位为0,则把使能拉低 } void wr_i_lcd(comm) {   busy_lcd();  //忙标志检测   rs=0;        //指令操作   rw=0;        //写入操作   e=1;         //拉高使能端   lcddata=comm;  //放上数据   _nop_();       //等待   e=0;         //拉低使能端,数据写入液晶 } void wr_d_lcd(dat) {   busy_lcd(); //忙标志检测   rs=1;       //数据操作   rw=0;       //写入操作   e=1;        //拉高使能端   lcddata=dat;//放上数据   _nop_();    //等待   e=0;        //拉低使能端,数据写入液晶 } void init_lcd(void) {   wr_i_lcd(0x30);  //基本指令集   delaynms(1);    //等待   wr_i_lcd(0x30);  //再设置一次为基本指令集,因为ST7920中有2个寄存器用来设置使用哪个指令集   delaynms(1);    //等待   wr_i_lcd(0x0c);  //开显示,关游标,关游标位置   delaynms(1);    //等待   wr_i_lcd(0x01);  //清屏,地址指针指向00H   delaynms(20);    //等待>10ms   wr_i_lcd(0x06);  //光标右移,整体不移 } void img_disp(uchar code *img) {   uchar i,j;   for(j=0;j<32;j++)   {    for(i=0;i<8;i++)  {    wr_i_lcd(0x34);    //扩充指令集,关绘图    wr_i_lcd(0x80+j);  //先将垂直坐标(Y)写入绘图RAM地址    wr_i_lcd(0x80+i);  //再将水平坐标(X)写入绘图RAM地址    wr_i_lcd(0x30);    //打开基本指令集    wr_d_lcd(img[j*16+i*2]);  //将D15--D8写入到RAM    wr_d_lcd(img[j*16+i*2+1]); //将D7--D0写入到RAM  }   }   for(j=32;j<64;j++) //下半屏   {    for(i=0;i<8;i++)    {      wr_i_lcd(0x34); //扩充指令集,关绘图      wr_i_lcd(0x80+j-32); //先将垂直坐标(Y)写入绘图RAM地址      wr_i_lcd(0x88+i); //再将水平坐标(X)写入绘图RAM地址      wr_i_lcd(0x30); //打开基本指令集      wr_d_lcd(img[j*16+i*2]); //将D15--D8写入到RAM      wr_d_lcd(img[j*16+i*2+1]); //将D7 --D0写入到RAM     }   }   wr_i_lcd(0x36); //打开绘图显示 } void main(void) {   while(1)   {     init_lcd();     //初始化      img_disp(tab);    //显示图像      delaynms(1000);   } }

附录

1、机内码和区位码的区别

已知“计算机”三个汉字的机内码分别是:(BCC6)H 、(CBE3)H 、(BBFA)H ,写出这三个汉字对应的区位码。

机内码和区位码的对应关系:机内码在高位是1(这是为了表示和ASCII的区别),区位码的最高位是0。

比如第一个 ( BCC6)H,把B转换为2进制就是1011,把最高位的1变成0,就成了0011,所以( BCC6)H的区位码是(3CC6)H。

2、液晶屏常识

1)什么是COG型LCD

LCD(液晶显示屏)会有线驱动电路来进行控制,水平方向叫门驱动(Gate Driver),垂直方向叫源驱动(Source Driver),这些集成电路(Chip)要放在哪里,就成了LCD的技术。

COG是Chip On Glass的缩写,就是驱动芯片直接绑定在玻璃上,透明的。这种LCD特点为

(1)工艺简化。直接将IC邦贴到LCD屏的导电极上,减少了焊接工艺;

(2)体积比COB(Chip On Board)大大缩小,更易于小型化、简易化和高度集成化。将PCB线路直接制作在LCD屏上,因此广泛用于需减少体积的便携式整机产品,如手机、PDA、MP3、手表、信息电话、手持式仪器仪表等,并可延伸至TFT后工序;

(3)直接将IC倒装邦贴到LCD屏上,不存在IC变形等问题。

——————————

2)LCD显示模块的外部接口

LCD显示模块的外部接口一般采用并行方式,并行接口接口线的读写时序常见以下两种模式:

(1)8080模式,并行

这类模式通常有下列接口信号:Vcc(工作主电源)、Vss(公共端)、Vee(偏置负电源,常用于调整显示对比度)/RES、复位线。

DB0~DB7双向数据线。D/I数据/指令选择线(1:数据读写,0:命令读写)。/CS片选信号线(若有多片组合,可有多条片选信号线)。

/WR, MPU向LCD写入数据控制线。/RD MPU从LCD读入数据控制线。具体释义:

Vcc 工作主电源

Vss 公共端

Vee 偏置负电源,常用于调整显示对比度

/RES 复位线

DB0~DB7 双向数据线

D/I 数据/指令选择线(1:数据读写,0:命令读写)

/CS 片选信号线(如果有多片组合,可有多条片选信号线)

/WR MPU向LCD写入数据控制线

/RD MPU从LCD读入数据控制线

—————–

(2)6800模式,并行

在这种模式下,Vcc、Vss、Vee、/RES、DB0~DB7、D/I的功能同模式1),其他信号线为:R/W,读写控制(1:MPU读, 0:MPU写)。具体释义:

E 允许信号(多片组合时,可有多条允许信号线)

R/W 读写控制(1:MPU读, 0:MPU写)

用户可以根据自己的实际情况选择合适的时序

一般选择6800时序,但是写代码的时候要注意时序;如果选择8080时序,要注意PCB的连接方式。

—————–

(3)串行模式


青春时代是一个短暂的美梦,当你醒来时,它早已消失得无影无踪。觉得不错,动动发财的小手点个赞哦!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/123174.html

(0)
上一篇 2024-11-19 20:26
下一篇 2024-11-19 20:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信