带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx

上传人:b****2 文档编号:5268435 上传时间:2023-05-04 格式:DOCX 页数:45 大小:1.07MB
下载 相关 举报
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第1页
第1页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第2页
第2页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第3页
第3页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第4页
第4页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第5页
第5页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第6页
第6页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第7页
第7页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第8页
第8页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第9页
第9页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第10页
第10页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第11页
第11页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第12页
第12页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第13页
第13页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第14页
第14页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第15页
第15页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第16页
第16页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第17页
第17页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第18页
第18页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第19页
第19页 / 共45页
带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx_第20页
第20页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx

《带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx》由会员分享,可在线阅读,更多相关《带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx(45页珍藏版)》请在冰点文库上搜索。

带字库12864超详细扩展操作写自定义字符画图画直线画圆读取数据等操作Word下载.docx

RW=0;

//指明为写操作

3>

E=1;

4>

DB=data;

//data为你要写入的命令或数据值

5>

E=0;

[/p][p=30,2,left]以下是我的驱动函数,仅供参考:

[/p][p=30,2,left]

CODE:

/********************************液晶端口定义**************************/

#define 

lcd_data 

P0 

//数据口

sbit 

RS 

=P2^4;

//选择寄存器(并行)0:

指令寄存器1:

数据寄存器;

RW 

=P2^5;

//读写控制脚(并行)0:

写入1:

读出

=P2^6;

//读写数据启始脚(并行)

PSB 

=P2^1;

//串并方式选择引脚,0为串行模式,1为8/4位数据口模式

RST 

=P2^3;

//复位引脚

//********************************************************

//延时函数

voiddelay(unsignedintk)

unsignedinti;

unsignedcharj;

for(i=0;

i<

k;

i++)

{

for(j=0;

j<

10;

j++);

}

}

//延时1ms函数

voiddelay_ms(unsignedintk)//延时0.994us,晶振12M

unsignedintx,y;

for(x=k;

x>

0;

x--)

for(y=121;

y>

y--);

}

//写命令函数

voidLcdWcom(unsignedcharWCom)

delay

(1);

RS=0;

//指明操作对象为指令寄存器

RW=0;

//指明为写操作

E=1;

lcd_data=WCom;

//将命令写入总线

E=0;

//写数据函数

//********************************************************

voidLcdWdata(unsignedcharWData)

RS=1;

//指明操作对象为数据寄存器

lcd_data=WData;

//将数据写入总线

}[/p][p=30,2,left]二、初始化操作[/p][p=30,2,left]以8位并行操作为例,操作流程图如下:

初始化.JPG

[/p][p=30,2,left]初始化操作如下:

[/p][p=30,2,left]1>

芯片上电;

[/p][p=30,2,left]2>

延时40ms以上;

[/p][p=30,2,left]3>

复位操作:

RST出现一个上升沿(RST=1;

RST=0;

RST=1;

);

[/p][p=30,2,left]4>

功能设定;

[/p][p=30,2,left]5>

延时100us以上;

[/p][p=30,2,left]6>

再次进行功能设定;

[/p][p=30,2,left]7>

延时37us;

[/p][p=30,2,left]8>

显示开关控制;

[/p][p=30,2,left]9>

[/p][p=30,2,left]10>

清除显示;

[/p][p=30,2,left]11>

延时10ms以上;

[/p][p=30,2,left]12>

进入点设置;

[/p][p=30,2,left]13>

初始化结束;

[/p][p=30,2,left] 

这里我遇到了一个小问题,我的液晶按照这个顺序进行初始化结果不正确,无法显示,最后我把调整了一下就可以了,调整后的顺序为:

清除显示进入点设置显示开关控制,不知道是什么原因,知道的告诉我一声…[/p][p=30,2,left]

//显示初始化函数

voidDisplay_Init(void)

delay_ms(45);

//延时45ms

PSB=1;

//8位并行口

//复位操作

//功能设定

LcdWcom(0x30);

//设置为8位并行口,基本指令集

delay(10);

//再次设置为8位并行口,基本指令集

delay(5);

// 

//显示开关控制

LcdWcom(0x0c);

//游标显示关,正常显示,整体显示开

delay(10);

//清除显示

LcdWcom(0x01);

delay_ms(12);

//延时12ms

//进入点设置

LcdWcom(0x06);

//设置为游标右移,DDRAM位地址加1,画面不移动

LcdWcom(0x0C);

//开显示

}[/p][p=30,2,left]三、显示基本的字符和汉字[/p][p=30,2,left]1、要想显示汉字或字符,首先要确定显示的位置,看看芯片说明书上关于屏幕地址的分配:

DDRAM位址.JPG

[/p][p=30,2,left]由于此液晶为128*64,即是横向128个点,竖向64个点,由于该液晶控制器支持的字符为8*16,汉字为16*16,因此只能显示四行,如果是汉字,为每行显示8个,如果是字符,每行显示16个。

由上图设置DDRAM地址的指令可知,最高位为1,余下7位为地址值,因此就对应了为什么起始地址为80H的原因(即对应的写地址指令为10000000);

因此如果你要设定显示的地址为第一行的第一个位置,只需要调用写指令函数,写入0x80即可。

[/p][p=30,2,left]存在的问题:

参考网上的程序及在试验过程中发现,实际能显示出来的地址分布式这样的[/p][p=30,2,left]0x800x810x820x830x840x850x860x87 

//第一行汉字位置

0x900x910x920x930x940x950x960x97 

//第二行汉字位置

0x880x890x8a0x8b0x8c0x8d0x8e0x8f 

//第三行汉字位置

0x980x990x9a0x9b0x9c0x9d0x9e0x9f 

//第四行汉字位置[/p][p=30,2,left]百思不得其解,尤其让人受不了的是居然是第一行和第三行地址接续,而不是第二行,有明白的高手给讲解一下…[/p][p=30,2,left]设定DDRAM地址参考程序:

//设置光标函数

//参数说明:

x为行号,y为列号

voidSet_Cursor(unsignedcharx,unsignedchary)

unsignedchari;

switch(x)//确定行号

{

case0x00:

i=0x80;

break;

//第一行

case0x01:

i=0x90;

//第二行

case0x02:

i=0x88;

//第三行

case0x03:

i=0x98;

//第四行

default:

i=y+i;

//确定列号

LcdWcom(i);

//写地址

}[/p][p=30,2,left]2、显示字符[/p][p=30,2,left]由数据手册可查看可以显示的字符及其显示码:

半宽字.JPG

[/p][p=30,2,left]因此,当你设置好所要显示的光标位置后,即可调用写数据函数,写入对应相应字符的显示码,比如要显示!

就应该写入0x21。

//显示字符函数

voidDisplay_Char(unsignedcharAlphabet)

LcdWdata(Alphabet);

//写入需要显示字符的显示码

}显示!

实例:

/**********************显示单个字符*************************/

Set_Cursor(0,0);

//光标地址设定

Display_Char(0x21);

//显示字符!

[/p][p=30,2,left]效果图:

1.JPG

[/p][p=30,2,left]扩展程序:

在指定位置显示字符串

//指定位置显示字符串函数

voidDisplay_String(unsignedcharx,unsignedchary,unsignedchar*Alphabet)

unsignedchari=0;

Set_Cursor(x,y);

//设置显示的起始地址

while(Alphabet[i]!

='

\0'

LcdWdata(Alphabet[i]);

//写入需要显示字符的显示码

i++;

}显示字符串实例:

/***********************显示字符串*************************/

Display_String(1,0,"

WWW.CEPARK.COM"

);

//显示字符串效果图:

2.JPG

[/p][p=30,2,left]3、显示汉字[/p][p=30,2,left]

[/p][p=30,2,left]因为一个汉字占用两个字节的大小,因此要想显示一个汉字,需要进行两个数据写入操作。

[/p][p=30,2,left]所支持的8192个16*16的汉字详见数据手册附录中的ST7920GB中文字型码表。

[/p][p=30,2,left]参考程序:

//指定位置显示汉字函数

voidDisplay_HZ(unsignedcharx,unsignedchary,unsignedchar*HZ)

//设置显示的起始地址

LcdWdata(HZ[0]);

//写入需要显示汉字的高八位数据

LcdWdata(HZ[1]);

//写入需要显示字符的低八位数据

}显示汉字实例:

/************************显示汉字*************************/

Display_HZ(0,1,"

电"

//显示电

Display_HZ(0,2,"

子"

//显示子

Display_HZ(0,3,"

园"

//显示园效果图:

3.jpg

[/p][p=30,2,left][/p][p=30,2,left][/p][p=30,2,left][/p][p=30,2,left]扩展程序:

//指定位置显示一行汉字函数,可自动换行

voidDisplay_HZ_Line(unsignedcharx,unsignedchary,unsignedchar*HZ)

while(HZ[i]!

LcdWdata(HZ[i++]);

//写入需要显示汉字的高八位数据

//写入需要显示字符的低八位数据

if((y+i)%16==0) 

//如果满一行

x++;

if(x==4) 

//如果满一屏

x=0;

Set_Cursor(x,0);

//重新设置显示的起始地址

[/p][p=30,2,left]显示一行汉字实例:

/************************显示一行汉字*********************/

Display_HZ_Line(2,0,"

欢迎转载,转载请注明出处,谢谢!

"

//显示一行汉字效果图:

4.jpg

[/p][p=30,2,left]再来一个整体的现实效果[/p][p=30,2,left]

//**************************************************************************

//说明:

程序主函数

voidmain(void)

/***********************液晶初始化***************************/

Display_Init();

//光标地址设定

//显示字符!

//显示字符串

//显示电

//显示子

//显示园

//显示一行汉字

while

(1);

}[/p][p=30,2,left]

5.jpg

最新回复

love_wjgygaat2010-12-0112:

24:

08

[i=s]本帖最后由love_wjgyga于2010-12-116:

23编辑

[p=30,2,left]四、关于CGRAM的使用:

[/p][p=30,2,left]可以参考这个网站的程序:

http:

//bbs.友好站点,请勿转贴.com/ShowTopic.aspx?

id=81220ST7920自行产生RAM提供使用者图像定义(造字)功能,可以提供四组16*16点的自定义图像空间,使用者可以将内部自行没有提供的图像自行定义到CGRAM中,便可以通过DDRAM显示在液晶屏上。

注意:

网上介绍说ST7920芯片同屏幕不能显示4个以上自定义汉字(用CGRAM)。

显示CGRAM字型:

将16位元资料写入DDRAM中,一共有0000H,0002H,0004H,0006H四种编码。

CGRAM1.JPG

CGRAM2.JPG

[/p][p=30,2,left]操作步骤:

设置为扩充指令集;

设置SR=O,允许设定CGRAM地址;

设置为基本指令集;

循环执行以下操作写入16个字节数据(设定CGRAM的存储地址;

写入自定义数据);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2