论文部分内容阅读
摘 要:介绍了亚龙YL-236的 LCD12864液晶显示的组成、原理、内部功能器件和指令系统,如何利用亚龙YL-236液晶显示模块显示汉字及字符。
关键词:LCD12864;实现;功能
一、12864液晶显示简介
12864液晶显示是分辨率为128(列)×64(行)点阵型液晶显示器。显示模块如图所示。LCD12864模块包含带字库的不不带字库的,这里介绍的为不带字库的12864液晶显示。点阵式液晶模块LCD,不仅可以显示字符、数字,还可以显示各种图形、曲线及汉字,并且可以实现屏幕上下左右滚动,动画功能,分区开窗口,反转,闪烁等功能,其原理是控制LCD12864点阵中的点的亮暗,亮和暗的点阵按一定规律可以组成汉字,组成一幅图形和曲线等。
<F:\新建文件夹夏传凤\速读·上旬201505\Image\image1.jpeg>
二、指令说明
在使用12864LCD前先必须了解以下功能器件才能进行编程。12864内部功能器件及相关功能如下:
1.指令寄存器(IR)
IR是用于寄存指令码,与数据寄存器数据相对应。当RS=0时,在E信号下降沿的作用下,指令码写入IR。
2. 数据寄存器(DR)
DR是用于寄存数据的,与指令寄存器寄存指令相对应。当RS=1时,在下降沿作用下,图形显示数据写入DR,或在E信号高电平作用下由DR读到DB7∽DB0数据总线。DR和DDRAM之间的数据传输是模块内部自动执行的。
3. 忙标志:BF
BF标志提供内部工作情况。BF=1表示模块在内部操作,此时模块不接受外部指令和数据。BF=0时,模块为准备状态,随时可接受外部指令和数据。
4.显示控制触发器DFF
此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAY OFF),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。
5. XY地址计数器
XY地址计数器是一个9位计数器。高3位是X地址计数器,低6位为Y地址计数器,XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为DDRAM的页指针,Y地址计数器为DDRAM的Y地址指针。X地址计数器是没有记数功能的,只能用指令设置。Y地址计数器具有循环记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。
6. 显示数据RAM(DDRAM)
DDRAM是存储图形显示数据的。数据为1表示显示选择,数据为0表示显示非选择。DDRAM与地址和显示位置的关系见DDRAM地址表。
7. Z地址计数器
Z地址计数器是一个6位计数器,此计数器具备循环记数功能,它是用于显示行扫描同步。当一行扫描完成,此地址计数器自动加1,指向下一行扫描数据,RST复位后Z地址计数器为0。Z地址计数器可以用指令DISPLAY START LINE预置。因此,显示屏幕的起始行就由此指令控制,即DDRAM的数据从哪一行开始显示在屏幕的第一行。此模块的DDRAM共64行,屏幕可以循环滚动显示64行。
三、LCD12864的指令系统及时序
该类液晶显示模块(即KS0108B及其兼容控制驱动器)的指令系统比较简单,总共只有七种。其指令表如表所示:
<F:\新建文件夹夏传凤\速读·上旬201505\Image\image2.png>
四、程序流程图
五、实验程序
在LCD屏的中见位置显示“中国”两个汉字。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int ;#define db P1
#define dis_off 0x3f
#define dis_on 0X3e
#define dis_x 0xb8
#define dis_y 0x40
#define dis_z 0xb0
sbit rs=P0^0;sbit rst=P0^1;sbit cs1=P0^2;sbit cs2=P0^3;sbit rw=P0^4;
sbit e=P0^5;sbit bf=P1^7;sbit res=P1^4;
void chushihua(void);
void busy(void);
void wr_lcd(uchar ,uchar );
void clear(void);
void dis(uchar,uchar,uchar,uchar,uchar,uchar,uchar *);
void delay(uint);
uchar code tab[]={"中国"};//字模在液晶取模软件中生成
uchar *ptr0;
void main()
chushihua();
cs1=1;cs2=0;
ptr0=&tab;
dis(3,48,2,16,1,1,ptr0);
cs1=0;cs2=1;
ptr0=&tab[32];
dis(3,48,2,16,1,1,ptr0);
while(1);
void chushihua()
{rst=0;delay(100);rst=1;
cs1=1;cs2=1;
wr_lcd(0,dis_off);wr_lcd(0,dis_on);}
void wr_lcd(uchar i,uchar data0)
{busy();rs=i;db=data0;
e=1;delay(1);e=0;}
void busy()
{db=0xff;rs=0;rw=1;
e=1;while(bf||res);e=0;}
void clear()
{uchar i,j;cs1=1;cs2=1;wr_lcd(0,dis_on);
for(i=0;i<8;i++)
{wr_lcd(0,dis_x+i);wr_lcd(0,dis_y);wr_lcd(0,dis_z);
for(j=0;j<64;j++)wr_lcd(1,0x00);}
void dis(uchar x,uchar y,uchar ys,uchar ls,uchar hs,uchar zs,uchar *ptr)
{uchar i,j,k,l,a;
for(i=0;i<hs;i++)
{for(j=0;j<zs;j++)
{for(k=0;k<ys;k++)
{wr_lcd(0,dis_x+x+k);wr_lcd(0,dis_y+y+j*ls);wr_lcd(0,dis_z);
a=i*zs*ys*ls+j*ys*ls+k*ls;
for(l=0;l<ls;l++){wr_lcd(1,*(ptr+a+l));}
void delay(uint x)
{uchar i;for(;x>0;x--)for(i=0;i<124;i++);}
关键词:LCD12864;实现;功能
一、12864液晶显示简介
12864液晶显示是分辨率为128(列)×64(行)点阵型液晶显示器。显示模块如图所示。LCD12864模块包含带字库的不不带字库的,这里介绍的为不带字库的12864液晶显示。点阵式液晶模块LCD,不仅可以显示字符、数字,还可以显示各种图形、曲线及汉字,并且可以实现屏幕上下左右滚动,动画功能,分区开窗口,反转,闪烁等功能,其原理是控制LCD12864点阵中的点的亮暗,亮和暗的点阵按一定规律可以组成汉字,组成一幅图形和曲线等。
<F:\新建文件夹夏传凤\速读·上旬201505\Image\image1.jpeg>
二、指令说明
在使用12864LCD前先必须了解以下功能器件才能进行编程。12864内部功能器件及相关功能如下:
1.指令寄存器(IR)
IR是用于寄存指令码,与数据寄存器数据相对应。当RS=0时,在E信号下降沿的作用下,指令码写入IR。
2. 数据寄存器(DR)
DR是用于寄存数据的,与指令寄存器寄存指令相对应。当RS=1时,在下降沿作用下,图形显示数据写入DR,或在E信号高电平作用下由DR读到DB7∽DB0数据总线。DR和DDRAM之间的数据传输是模块内部自动执行的。
3. 忙标志:BF
BF标志提供内部工作情况。BF=1表示模块在内部操作,此时模块不接受外部指令和数据。BF=0时,模块为准备状态,随时可接受外部指令和数据。
4.显示控制触发器DFF
此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAY OFF),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。
5. XY地址计数器
XY地址计数器是一个9位计数器。高3位是X地址计数器,低6位为Y地址计数器,XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为DDRAM的页指针,Y地址计数器为DDRAM的Y地址指针。X地址计数器是没有记数功能的,只能用指令设置。Y地址计数器具有循环记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。
6. 显示数据RAM(DDRAM)
DDRAM是存储图形显示数据的。数据为1表示显示选择,数据为0表示显示非选择。DDRAM与地址和显示位置的关系见DDRAM地址表。
7. Z地址计数器
Z地址计数器是一个6位计数器,此计数器具备循环记数功能,它是用于显示行扫描同步。当一行扫描完成,此地址计数器自动加1,指向下一行扫描数据,RST复位后Z地址计数器为0。Z地址计数器可以用指令DISPLAY START LINE预置。因此,显示屏幕的起始行就由此指令控制,即DDRAM的数据从哪一行开始显示在屏幕的第一行。此模块的DDRAM共64行,屏幕可以循环滚动显示64行。
三、LCD12864的指令系统及时序
该类液晶显示模块(即KS0108B及其兼容控制驱动器)的指令系统比较简单,总共只有七种。其指令表如表所示:
<F:\新建文件夹夏传凤\速读·上旬201505\Image\image2.png>
四、程序流程图
五、实验程序
在LCD屏的中见位置显示“中国”两个汉字。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int ;#define db P1
#define dis_off 0x3f
#define dis_on 0X3e
#define dis_x 0xb8
#define dis_y 0x40
#define dis_z 0xb0
sbit rs=P0^0;sbit rst=P0^1;sbit cs1=P0^2;sbit cs2=P0^3;sbit rw=P0^4;
sbit e=P0^5;sbit bf=P1^7;sbit res=P1^4;
void chushihua(void);
void busy(void);
void wr_lcd(uchar ,uchar );
void clear(void);
void dis(uchar,uchar,uchar,uchar,uchar,uchar,uchar *);
void delay(uint);
uchar code tab[]={"中国"};//字模在液晶取模软件中生成
uchar *ptr0;
void main()
chushihua();
cs1=1;cs2=0;
ptr0=&tab;
dis(3,48,2,16,1,1,ptr0);
cs1=0;cs2=1;
ptr0=&tab[32];
dis(3,48,2,16,1,1,ptr0);
while(1);
void chushihua()
{rst=0;delay(100);rst=1;
cs1=1;cs2=1;
wr_lcd(0,dis_off);wr_lcd(0,dis_on);}
void wr_lcd(uchar i,uchar data0)
{busy();rs=i;db=data0;
e=1;delay(1);e=0;}
void busy()
{db=0xff;rs=0;rw=1;
e=1;while(bf||res);e=0;}
void clear()
{uchar i,j;cs1=1;cs2=1;wr_lcd(0,dis_on);
for(i=0;i<8;i++)
{wr_lcd(0,dis_x+i);wr_lcd(0,dis_y);wr_lcd(0,dis_z);
for(j=0;j<64;j++)wr_lcd(1,0x00);}
void dis(uchar x,uchar y,uchar ys,uchar ls,uchar hs,uchar zs,uchar *ptr)
{uchar i,j,k,l,a;
for(i=0;i<hs;i++)
{for(j=0;j<zs;j++)
{for(k=0;k<ys;k++)
{wr_lcd(0,dis_x+x+k);wr_lcd(0,dis_y+y+j*ls);wr_lcd(0,dis_z);
a=i*zs*ys*ls+j*ys*ls+k*ls;
for(l=0;l<ls;l++){wr_lcd(1,*(ptr+a+l));}
void delay(uint x)
{uchar i;for(;x>0;x--)for(i=0;i<124;i++);}