st7920系列显示器驱动芯,设定点与DDRAM地址计数器AC是什么来,可不可具体介绍?通俗易懂一点

如题所述

你说PIC16F877A单片机的12864液晶串行显示驱动器!
使用与中国的字体控制芯片ST7920的屏幕,屏幕应该是12864,你可以在中国字体,带有内置的模块,只要你想ST7920中文字型码表的内容,您可以可以净赚的“ST7920中文字体秒表,网上有很多,有12864液晶串行接口汉字库,你可以调出由内而外!

参考文献(不包含自我调节的字体) /> / * ------------------------------------

ST7920串行驱动程序

-------------------------------------- * / BR p>#IFNDEF ST7920_H

定义ST7920_H

/ * --------------------------- ----- * /

/ /#包括

/ * -------------------- ------------ * /

定义UCHAR无符号的字符

定义uint无符号整数

/ * ------------ --------------------

这里ST7920内部命令的宏定义

---------------- ---------------- * /

定义bascmd 0X30 / *使用的基本指令集* /

定义明确的0X01 / *清除屏幕上* /

定义转0X02 / *地址归位* /

#定义entset 0X06 / *光标的权利,DDRAM地址计数器AC +1 * /

定义戈为0x1c / *整个屏幕转移到右边* /

定义GOL为0x18 / *左* /

定义迪生0X0C / *显示在整个屏幕,关闭游标* /

定义cgrama的0X40结束/ * CGRAM基础* /

定义ddrama 0X80 / *设置DDRAM地址,第一行是0x8087H的,第二行90H97H * /

定义页0 0X80

定义第1页0x90

定义页第2页均为0x88

定义页第3页第0x98

定义extcmd 0x34 / *使用扩展的指令集* /

定义反向0x04的/ *突出显示* /

定义mapdison 0x36 / *扩展指令图形显示* /

/ * ------------------- -------------

硬件接口

-------------------------------------------------------------------------------- ----- * /

定义LCM_DATA P0 / * P0端口,作为数据总线* /

SBIT LCM_RS = P1 ^ 7; / *数据(H)/指令(L(H- > L)* /

SBIT LCM_RW = P1 ^ 6 / *读取(H)/写(L)/

SBIT LCM_EN = P1 ^ 5; / *使能 - 写)/阅读( )* /

SBIT LCM_PSB = P1 ^ 4/8位或4位串行* /

SBIT LCM_BF = LCM_DATA ^ 7; / * LCD模块内部的忙标志* / / * ------------------------------ * /

无效延迟(UINT吨);

无效,Ldelay(UINT T1);

的无效LCM_busy();

的无效LCM_wrcmd(UCHAR CMD);

的无效LCM_wrdat(UCHAR DAT);

的无效LCM_add(UCHAR UCHAR X,)

的无效LCM_basinit();

无效LCM_wrpagestr(UCHAR添加,UCHAR *显示,UCHAR NUM);

的无效LCM_mapclr();

的无效LCM_extinit(); 无效LCM_12864map(UCHAR代码* DIS);

无效LCM_6464map(UCHAR X,UCHAR * p);

:无效LCM_3232word(UCHAR X,UCHAR * p);

#ENDIF BR p>以下是平行的驱动器:

#包括的ST7920.h的

/ * -------------- ---------------- *

函数名称:无效延迟(UINT吨)

的延迟t 5个指令周期,指令周期为1us的</ * -------------------------------- * /

无效延迟(UINT T)

{

(T - )

{

_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }

} BR />:无效Ldelay(UINT T1)

{

而(T1 - )

延迟(1000);

}

/ * --- --------------------------------------------------------------------------------

阅读繁忙的功能,等待的LCD就绪状态

LCM_busy = 1忙碌

* ------------------------------- * /

的无效LCM_busy() /> {

LCM_RS = 0;

LCM_RW = 1;

LCM_EN = 1;

(LCM_BF);

LCM_EN = 0;

} BR /> / * ------------------------------ *

LCM写指令

------------------------------- * /

无效LCM_wrcmd(UCHAR CMD)

{< / LCM_busy();

LCM_RS = 0;

LCM_RW = 0;

LCM_DATA = CMD

LCM_EN = 1;

延迟(1);
> LCM_EN = 0;

}

/ * ------------------------------ * / > LCM写入数据

* ------------------------------- * /

无效LCM_wrdat (UCHAR DAT)

{

LCM_busy();

LCM_RS = 1;

LCM_RW = 0;

LCM_DATA =数据; LCM_EN = 1; BR />延迟(1);

LCM_EN = 0;

}

/ * ----------------------- ------- *

写地址的功能,基本指令集,文字

* -------------------- ----------- * /

:无效LCM_add(UCHAR X,UCHAR Y)

{

开关(X)

{

情况下,0 :X =页0;打破;

情况1:X =第1页;突破;

案例2:X =第2页;突破;

案例3:X =第3页;突破;

}

LCM_wrcmd(X + Y);

/ /延时(8);

}

/ * ---------------- -------------- *

LCM初始化函数,基本指令集

* ------------------- ------------ * /

的无效LCM_basinit()

{

LCM_PSB = 1;

LCM_wrcmd(bascmd); />延迟(80);

LCM_wrcmd(entset);

延迟(80);

LCM_wrcmd(迪生);

延迟(80); LCM_wrcmd(清除);

延迟(1000);

}

的无效LCM_extinit(){

LCM_wrcmd(0x34);

延迟(80); <BR / LCM_wrcmd(0X02);

延迟(80);}

/ * ------------------------ ------ *

行写入字符串

----------------------------- - * /

的无效LCM_wrpagestr(UCHAR *显示,添加,UCHAR UCHAR NUM)

{

LCM_wrcmd(ADD);

而(NUM - )

{

LCM_wrdat(DIS + +);

}

}

/ * ---------------------- --------

图形清屏功能

* ---------------------------- --- * /

的无效LCM_mapclr()

{

UINT I,J;

LCM_extinit();

(i = 0; I <512;我+ = 16)

{

LCM_wrcmd地址(0x80 + i/16);

LCM_wrcmd地址(0x80);

为(J = 0,J {

LCM_wrdat(0X00);

}

}

为(i = 0; I <512; i + = 16)

{
> LCM_wrcmd地址(0x80 + i/16);

LCM_wrcmd(均为0x88);

(J = 0,J <16; J + +)

{

LCM_wrdat(0X00)

}

}

}

/ * ---------------------------- *图片

输入128 * 64 * ---------------------------------- ---------------- * /

无效LCM_12864map(UCHAR * P)

{

UINT I,J;

LCM_extinit()

LCM_mapclr();

(I = 0; I <512; i + = 16)

{

LCM_wrcmd地址(0x80 + i/16);

LCM_wrcmd地址(0x80);

延迟时间(1);

为(J = 0,J <16; J + +)

{

LCM_wrdat(P [J + I]) ;

}

LCM_wrcmd地址(0x80 + i/16);

LCM_wrcmd(均为0x88);

延迟(1);

中for(j = 0; J <16 J + +)

{

LCM_wrdat(P [512 + J + I]);

}

}

LCM_wrcmd(mapdison);

延迟(16);

}

无效LCM_6464map(UCHAR X,UCHAR * P)

{

UINT I,J;

LCM_extinit();

LCM_mapclr ();

为(i = 0; <256; + = 8)

{

LCM_wrcmd(0x80的+ I / 8);

LCM_wrcmd地址(0x80 + X) ;

延迟(1);

为(J = 0,J <8; J + +) {

LCM_wrdat(P [J + I]);
>}

LCM_wrcmd(0x80的+ I / 8);

LCM_wrcmd(均为0x88 + X);

延迟(1);

中for(j = 0; J <8 J + +)

{

LCM_wrdat(P [256 + J + I]);

}

}

LCM_wrcmd(mapdison);

延迟(16);

}

/ * ---------------------------- *

自定义图形文本32 * 32

* ---------------------------- * /

:无效LCM_3232word(UCHAR X,UCHAR * p)

{

UINT I,J;

(i = 0; <128; i + = 4)

{

LCM_wrcmd地址(0x80 +我/ 4);

LCM_wrcmd地址(0x80 + X);

延迟时间(1);

为(J = 0; J <4; + +)

{
> LCM_wrdat(P [J + I]);

}

}

LCM_wrcmd(mapdison);

延迟(16);

}

以下是串行方式驱动器

#包括的ST7920_s.h的

/ * ----------------- ------------- *

函数名称:无效延迟(UINT吨)

延迟t五次由一个指令周期,一个指令周期是约1微秒

* -------------------------------- * /

{

(T - )

{

_nop_(); _nop_(); _nop_(); _nop_(); _nop_();

}

} <BR /无效Ldelay(UINT T1)

{

(T1 - )

延迟(1000);

}

/ * ---- -------------------------- *

阅读繁忙的功能等待的LCD处于就绪状态

LCM_busy = 1忙碌

* ------------------------------- * /

/ *的无效LCM_busy() BR /> {

LCM_RS = 0;

LCM_RW = 1;

LCM_EN = 1;

(LCM_BF);

LCM_EN = 0;

}

/ * --------- *

LCM写入1个字节* - ------------------------------ * /

的无效LCM_wrbyte(UCHAR数据)

{
> UCHAR我

为(i = 0; <8,我+ +)

{

LCM_SID的数据&0x80; / /去掉最高位

LCM_CLK = 1

/ / _nop_();

LCM_CLK = 0;

/ / _nop_();

数据< = 1; / /左移...... />}

}

/ * -------------------------- ---- *

= 0开始的LCM写指令

= 1开始的LCM写入数据

* ------------------------- ------ * /

的无效LCM_wrcord(位开始,UCHAR DATA)/ /写指令或数据

{

UCHAR start_data,HDATA,LDATA;

(开始== 0)start_data = 0XF8; / /写指令

其他start_data =第二套; / /写数据

HDATA = DATA &0xf0; / /取高4 BR /> LDATA =(数据<< 4)&0xf0; / /取低四位

LCM_wrbyte(start_data); / /发送开始信号

延迟(3); / /延时是必须<BR / LCM_wrbyte(HDATA); / /发送高4

延迟时间(1)/ /延迟必须

LCM_wrbyte(LDATA); / /发送低四位

延迟时间(1); / /延时必须

}

/ * ------------------------------ *

写地址的功能,基本指令集,文字

* ------------------------------- * /

的无效LCM_add(UCHAR X,UCHAR)的

{

开关(X)

{

情况下,0:X =页0;打破;

情况下, 1:X =第1页中断;

案例2:X =第2页;突破;

案例3:X =第3页;突破;

}

LCM_wrcord(0,X + Y );

}

/ * ------------------------------ *

LCM初始化函数,基本指令集* ------------ * /

无效LCM_basinit ()

{

LCM_PSB = 0; / /串行驱动模式。

LCM_CS = 1;

LCM_wrcord(0 bascmd); / / 8位接口,基本指令集

LCM_wrcord(迪生); / /显示开,光标关,反白关系

LCM_wrcord(0,清晰); / /清除屏幕,DDRAM的地址计数器为零...... />} 的无效LCM_extinit(的)

{

LCM_wrcord(0,0 X34);

LCM_wrcord(0,0 X02的);

}

/ * ------------------------------ *

行写入字符串

* ---- --------------------------- * /

无效LCM_wrpagestr(UCHAR添加,UCHAR *显示,UCHAR NUM)

{

LCM_wrcord(0,ADD);

(NUM - )

{

LCM_wrcord(1,* DIS + +);

}

}
希望能帮助你,我希望你成功的发展!
温馨提示:内容为网友见解,仅供参考
无其他回答

st7920系列显示器驱动芯,设定点与DDRAM地址计数器AC是什么来,可不可...
#定义entset 0X06 \/ *光标的权利,DDRAM地址计数器AC +1 * \/ 定义戈为0x1c \/ *整个屏幕转移到右边* \/ 定义GOL为0x18 \/ *左* \/ 定义迪生0X0C \/ *显示在整个屏幕,关闭游标* \/ 定义cgrama的0X40结束\/ * CGRAM基础* \/ 定义ddrama 0X80 \/ *设置DDRAM地址,第一行是0x8087H的,第二行90H97H * \/...

相似回答