📄 lcd_part_12864j.lst
字号:
436 5 break;
437 5 }
438 4
439 4 //-------------------------------------------------------
440 4 // Open fire
441 4
442 4 B = B << 1; //move data; 开枪!!
443 4 gcount--;
444 4 g++;
445 4 }
446 3 }
447 2 }
448 1 //-------------------------------------------------------
449 1 // Complete writing lcd's data task
450 1 wr_lcd (comm,DISPLAY_ON);
451 1 return error;
452 1 }
453
454
455 /******************************************************************************************
456 * 函数名称 :lcd_china
457 * 功能描述 :LCD中文显示函数,汉字显示从左上角0位开始,总共显示32个字,中文两个字节,
458 * 英文只有1个字节,所以英文个数要偶数个才能正常显示,奇数个加空格。
459 * 参数 : 参数名称: 输入/输出 类型 描述
460 * *chn input uchar ASCII数据组,最大32汉字
461 * 返回值 :
462 * 作者 :lujian
463 * 创建日期 :2003-12-19
464 * 全局变量 :
465 * 全局静态变量:
466 * 局部静态变量:
467 *----------------------------------------修改历史------------------------------------------
468 * 当前版本 :0.0.2 修改人:lujian 修改日期:2009-3-16
469 * 修改说明 :
470 ******************************************************************************************/
471
472 void lcd_china(uchar code *chn)
473 {
474 1 uchar i, j, c;
475 1 c = strlen(chn);
476 1 wr_lcd(comm,FUN_MODE);
477 1 for(j=0;j<4;j++)
478 1 {
479 2 switch (j)
480 2 {
481 3 case 0:
482 3 wr_lcd(comm,0x80); break;
483 3 case 1:
484 3 wr_lcd(comm,0x90); break;
485 3 case 2:
486 3 wr_lcd(comm,0x88); break;
487 3 case 3:
488 3 wr_lcd(comm,0x98); break;
489 3 }
C51 COMPILER V8.15 LCD_PART_12864J 03/17/2009 18:11:02 PAGE 9
490 2 for(i=0;i<16;i++)
491 2 {
492 3 if(c > 0)
493 3 {
494 4 wr_lcd(dat,chn[j*16+i]); //writing lcd's data of ASCII
495 4 c--;
496 4 }
497 3 else
498 3 {
499 4 wr_lcd(dat,0x20);
500 4 }
501 3 }
502 2 }
503 1 }
504
505 /******************************************************************************************
506 * 函数名称 :coundisplay
507 * 功能描述 :反显函数,在lcd内任意范围反显,条件x1大于或等于x2,y1大于等于y2
508 * 参数 : 参数名称: 输入/输出 类型 描述
509 * x1 input uchar 第一点行位置数据(0-127)
510 * y1 input uchar 第一点列位置数据(0-63)
511 * x2 input uchar 第二点位置数据(0-127)
512 * y2 input uchar 第二点位置数据(0-63)
513 * 返回值 :
514 * 作者 :lujian
515 * 创建日期 :2003-12-19
516 * 全局变量 :
517 * 全局静态变量:
518 * 局部静态变量:
519 *----------------------------------------修改历史------------------------------------------
520 * 当前版本 :0.0.2 修改人:lujian 修改日期:2009-3-16
521 * 修改说明 :
522 ******************************************************************************************/
523
524 bit coundisplay(uchar x1, uchar y1, uchar x2, uchar y2)
525 {
526 1 uchar xrange, dc, gcount, g, g1, temp1, yt, TDATA;
527 1 uchar dstate, start, end, xetd, tlen;
528 1 uchar cdata[16];
529 1
530 1 //-------------------------------------------------------
531 1 // Boundary detection
532 1
533 1 if(x1 > x2 || x1 > 127 || x2 > 127)
534 1 {
535 2 return FALSE;
536 2 }
537 1
538 1 if(y1 > y2 || y1 > 63 || y2 > 63)
539 1 {
540 2 return FALSE;
541 2 }
542 1
543 1 wr_lcd(comm,DISPLAY_OFF); //Entry mode set
544 1
545 1 xrange = x2 - x1 + 1;
546 1 start = (x1 /16)*16;
547 1 xetd = x2 % 16;
548 1
549 1 if(xetd!=0)
550 1 xetd = 16 - xetd;
551 1 end = x2 + xetd;
C51 COMPILER V8.15 LCD_PART_12864J 03/17/2009 18:11:02 PAGE 10
552 1
553 1 tlen = end - start;
554 1
555 1 //-------------------------------------------------------
556 1
557 1 //main program
558 1
559 1 //-------------------------------------------------------
560 1
561 1 for(yt = y1;yt < (y2+1); yt++)
562 1 {
563 2 dc = 0;
564 2 gcount = 0;
565 2 dstate = 0;
566 2 g = start;
567 2 g1 = 7;
568 2 B = 0xff;
569 2
570 2 temp1 = x1 /16; //Reading the start data form lcd.
571 2 XYadr(temp1,yt);
572 2 rd_lcd();
573 2
574 2 while(g <= x2)
575 2 {
576 3 if(gcount == 0) //data empty!!装货物!!
577 3 {
578 4 TDATA = rd_lcd(); //read lcd's data
579 4 gcount = 8;
580 4 }
581 3 if(g >= x1 && g <= x2)
582 3 {
583 4 switch (g1)
584 4 {
585 5 case 7:
586 5 ACC = TDATA;
587 5 B_7 = ACC_7;
588 5 g1--;
589 5 break;
590 5 case 6:
591 5 ACC = TDATA;
592 5 B_6 = ACC_7;
593 5 g1--;
594 5 break;
595 5 case 5:
596 5 ACC = TDATA;
597 5 B_5 = ACC_7;
598 5 g1--;
599 5 break;
600 5 case 4:
601 5 ACC = TDATA;
602 5 B_4 = ACC_7;
603 5 g1--;
604 5 break;
605 5 case 3:
606 5 ACC = TDATA;
607 5 B_3 = ACC_7;
608 5 g1--;
609 5 break;
610 5 case 2:
611 5 ACC = TDATA;
612 5 B_2 = ACC_7;
613 5 g1--;
C51 COMPILER V8.15 LCD_PART_12864J 03/17/2009 18:11:02 PAGE 11
614 5 break;
615 5 case 1:
616 5 ACC = TDATA;
617 5 B_1 = ACC_7;
618 5 g1--;
619 5 break;
620 5 case 0:
621 5 ACC = TDATA;
622 5 B_0 = ACC_7;
623 5 cdata[dc] = ~B; //save counter data; 每满8个打包货物(在此数据取反)
624 5 dc++;
625 5 g1 = 7;
626 5 break;
627 5 }
628 4 }
629 3 TDATA = TDATA << 1; //move data;
630 3 gcount--;
631 3 g++;
632 3 }
633 2 if(g1 != 7)
634 2 {
635 3 cdata[dc] = ~B; //save Less than 8 bits of counter data; 打包不足8个的货物(在此数据取反)
636 3 }
637 2 lcd_display(cdata, x1, yt, xrange, 1); //writing counter data; 重写打包数据(即需要反显的数据)
638 2 }
639 1
640 1 //-------------------------------------------------------
641 1 // Complete writing lcd's data task
642 1 return TRUE;
643 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1831 ----
CONSTANT SIZE = 32 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 83
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -