📄 19264lcd.lst
字号:
291 1 row = bakery+1; /*指向下半个字符行 */
292 1 /*下半个字符输出,8列 */
293 1 for(i=0;i<8;i++)
294 1 {
295 2 cbyte = Ezk[x]; /*取点阵码 */
296 2 Wrdata(cbyte); /*写输出一字节 */
297 2 x++;
298 2 col++;
299 2 if (col==LCMLIMIT){col=0;row=row+2;}; /*下一列,如果列越界换行*/
300 2 if (row>7) row=1; /*如果行越界,返回首行 */
301 2 } /*下半个字符输出结束 */
302 1 row=bakery;
303 1 } /*整个字符输出结束 */
C51 COMPILER V8.02 19264LCD 04/01/2009 11:25:55 PAGE 6
304
305
306 /****************************************/
307 /* 全角字符点阵码数据输出 */
308 /****************************************/
309 void Putcdot(Uchar Order)
310 {
311 1 Uchar i,bakerx,bakery; /*共定义3个局部变量 */
312 1 int x; /*偏移量,字符量少的可以定义为UCHAR */
313 1 bakerx = col; /*暂存x,y坐标,已备下半个字符使用 */
314 1 bakery = row;
315 1 x=Order * 0x20; /*每个字符32字节 */
316 1
317 1 /*上半个字符输出,16列 */
318 1 for(i=0;i<16;i++)
319 1 {
320 2 Wrdata(Hzk[x]); /*写输出一字节 */
321 2 x++;
322 2 col++;
323 2 if (col==LCMLIMIT){ col=0;row++;row++;} /*下一列,如果列越界换行*/
324 2 if (row>6) row=0; /*如果行越界,返回首行 */
325 2 } /*上半个字符输出结束 */
326 1
327 1 /*下半个字符输出,16列 */
328 1 col = bakerx;
329 1 row = bakery+1;
330 1 for(i=0;i<16;i++) /*下半部分*/
331 1 {
332 2 Wrdata(Hzk[x]);
333 2 x++;
334 2 col++;
335 2 if (col==LCMLIMIT){col=0;row++;row++;} /*下一列,如果列越界换行*/
336 2 if (row>7) row=1; /*如果行越界,返回首行 */
337 2 } /*下半个字符输出结束 */
338 1 row = bakery;
339 1 } /*整个字符输出结束 */
340
341 /****************************************/
342 /* 清屏,全屏幕清零 */
343 /****************************************/
344 void Lcmcls( void )
345 {
346 1 for(row=0;row<8;row++)
347 1 for(col=0;col<LCMLIMIT;col++) Wrdata(0);
348 1 }
349
350 /****************************************/
351 /* 从液晶片上读数据,保留在全局变量中 */
352 /****************************************/
353
354 void Rddata(void)
355 {
356 1 Locatexy(); /*坐标定位,返回时保留分区状态不变 */
357 1 Datalcm=0xFF;
358 1 Dilcm = 1; /*数据*/
359 1 Rwlcm = 1; /*读数据*/
360 1 Elcm = 1; /*读入到LCM*/
361 1 _nop_();
362 1 cbyte = Datalcm; /*虚读一次 */
363 1 Elcm = 0;
364 1 Locatexy(); /*坐标定位,返回时保留分区状态不变 */
365 1 Datalcm=0xFF;
C51 COMPILER V8.02 19264LCD 04/01/2009 11:25:55 PAGE 7
366 1 _nop_();
367 1 Dilcm = 1; /*数据*/
368 1 Rwlcm = 1; /*读数据*/
369 1 Elcm = 1; /*读入到LCM*/
370 1 _nop_();
371 1 cbyte = Datalcm; /*从数据口读数据,真读 */
372 1 Elcm = 0;
373 1 }
374
375 /****************************************/
376 /* 数据写输出 */
377 /****************************************/
378
379 void Wrdata(Uchar X)
380 {
381 1 Locatexy(); /*坐标定位,返回时保留分区状态不变 */
382 1 // wtcom();
383 1 Dilcm = 1; /*数据输出*/
384 1 Rwlcm = 0; /*写输出 */
385 1 Datalcm = X; /*数据输出到数据口 */
386 1 Elcm = 1; /*读入到LCM*/
387 1 _nop_();
388 1 Elcm = 0;
389 1 }
390
391 /****************************************/
392 /* 命令输出,每次输出一个分区控制口 */
393 /****************************************/
394
395 /*void Wrcmd(Uchar X)
396 // {
397 // Locatexy(); /*确定分区,返回时保留分区状态不变 */
398 // wtcom(); /*等待LCM操作允许 */
399 // Dilcm = 0; /*数据操作 */
400 // Rwlcm = 0; /*写输出 */
401 // Datalcm = X; /*数据输出到数据口 */
402 // Elcm = 1;_nop_();Elcm = 0; /*读入到LCM*/
403 // }
404
405 /********************************/
406 /* 命令输出到左区控制口 */
407 /********************************/
408
409 void WrcmdL(Uchar X)
410 {
411 1 lcdbusyL(); /*确定分区,返回时保留分区状态不变*/
412 1 Dilcm = 0; /*命令操作 */
413 1 Rwlcm = 0; /*写输出 */
414 1 Datalcm = X; /*数据输出到数据口 */
415 1 Elcm = 1;_nop_();Elcm = 0; /*读入到LCM*/
416 1 }
417
418 /********************************/
419 /* 命令输出到中区控制口 */
420 /********************************/
421
422 void WrcmdM(Uchar X)
423 {
424 1 lcdbusyM(); /*确定分区,返回时保留分区状态不变*/
425 1 Dilcm = 0; /*命令操作 */
426 1 Rwlcm = 0; /*写输出 */
427 1 Datalcm = X; /*命令输出到数据口 */
C51 COMPILER V8.02 19264LCD 04/01/2009 11:25:55 PAGE 8
428 1 Elcm = 1;_nop_();Elcm = 0; /*读入到LCM*/
429 1 }
430
431 /********************************/
432 /* 命令输出到右区控制口 */
433 /********************************/
434
435 void WrcmdR(Uchar X)
436 {
437 1 lcdbusyR(); /*确定分区,返回时保留分区状态不变 */
438 1 Dilcm = 0; /*命令操作 */
439 1 Rwlcm = 0; /*写输出 */
440 1 Datalcm = X; /*命令输出到数据口 */
441 1 Elcm = 1;_nop_();Elcm = 0; /*读入到LCM*/
442 1 }
443
444 /********************************************************/
445 /* 分区操作允许等待,返回时保留分区选择状态 */
446 /********************************************************/
447 void lcdbusyL(void)
448 {
449 1 CS1LCM = 0; /*CLR CS1 */
450 1 CS2LCM = 1; /*SETB CS2 */
451 1 CS3LCM = 1; /*SETB CS3 */
452 1 wtcom(); /* waitting for enable */
453 1 }
454
455 void lcdbusyM(void)
456 {
457 1 CS1LCM = 1; /*SETB CS1 */
458 1 CS2LCM = 0; /*CLR CS2 */
459 1 CS3LCM = 1; /*SETB CS3 */
460 1 wtcom(); /* waitting for enable */
461 1 }
462
463 void lcdbusyR(void)
464 {
465 1 CS1LCM = 1; /*SETB CS1 */
466 1 CS2LCM = 1; /*SETB CS2 */
467 1 CS3LCM = 0; /*CLR CS3 */
468 1 wtcom(); /* waitting for enable */
469 1 }
470
471 void wtcom(void)
472 {
473 1 Dilcm = 0; /*CLR DI */
474 1 Rwlcm = 1; /*SETB RW */
475 1 Datalcm = 0xFF; /*MOV DATA_LCM,#0FFH */
476 1 Elcm = 1;_nop_();
477 1 while(Datalcm & Lcdbusy);
478 1 Elcm = 0;
479 1 }
480
481 /********************************************************/
482 /*根据设定的坐标数据,定位LCM上的下一个操作单元位置 */
483 /********************************************************/
484 void Locatexy(void)
485 {
486 1 unsigned char x,y;
487 1 switch (col&0xc0) /* col.and.0xC0 */
488 1 { /*条件分支执行 */
489 2 case 0: {lcdbusyL();break;} /*左区 */
C51 COMPILER V8.02 19264LCD 04/01/2009 11:25:55 PAGE 9
490 2 case 0x40: {lcdbusyM();break;} /*中区 */
491 2 case 0x80: {lcdbusyR();break;} /*右区 */
492 2 }
493 1 x = col&0x3F|SETX; /* col.and.0x3f.or.setx */
494 1 y = row&0x07|SETY; /* row.and.0x07.or.sety */
495 1 wtcom(); /* waitting for enable */
496 1 Dilcm = 0; /*CLR DI */
497 1 Rwlcm = 0; /*CLR RW */
498 1 Datalcm = y; /*MOV P0,Y */
499 1 Elcm = 1;_nop_();Elcm = 0;
500 1 wtcom(); /* waitting for enable */
501 1 Dilcm = 0; /*CLR DI */
502 1 Rwlcm = 0; /*CLR RW */
503 1 Datalcm = x; /*MOV P0,X */
504 1 Elcm = 1;_nop_();Elcm = 0;
505 1 }
506
507 /********************************/
508 /*液晶屏初始化 */
509 /********************************/
510
511 void Lcminit(void)
512 {
513 1 cbyte = DISPOFF; /*关闭显示屏 */
514 1 WrcmdL(cbyte);
515 1 WrcmdM(cbyte);
516 1 WrcmdR(cbyte);
517 1 cbyte = DISPON; /*打开显示屏 */
518 1 WrcmdL(cbyte);
519 1 WrcmdM(cbyte);
520 1 WrcmdR(cbyte);
521 1 cbyte = DISPFIRST; /*定义显示起始行为零 */
522 1 WrcmdL(cbyte);
523 1 WrcmdM(cbyte);
524 1 WrcmdR(cbyte);
525 1 Lcmcls();
526 1 col=0; /*清屏 */
527 1 row=0;
528 1 Locatexy();
529 1 }
530 /********************************/
531 /* 延时 */
532 /********************************/
533 void Delay(Uchar MS)
534 {
535 1 Uchar us,usn;
536 1 while(MS!=0)
537 1 { usn = 4;
538 2 while(usn!=0)
539 2 {
540 3 us=0xf0;
541 3 while (us!=0){us--;};
542 3 usn--;
543 3 }
544 2 MS--;
545 2 }
546 1 }
547
548 /************************************定义字符串数组*************************************/
549 Uchar code STR1[]="China Mobile";
550 Uchar code STR2[]="Communications";
551 Uchar code STR3[]="Corporation";
C51 COMPILER V8.02 19264LCD 04/01/2009 11:25:55 PAGE 10
552 Uchar code STR4[]="Welcome you!";
553
554 /************************************定义中文字库***************************************/
555 Uchar code Hzk[]={
556 0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x08,0xFC,0x08,0x00, /*中*/
557 0x00, 0x03,0x01,0x01,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x01,0x01,0x03,0x00,0x00,
558 0x00,0xFE,0x02,0x0A,0x8A,0x8A,0x8A,0xFA,0x8A,0xCA,0x8E,0x0A,0x02,0xFF,0x02,0x00,/*国*/
559 0x00,0xFF,0x40,0x50,0x50,0x50,0x50,0x5F,0x50,0x52,0x54,0x50,0x40,0xFF,0x00,0x00,
560 0x24,0x24,0xA4,0xFE,0xA3,0x22,0x10,0x88,0x8C,0x57,0xE4,0x24,0x14,0x0C,0x00,0x00, /*移*/
561 0x04,0x02,0x01,0xFF,0x00,0x83,0x80,0x88,0x44,0x46,0x29,0x31,0x11,0x0D,0x03,0x00,
562 0x20,0x24,0x24,0xE4,0x26,0x34,0x20,0x10,0x10,0xFF,0x10,0x10,0x10,0xF8,0x10,0x00, /*动*/
563 0x08,0x1C,0x0B,0x08,0x08,0x8A,0x4C,0x30,0x0C,0x03,0x40,0x80,0x40,0x3F,0x00,0x00,
564 0x40,0x42,0x44,0xCC,0x00,0x00,0xF1,0x91,0x95,0xF9,0x95,0x93,0xF9,0x10,0x00,0x00, /*通*/
565 0x00,0x40,0x20,0x1F,0x20,0x40,0xBF,0x84,0x84,0xBF,0x94,0xA4,0x9F,0xC0,0x40,0x00,
566 0x80,0x40,0x20,0xF8,0x07,0x24,0x24,0x24,0x25,0x26,0x24,0x24,0xB4,0x26,0x04,0x00, /*信*/
567 0x00,0x00,0x00,0xFF,0x00,0x01,0xFD,0x45,0x45,0x45,0x45,0x45,0xFD,0x01,0x00,0x00,
568 0x20,0x10,0x08,0xFC,0x57,0x54,0x54,0xFD,0x56,0x54,0x54,0x56,0x04,0x00,0x00,0x00, /*集*/
569 0x04,0x44,0x44,0x27,0x15,0x0D,0x05,0xFF,0x05,0x0D,0x15,0x25,0x65,0x24,0x04,0x00,
570 0x00,0xFE,0x22,0x22,0x22,0x22,0xA2,0x62,0xFE,0x22,0x22,0x32,0x22,0xFF,0x02,0x00, /*团*/
571 0x00,0xFF,0x48,0x44,0x42,0x41,0x50,0x60,0x5F,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,
572 0x00,0x00,0x80,0x40,0x30,0x0C,0x00,0xC0,0x06,0x18,0x20,0x40,0x80,0x80,0x80,0x00, /*公*/
573 0x01,0x01,0x00,0x30,0x28,0x24,0x23,0x20,0x20,0x28,0x30,0x60,0x00,0x01,0x00,0x00,
574 0x10,0x10,0x92,0x92,0x92,0x92,0x92,0x92,0xD2,0x9A,0x12,0x02,0xFF,0x02,0x00,0x00, /*司*/
575 0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x40,0x80,0x7F,0x00,0x00,0x00
576 };
577 /****************************************/
578 /* 定义ASCII字库8列*16行 */
579 /****************************************/
580
581 Uchar code Ezk[]={
582 /*-文字: --0x20 */
583 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
584 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
585 /*-文字:!--0x21 */
586 0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,
587 0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x00,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -