珍藏的12864 使用经典资料Word文档格式.docx

上传人:b****4 文档编号:7164557 上传时间:2023-05-08 格式:DOCX 页数:44 大小:377.38KB
下载 相关 举报
珍藏的12864 使用经典资料Word文档格式.docx_第1页
第1页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第2页
第2页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第3页
第3页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第4页
第4页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第5页
第5页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第6页
第6页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第7页
第7页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第8页
第8页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第9页
第9页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第10页
第10页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第11页
第11页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第12页
第12页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第13页
第13页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第14页
第14页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第15页
第15页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第16页
第16页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第17页
第17页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第18页
第18页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第19页
第19页 / 共44页
珍藏的12864 使用经典资料Word文档格式.docx_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

珍藏的12864 使用经典资料Word文档格式.docx

《珍藏的12864 使用经典资料Word文档格式.docx》由会员分享,可在线阅读,更多相关《珍藏的12864 使用经典资料Word文档格式.docx(44页珍藏版)》请在冰点文库上搜索。

珍藏的12864 使用经典资料Word文档格式.docx

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.}

二、初始化操作

初始化操作如下:

芯片上电;

延时40ms以上;

复位操作:

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

RST=0;

RST=1;

);

功能设定;

延时100us以上;

6>

再次进行功能设定;

7>

延时37us;

8>

显示开关控制;

9>

10>

清除显示;

11>

延时10ms以上;

12>

进入点设置;

13>

初始化结束;

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

清除显示进入点设置显示开关控制,不知道是什么原因,知道的告诉我一声…

54.//********************************************************

55.//显示初始化函数

56.//********************************************************

57.voidDisplay_Init(void)

58.{

59. 

delay_ms(45);

//延时45ms

60. 

PSB=1;

//8位并行口

61. 

//复位操作

62. 

63. 

64. 

65. 

//功能设定

66. 

LcdWcom(0x30);

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

67. 

delay(10);

68. 

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

69. 

delay(5);

70.// 

//显示开关控制

71.// 

LcdWcom(0x0c);

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

72.// 

delay(10);

73. 

//清除显示

74. 

LcdWcom(0x01);

75. 

delay_ms(12);

//延时12ms

76. 

//进入点设置

77. 

LcdWcom(0x06);

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

78. 

79. 

LcdWcom(0x0C);

//开显示

80.}

三、显示基本的字符和汉字

1、要想显示汉字或字符,首先要确定显示的位置,看看芯片说明书上关于屏幕地址的分配:

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

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

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

存在的问题:

参考网上的程序及在试验过程中发现,实际能显示出来的地址分布式这样的

0x800x810x820x830x840x850x860x87 

//第一行汉字位置

0x900x910x920x930x940x950x960x97 

//第二行汉字位置

0x880x890x8a0x8b0x8c0x8d0x8e0x8f 

//第三行汉字位置

0x980x990x9a0x9b0x9c0x9d0x9e0x9f 

//第四行汉字位置

百思不得其解,尤其让人受不了的是居然是第一行和第三行地址接续,而不是第二行,有明白的高手给讲解一下…

设定DDRAM地址参考程序:

81.//********************************************************

82.//设置光标函数

83.//参数说明:

x为行号,y为列号

84.//********************************************************

85.voidSet_Cursor(unsignedcharx,unsignedchary)

86.{

87. 

unsignedchari;

88. 

switch(x)//确定行号

89. 

{

90. 

case0x00:

i=0x80;

break;

//第一行

91. 

case0x01:

i=0x90;

//第二行

92. 

case0x02:

i=0x88;

//第三行

93. 

case0x03:

i=0x98;

//第四行

94. 

default:

95. 

96. 

i=y+i;

//确定列号

97. 

LcdWcom(i);

//写地址

98.}

复制代码

2、显示字符

由数据手册可查看可以显示的字符及其显示码:

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

就应该写入0x21。

99.//********************************************************

100.//显示字符函数

101.//********************************************************

102.voidDisplay_Char(unsignedcharAlphabet)

103.{

104. 

105. 

LcdWdata(Alphabet);

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

106.}

显示!

实例:

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

108.Set_Cursor(0,0);

//光标地址设定

109.Display_Char(0x21);

//显示字符!

扩展程序:

在指定位置显示字符串

110.//********************************************************

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

112.//参数说明:

113.//********************************************************

114.voidDisplay_String(unsignedcharx,unsignedchary,unsignedchar*Alphabet)

115.{

116.unsignedchari=0;

117.Set_Cursor(x,y);

//设置显示的起始地址

118.while(Alphabet[i]!

='

\0'

119.{

120. 

LcdWdata(Alphabet[i]);

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

121. 

i++;

122.}

123.}

显示字符串实例:

124./***********************显示字符串*************************/

125.Display_String(1,0,"

WWW.CEPARK.COM"

);

//显示字符串

3、显示汉字

因为一个汉字占用两个字节的大小,因此要想显示一个汉字,需要进行两个数据写入操作。

所支持的8192个16*16的汉字详见数据手册附录中的ST7920GB中文字型码表。

126.//********************************************************

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

128.//参数说明:

129.//********************************************************

130.voidDisplay_HZ(unsignedcharx,unsignedchary,unsignedchar*HZ)

131.{

132. 

Set_Cursor(x,y);

//设置显示的起始地址

133. 

LcdWdata(HZ[0]);

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

134. 

LcdWdata(HZ[1]);

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

135.}

显示汉字实例:

136./************************显示汉字*************************/

137.Display_HZ(0,1,"

电"

//显示电

138.Display_HZ(0,2,"

子"

//显示子

139.Display_HZ(0,3,"

园"

//显示园

140.//********************************************************

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

142.//参数说明:

143.//********************************************************

144.voidDisplay_HZ_Line(unsignedcharx,unsignedchary,unsignedchar*HZ)

145.{

146. 

unsignedchari=0;

147. 

148. 

while(HZ[i]!

149. 

150. 

LcdWdata(HZ[i++]);

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

151. 

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

152. 

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

//如果满一行

153. 

154. 

x++;

155. 

if(x==4) 

//如果满一屏

156. 

x=0;

157. 

Set_Cursor(x,0);

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

158. 

159. 

}

160.}

显示一行汉字实例:

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

162.Display_HZ_Line(2,0,"

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

"

//显示一行汉字

再来一个整体的现实效果

163.//**************************************************************************

164.//说明:

程序主函数

165.//**************************************************************************

166.voidmain(void)

167.{

168./***********************液晶初始化***************************/

169.Display_Init();

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

171.Set_Cursor(0,0);

//光标地址设定

172.Display_Char(0x21);

//显示字符!

173./***********************显示字符串*************************/

174.Display_String(1,0,"

175./************************显示汉字*************************/

176.Display_HZ(0,1,"

//显示电

177.Display_HZ(0,2,"

//显示子

178.Display_HZ(0,3,"

//显示园

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

180.Display_HZ_Line(2,0,"

181.while

(1);

182.}

四、关于CGRAM的使用:

可以参考这个网站的程序:

http:

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

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

注意:

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

显示CGRAM字型:

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

操作步骤:

设置为扩充指令集;

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

设置为基本指令集;

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

写入自定义数据);

设置DDRAM地址

写入显示CGRAM显示码

CGRAM参考程序:

183.//********************************************************

184.//设置CGRAM字库

185.//ST7920CGRAM(用户自定义图标)空间分布

186.//空间1地址:

40H~4FH共16个地址,一个地址对应两个字节数据;

对应调用码:

0000H

187.//空间2地址:

50H~5FH共16个地址,一个地址对应两个字节数据;

0002H

188.//空间3地址:

60H~6FH共16个地址,一个地址对应两个字节数据;

0004H

189.//空间4地址:

70H~7FH共16个地址,一个地址对应两个字节数据;

0006H

190.//参数说明:

num为空间编号,CGRAM_ZIKU为地址指针

191.//********************************************************

192.voidSET_CGRAM(unsignedcharnum,unsignedchar*CGRAM_ZIKU)

193.{

194.unsignedchari,add;

195.LcdWcom(0x34);

//再次设置为8位并行口,扩展指令集

196.LcdWcom(0x02);

//SR=0,允许设置CGRAM地址

197.LcdWcom(0x30);

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

198.add=(num<

<

4)|0x40;

//计算CGRAM的首地址

199.for(i=0;

16;

200.{

201. 

LcdWcom(add+i);

//设置CGRAM的首地址

202. 

LcdWdata(CGRAM_ZIKU[i*2]);

//写入高8位数据

203. 

LcdWdata(CGRAM_ZIKU[i*2+1]);

//写入低8位数据

204.}

205.}

206.//********************************************************

207.//指定位置显示CGRAM自造字函数

208.//参数说明:

x为行号,y为列号,num为编号

209.//********************************************************

210.voidDisplay_CGRAM(unsignedcharx,unsignedchary,unsignedcharnum)

211.{

212.Set_Cursor(x,y);

213.LcdWdata(0x00);

214.LcdWdata(num*2);

215.}

216.复制代码

217.显示CGRAM自定义字库实例:

218./**********************************

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

当前位置:首页 > 人文社科 > 法律资料

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

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