📄 lcd12864.lst
字号:
247 void WriteWord(uchar st_line, uchar x_add, uchar y_add, uchar Index[2])
248 {
249 1 uchar i;
250 1 uchar j;
251 1 if(y_add < 64)
252 1 {
253 2 LEFTSIDE
254 2 WriteCmd(y_add + 0x40);
255 2 }
256 1 else
257 1 {
258 2 RIGHTSIDE
259 2 WriteCmd(y_add);
260 2 }
261 1
262 1 SetPos(st_line, x_add, y_add); //设置显示指针的位置
263 1
264 1 for(i = 0; i < 255; i++)
265 1 {
266 2 //汉字作为双字节字符串处理 采用顺序检索方式查找结构体名
267 2 if((GB_16[i].Index[0] == Index[0]) && (GB_16[i].Index[1] == Index[1]))
268 2 {
269 3 for(j = 0; j < 16; j++) //先写上半字节
270 3 {
271 4 WriteData(GB_16[i].Msk[j]);
272 4 }
273 3
274 3 SetPos(st_line, x_add + 1, y_add); //页地址加1,准备写下半字节
275 3
276 3 for(j = 16; j < 32; j++)
277 3 {
278 4 WriteData(GB_16[i].Msk[j]); //写下半字节
279 4 }
280 3 //break语句只能跳出一层循环
281 3 break; //break的用处是跳出for循环,以免重复写入
282 3 }
283 2 }
284 1 }
285
286
287 /*****************************************************************************************************
288 * 函 数 名: WriteFixWord
289 * 功能描述: 本函数为在液晶屏的固定位置写汉字的子函数
290 * 因为液晶每行显示8个汉字,一共能显示32个汉字,因此add%32可以得到显示的字为第几个,
291 * x_add只能为0,2,4,6;y_add只能为0,16,32,48,64,80,96,112.从而得到转换公式
292 * 全局变量: 无
293 * 入口参数: add,指定地址范围为0--31,全屏可写32个字(16*16)
294 * Index[2],字符串数组,用来存储汉字
295 * 出口参数: 无
296 * 调用模块: WriteWord()
297 * 版 本: KEIL uV2
298 ******************************************************************************************************/
299 void WriteFixWord(uchar add, uchar Index[2])
300 {
301 1 uchar st_line = 0; //设置起始行为0
302 1 uchar x_add = add % 32 / 8 * 2; //转换得到相应的x_add,y_add
303 1 uchar y_add = add % 32 % 8 * 16;
C51 COMPILER V7.50 LCD12864 05/05/2009 20:58:41 PAGE 6
304 1 WriteWord(st_line, x_add, y_add, Index); //调用任意位置写单个汉字的子函数
305 1 }
306
307
308 /*****************************************************************************************************
309 * 函 数 名: WriteSentence
310 * 功能描述: 本函数为在液晶屏上写句子的子函数,按照0到31的顺序写入句子
311 * 从第0个字的位置开始写入汉字,写完一个之后字指针加1,继续写下一个汉字
312 * 全局变量: 无
313 * 入口参数: sentence[],待写入汉字,组成字符串
314 * 出口参数: 无
315 * 调用模块: WriteWord(),strlen()
316 * 版 本: KEIL uV2
317 ******************************************************************************************************/
318 void WriteSentence(uchar sentence[255])
319 {
320 1 uchar i;
321 1 uchar j = 0;
322 1 for(i = 0; i < strlen(sentence) / 2; i++) //strlen()为调用"string.h"中的函数,求字符串的长度
323 1 {
324 2 //从sentence中两个两个的取字符串即汉字 注意不要弄半角的字符或标点符号,否则后面的汉字将找不到
325 2 word_buf[i].word[0] = sentence[i * 2];
326 2 word_buf[i].word[1] = sentence[i * 2 + 1];
327 2 WriteFixWord(j++, word_buf[i].word);
328 2 }
329 1 }
330
331
332 /*****************************************************************************************************
333 * 函 数 名: WriteNum
334 * 功能描述: 本函数为在液晶屏的任意位置显示ASCII表的第几个字符
335 * 全局变量: 无
336 * 入口参数: st_line, x_add, y_add, order
337 * 出口参数: 无
338 * 调用模块: SetPos(),WriteData()
339 * 版 本: KEIL uV2
340 ******************************************************************************************************/
341 void WriteNum(uchar st_line, uchar x_add, uchar y_add, uchar order)
342 {
343 1 uchar i;
344 1 uint k;
345 1 uchar buf_x, buf_y;
346 1
347 1 buf_x = x_add;
348 1 buf_y = y_add;
349 1
350 1 k = order * 0x10; //因为每16个字节表示一个字符
351 1
352 1 for(i = 0; i < 8; i++)
353 1 {
354 2 SetPos(st_line, x_add, y_add); //设置显示指针的位置
355 2 WriteData(num[k]);
356 2 k++;
357 2 y_add++;
358 2 if(y_add > 127)
359 2 {
360 3 y_add = 0;
361 3 x_add++;
362 3 x_add++;
363 3 }
364 2 }
365 1
C51 COMPILER V7.50 LCD12864 05/05/2009 20:58:41 PAGE 7
366 1 x_add = buf_x + 1;
367 1 y_add = buf_y;
368 1
369 1 for(i = 0;i < 8; i++)
370 1 {
371 2 SetPos(st_line, x_add, y_add); //设置显示指针的位置
372 2 WriteData(num[k]);
373 2 k++;
374 2 y_add++;
375 2 if(y_add > 127)
376 2 {
377 3 y_add = 0;
378 3 x_add++;
379 3 x_add++;
380 3 }
381 2 }
382 1 }
383
384
385 /*****************************************************************************************************
386 * 函 数 名: WriteStr
387 * 功能描述: 本函数为在液晶屏的任意位置显示显示一列数字
388 * 全局变量: 无
389 * 入口参数: st_line, x_add, y_add, str
390 * 出口参数: 无
391 * 调用模块: SetPos(),WriteNum()
392 * 版 本: KEIL uV2
393 ******************************************************************************************************/
394 void WriteStr(uchar st_line, uchar x_add, uchar y_add, uchar *str)
395 {
396 1 uchar i;
397 1 uchar j;
398 1 uchar k;
399 1 uchar n;
400 1 i = 0;
401 1
402 1 n = strlen(str); //no表示数字的个数
403 1
404 1 for(j = 0; j < n; j++)
405 1 {
406 2 k = str[i] - 0x20; //ASCII码转化为10进制数
407 2 WriteNum(st_line, x_add, y_add, k); //调用显示字符子函数
408 2 y_add = y_add + 8;
409 2 i++;
410 2 if(y_add > 127)
411 2 {
412 3 y_add = 0;
413 3 x_add++;
414 3 x_add++;
415 3 }
416 2 }
417 1 }
418
419
420 /*****************************************************************************************************
421 * 函 数 名: Printf_Num
422 * 功能描述: 本函数为在液晶屏的任意位置显示变量中的浮点数
423 * 全局变量: 无
424 * 入口参数: st_line, x_add, y_add, no
425 * 出口参数: 无
426 * 调用模块: SetPos(),WriteData()
427 * 版 本: KEIL uV2
C51 COMPILER V7.50 LCD12864 05/05/2009 20:58:41 PAGE 8
428 ******************************************************************************************************/
429 /*
430 void Printf_Num(uchar st_line, uchar x_add, uchar y_add, float no)
431 {
432 uchar a[8];
433 if((no < 1.0) && (no > 0.0))
434 {
435 no *= 1000;
436 a[0] = 0;
437 a[1] = 0;
438 a[2] = no/1000;
439 a[3] = 0;
440 a[4] = no/100
441 a[5] = no%100/10 + 0x30;
442 a[6] = no%100%10 + 0x30;
443 a[7] = 0;
444 WriteStr(st_line, x_add, y_add, a);
445 }
446 else if((no < 1.0) && (no > 0.0))
447 {
448
449 }
450 }
451 */
452
453
454 /*****************************************************************************************************
455 * 函 数 名: Disp_Init
456 * 功能描述: 本函数为在液晶屏的显示最初界面
457 * 全局变量: 无
458 * 入口参数: 无
459 * 出口参数: 无
460 * 调用模块: WriteFixWord(),WriteStr()
461 * 版 本: KEIL uV2
462 ******************************************************************************************************/
463 void Disp_Init()
464 {
465 1 WriteFixWord(0,"单");
466 1 WriteFixWord(1,"价");
467 1 WriteStr(0,0,32,": 0.00");
468 1 WriteFixWord(7,"元");
469 1
470 1 WriteFixWord(8,"重");
471 1 WriteFixWord(9,"量");
472 1 WriteStr(0,2,32,": 0.00");
473 1 WriteStr(0,2,112,"kg");
474 1
475 1 WriteFixWord(16,"金");
476 1 WriteFixWord(17,"额");
477 1 WriteStr(0,4,32,": 0.00");
478 1 WriteFixWord(23,"元");
479 1
480 1 WriteFixWord(24,"商");
481 1 WriteFixWord(25,"品");
482 1 WriteFixWord(26,"名");
483 1 WriteFixWord(27,"称");
484 1 WriteStr(0,6,64,":");
485 1 }
486
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V7.50 LCD12864 05/05/2009 20:58:41 PAGE 9
CODE SIZE = 1004 ----
CONSTANT SIZE = 2435 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 64 32
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 + -