非常好12864带字库液晶学习Word文档下载推荐.docx
- 文档编号:19523985
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:59
- 大小:1.19MB
非常好12864带字库液晶学习Word文档下载推荐.docx
《非常好12864带字库液晶学习Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《非常好12864带字库液晶学习Word文档下载推荐.docx(59页珍藏版)》请在冰豆网上搜索。
1./********************************液晶端口定义**************************/
2.#define
lcd_data
P0
//数据口
3.sbit
RS
=P2^4;
//选择寄存器(并行)0:
指令寄存器1:
数据寄存器;
4.sbit
RW
=P2^5;
//读写控制脚(并行)0:
写入1:
读出
5.sbit
E
=P2^6;
//读写数据启始脚(并行)
6.sbit
PSB
=P2^1;
//串并方式选择引脚,0为串行模式,1为8/4位数据口模式
7.sbit
RST
=P2^3;
//复位引脚
8.
9.//********************************************************
10.//延时函数
11.//********************************************************
12.voiddelay(unsignedintk)
13.{
14.
unsignedinti;
15.
unsignedcharj;
16.
for(i=0;
i<
k;
i++)
17.
{
18.
for(j=0;
j<
10;
j++);
19.
}
20.}
21.//********************************************************
22.//延时1ms函数
23.//********************************************************
24.voiddelay_ms(unsignedintk)//延时0.994us,晶振12M
25.{
26.
unsignedintx,y;
27.
for(x=k;
x>
0;
x--)
28.
for(y=121;
y>
y--);
29.}
30.//********************************************************
31.//写命令函数
32.//********************************************************
33.voidLcdWcom(unsignedcharWCom)
34.{
35.
delay
(1);
36.
RS=0;
//指明操作对象为指令寄存器
37.
RW=0;
//指明为写操作
38.
E=1;
39.
lcd_data=WCom;
//将命令写入总线
40.
E=0;
41.}
42.//********************************************************
43.//写数据函数
44.//********************************************************
45.voidLcdWdata(unsignedcharWData)
46.{
47.
48.
RS=1;
//指明操作对象为数据寄存器
49.
50.
51.
lcd_data=WData;
//将数据写入总线
52.
53.}
复制代码
二、初始化操作
以8位并行操作为例,操作流程图如下:
下载(34.36KB)
49
初始化操作如下:
芯片上电;
延时40ms以上;
复位操作:
RST出现一个上升沿(RST=1;
RST=0;
RST=1;
);
功能设定;
延时100us以上;
6>
再次进行功能设定;
7>
延时37us;
8>
显示开关控制;
9>
10>
清除显示;
11>
延时10ms以上;
12>
进入点设置;
13>
初始化结束;
这里我遇到了一个小问题,我的液晶按照这个顺序进行初始化结果不正确,无法显示,最后我把调整了一下就可以了,调整后的顺序为:
清除显示进入点设置显示开关控制,不知道是什么原因,知道的告诉我一声…
1.//********************************************************
2.//显示初始化函数
3.//********************************************************
4.voidDisplay_Init(void)
5.{
6.
delay_ms(45);
//延时45ms
7.
PSB=1;
//8位并行口
8.
//复位操作
9.
10.
11.
12.
//功能设定
13.
LcdWcom(0x30);
//设置为8位并行口,基本指令集
delay(10);
//再次设置为8位并行口,基本指令集
delay(5);
17.//
//显示开关控制
18.//
LcdWcom(0x0c);
//游标显示关,正常显示,整体显示开
19.//
delay(10);
20.
//清除显示
21.
LcdWcom(0x01);
22.
delay_ms(12);
//延时12ms
23.
//进入点设置
24.
LcdWcom(0x06);
//设置为游标右移,DDRAM位地址加1,画面不移动
25.
LcdWcom(0x0C);
//开显示
27.}
三、显示基本的字符和汉字
1、要想显示汉字或字符,首先要确定显示的位置,看看芯片说明书上关于屏幕地址的分配:
下载(30.15KB)
2010-12-111:
06
由于此液晶为128*64,即是横向128个点,竖向64个点,由于该液晶控制器支持的字符为8*16,汉字为16*16,因此只能显示四行,如果是汉字,为每行显示8个,如果是字符,每行显示16个。
由上图设置DDRAM地址的指令可知,最高位为1,余下7位为地址值,因此就对应了为什么起始地址为80H的原因(即对应的写地址指令为10000000);
因此如果你要设定显示的地址为第一行的第一个位置,只需要调用写指令函数,写入0x80即可。
存在的问题:
参考网上的程序及在试验过程中发现,实际能显示出来的地址分布式这样的
0x800x810x820x830x840x850x860x87
//第一行汉字位置
0x900x910x920x930x940x950x960x97
//第二行汉字位置
0x880x890x8a0x8b0x8c0x8d0x8e0x8f
//第三行汉字位置
0x980x990x9a0x9b0x9c0x9d0x9e0x9f
//第四行汉字位置
百思不得其解,尤其让人受不了的是居然是第一行和第三行地址接续,而不是第二行,有明白的高手给讲解一下…
设定DDRAM地址参考程序:
2.//设置光标函数
3.//参数说明:
x为行号,y为列号
4.//********************************************************
5.voidSet_Cursor(unsignedcharx,unsignedchary)
6.{
unsignedchari;
switch(x)//确定行号
{
case0x00:
i=0x80;
break;
//第一行
case0x01:
i=0x90;
//第二行
case0x02:
i=0x88;
//第三行
case0x03:
i=0x98;
//第四行
default:
i=y+i;
//确定列号
LcdWcom(i);
//写地址
18.}
2、显示字符
由数据手册可查看可以显示的字符及其显示码:
下载(121.94KB)
36
因此,当你设置好所要显示的光标位置后,即可调用写数据函数,写入对应相应字符的显示码,比如要显示!
就应该写入0x21。
2.//显示字符函数
4.voidDisplay_Char(unsignedcharAlphabet)
LcdWdata(Alphabet);
//写入需要显示字符的显示码
8.}
显示!
实例:
1./**********************显示单个字符*************************/
2.Set_Cursor(0,0);
//光标地址设定
3.Display_Char(0x21);
//显示字符!
效果图:
下载(26.05KB)
38
扩展程序:
在指定位置显示字符串
2.//指定位置显示字符串函数
5.voidDisplay_String(unsignedcharx,unsignedchary,unsignedchar*Alphabet)
7.unsignedchari=0;
8.Set_Cursor(x,y);
//设置显示的起始地址
9.while(Alphabet[i]!
='
\0'
)
10.{
LcdWdata(Alphabet[i]);
//写入需要显示字符的显示码
i++;
13.}
14.}
显示字符串实例:
1./***********************显示字符串*************************/
2.Display_String(1,0,"
WWW.CEPARK.COM"
);
//显示字符串
下载(36.65KB)
39
3、显示汉字
因为一个汉字占用两个字节的大小,因此要想显示一个汉字,需要进行两个数据写入操作。
所支持的8192个16*16的汉字详见数据手册附录中的ST7920GB中文字型码表。
参考程序:
2.//指定位置显示汉字函数
5.voidDisplay_HZ(unsignedcharx,unsignedchary,unsignedchar*HZ)
Set_Cursor(x,y);
//设置显示的起始地址
LcdWdata(HZ[0]);
//写入需要显示汉字的高八位数据
LcdWdata(HZ[1]);
//写入需要显示字符的低八位数据
10.}
显示汉字实例:
1./************************显示汉字*************************/
2.Display_HZ(0,1,"
电"
//显示电
3.Display_HZ(0,2,"
子"
//显示子
4.Display_HZ(0,3,"
园"
//显示园
下载(27.15KB)
2.//指定位置显示一行汉字函数,可自动换行
5.voidDisplay_HZ_Line(unsignedcharx,unsignedchary,unsignedchar*HZ)
unsignedchari=0;
while(HZ[i]!
LcdWdata(HZ[i++]);
//写入需要显示汉字的高八位数据
//写入需要显示字符的低八位数据
if((y+i)%16==0)
//如果满一行
{
x++;
if(x==4)
//如果满一屏
x=0;
Set_Cursor(x,0);
//重新设置显示的起始地址
}
21.}
显示一行汉字实例:
1./************************显示一行汉字*********************/
2.Display_HZ_Line(2,0,"
欢迎转载,转载请注明出处,谢谢!
"
//显示一行汉字
下载(35.82KB)
再来一个整体的现实效果
1.//**************************************************************************
2.//说明:
程序主函数
3.//**************************************************************************
4.voidmain(void)
6./***********************液晶初始化***************************/
7.Display_Init();
8./**********************显示单个字符*************************/
9.Set_Cursor(0,0);
//光标地址设定
10.Display_Char(0x21);
//显示字符!
11./***********************显示字符串*************************/
12.Display_String(1,0,"
13./************************显示汉字*************************/
14.Display_HZ(0,1,"
//显示电
15.Display_HZ(0,2,"
//显示子
16.Display_HZ(0,3,"
//显示园
17./************************显示一行汉字*********************/
18.Display_HZ_Line(2,0,"
19.while
(1);
下载(40.3KB)
52
四、关于CGRAM的使用:
可以参考这个网站的程序:
http:
//bbs.友好站点,请勿转贴.com/ShowTopic.aspx?
id=81220ST7920自行产生RAM提供使用者图像定义(造字)功能,可以提供四组16*16点的自定义图像空间,使用者可以将内部自行没有提供的图像自行定义到CGRAM中,便可以通过DDRAM显示在液晶屏上。
注意:
网上介绍说ST7920芯片同屏幕不能显示4个以上自定义汉字(用CGRAM)。
显示CGRAM字型:
将16位元资料写入DDRAM中,一共有0000H,0002H,0004H,0006H四种编码。
下载(23.54KB)
2010-12-112:
05
下载(21.55KB)
操作步骤:
设置为扩充指令集;
设置SR=O,允许设定CGRAM地址;
设置为基本指令集;
循环执行以下操作写入16个字节数据(设定CGRAM的存储地址;
写入自定义数据);
设置DDRAM地址
写入显示CGRAM显示码
CGRAM参考程序:
2.//设置CGRAM字库
3.//ST7920CGRAM(用户自定义图标)空间分布
4.//空间1地址:
40H~4FH共16个地址,一个地址对应两个字节数据;
对应调用码:
0000H
5.//空间2地址:
50H~5FH共16个地址,一个地址对应两个字节数据;
0002H
6.//空间3地址:
60H~6FH共16个地址,一个地址对应两个字节数据;
0004H
7.//空间4地址:
70H~7FH共16个地址,一个地址对应两个字节数据;
0006H
8.//参数说明:
num为空间编号,CGRAM_ZIKU为地址指针
10.voidSET_CGRAM(unsignedcharnum,unsignedchar*CGRAM_ZIKU)
11.{
12.unsignedchari,add;
13.LcdWcom(0x34);
//再次设置为8位并行口,扩展指
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 非常好 12864 字库 液晶 学习