📄 lcd12864.lst
字号:
185
186
187 /*****************************************************************************************************
188 * 函 数 名: ClearDDRAM
189 * 功能描述: 本函数为清DDRAM子函数
190 * 全局变量: 无
191 * 入口参数: 无
192 * 出口参数: 无
193 * 调用模块: WriteData(),SetPos()
194 * 作 者: 王康
195 * 日 期: 2008.8.6
196 * 修 改 人: 王康
197 * 日 期:
198 * 版 本: KEIL uV2
199 ******************************************************************************************************/
200 void ClearDDRAM(void)
201 {
202 1 uchar i; //i表示页地址
203 1 uchar j; //j表示列地址
204 1 for(i = 0; i < 8; i++) //清右半屏
205 1 {
206 2 //此处注意,起始行地址受到页地址的限制
207 2 SetPos(0, i, 0); //设置起始行为第0行,起始页为第0页,起始列为第0列
208 2 for(j = 0; j < 64; j++) //将右半屏DRAM的64个字节全部清零
209 2 {
210 3 WriteData(0);
211 3 }
212 2 }
213 1 for(i = 0; i < 8; i++) //清左半屏
214 1 {
215 2 SetPos(0, i, 64); //设置起始行为第0行,起始页为第0页,起始列为第64列
216 2 for(j = 0; j < 64; j++) //将左半屏DRAM的64个字节全部清零
217 2 {
218 3 WriteData(0);
219 3 }
220 2 }
221 1 }
222
223
224 /*****************************************************************************************************
225 * 函 数 名: WriteWord
226 * 功能描述: 本函数为在液晶屏的任意位置写单个汉字的子函数
227 * 全局变量: 无
228 * 入口参数: st_line,显示的起始行,0--63
229 * x_add,显示的页地址,0--7
230 * y_add,显示的列地址,0--63
231 * Index[2],字符串数组,用来存储汉字
232 * 出口参数: 无
233 * 调用模块: WriteData(),SetPos()
234 * 作 者: 王康
235 * 日 期: 2008.8.6
236 * 修 改 人: 王康
237 * 日 期:
238 * 版 本: KEIL uV2
239 ******************************************************************************************************/
240 void WriteWord(uchar st_line, uchar x_add, uchar y_add, uchar Index[2])
241 {
C51 COMPILER V7.50 LCD12864 08/08/2008 00:58:17 PAGE 5
242 1 uchar i;
243 1 uchar j;
244 1 if(y_add < 64)
245 1 {
246 2 RIGHTSIDE
247 2 WriteCmd(y_add + 0x40);
248 2 }
249 1 else
250 1 {
251 2 LEFTSIDE
252 2 WriteCmd(y_add);
253 2 }
254 1
255 1 SetPos(st_line, x_add, y_add); //设置显示指针的位置
256 1
257 1 for(i = 0; i < 255; i++)
258 1 {
259 2 //汉字作为双字节字符串处理 采用顺序检索方式查找结构体名
260 2 if((GB_16[i].Index[0] == Index[0]) && (GB_16[i].Index[1] == Index[1]))
261 2 {
262 3 for(j = 0; j < 16; j++) //先写上半字节
263 3 {
264 4 WriteData(GB_16[i].Msk[j]);
265 4 }
266 3
267 3 SetPos(st_line, x_add + 1, y_add); //也地址加1,准备写下半字节
268 3
269 3 for(j = 16; j < 32; j++)
270 3 {
271 4 WriteData(GB_16[i].Msk[j]); //写下半字节
272 4 }
273 3 //break语句只能跳出一层循环
274 3 break; //break的用处是跳出for循环,以免重复写入
275 3 }
276 2 }
277 1 }
278
279
280 /*****************************************************************************************************
281 * 函 数 名: WriteFixWord
282 * 功能描述: 本函数为在液晶屏的固定位置写汉字的子函数
283 * 因为液晶每行显示8个汉字,一共能显示32个汉字,因此add%32可以得到显示的字为第几个,
284 * x_add只能为0,2,4,6;y_add只能为0,16,32,48,64,80,96,112.从而得到转换公式
285 * 全局变量: 无
286 * 入口参数: add,指定地址范围为0--31,全屏可写32个字(16*16)
287 * Index[2],字符串数组,用来存储汉字
288 * 出口参数: 无
289 * 调用模块: WriteWord()
290 * 作 者: 王康
291 * 日 期: 2008.8.6
292 * 修 改 人: 王康
293 * 日 期:
294 * 版 本: KEIL uV2
295 ******************************************************************************************************/
296 void WriteFixWord(uchar add, uchar Index[2])
297 {
298 1 uchar st_line = 0; //设置起始行为0
299 1 uchar x_add = add % 32 / 8 * 2; //转换得到相应的x_add,y_add
300 1 uchar y_add = add % 32 % 8 * 16;
301 1 WriteWord(st_line, x_add, y_add, Index); //调用任意位置写单个汉字的子函数
302 1 }
303
C51 COMPILER V7.50 LCD12864 08/08/2008 00:58:17 PAGE 6
304
305 /*****************************************************************************************************
306 * 函 数 名: WriteSentence
307 * 功能描述: 本函数为在液晶屏上写句子的子函数,按照0到31的顺序写入句子
308 * 从第0个字的位置开始写入汉字,写完一个之后字指针加1,继续写下一个汉字
309 * 全局变量: 无
310 * 入口参数: sentence[],待写入汉字,组成字符串
311 * 出口参数: 无
312 * 调用模块: WriteWord(),strlen()
313 * 作 者: 王康
314 * 日 期: 2008.8.6
315 * 修 改 人: 王康
316 * 日 期:
317 * 版 本: KEIL uV2
318 ******************************************************************************************************/
319 void WriteSentence(uchar sentence[255])
320 {
321 1 uchar i;
322 1 uchar j = 0;
323 1 for(i = 0; i < strlen(sentence) / 2; i++) //strlen()为调用"string.h"中的函数,求字符串的长度
324 1 {
325 2 //从sentence中两个两个的取字符串即汉字 注意不要弄半角的字符或标点符号,否则后面的汉字将找不到
326 2 word_buf[i].word[0] = sentence[i * 2];
327 2 word_buf[i].word[1] = sentence[i * 2 + 1];
328 2 WriteFixWord(j++, word_buf[i].word);
329 2 }
330 1 }
331
332
333 /*****************************************************************************************************
334 * 函 数 名: ScrolDisplay(调试未通过)
335 * 功能描述: 本函数为在液晶屏上滚动显示句子的子函数
336 * 所谓滚动显示,即需要建立一个显示缓冲区
337 * 全局变量: 无
338 * 入口参数: sentence[],待写入汉字,组成字符串
339 * 出口参数: 无
340 * 调用模块: WriteWord()
341 * 作 者: 王康
342 * 日 期: 2008.8.6
343 * 修 改 人: 王康
344 * 日 期:
345 * 版 本: KEIL uV2
346 ******************************************************************************************************/
347 void ScrolDisplay(uchar sentence[255])
348 {
349 1 uchar i = 0;
350 1 uchar j = 0;
351 1 for(i = 0; i < strlen(sentence) / 2; i++)
352 1 {
353 2 for(j = 0; j <= i; j++)
354 2 {
355 3 word_buf[i].word[0] = sentence[i * 2];
356 3 word_buf[i].word[1] = sentence[i * 2 + 1];
357 3 WriteFixWord(i,word_buf[i].word);
358 3 }
359 2 }
360 1 }
361
362
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V7.50 LCD12864 08/08/2008 00:58:17 PAGE 7
CODE SIZE = 654 ----
CONSTANT SIZE = 986 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 64 20
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -