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的屏幕,屏幕应该是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 + +);
}
}
希望能帮助你,我希望你成功的发展!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询