📄 my6963.lst
字号:
520 1 fnPR1(LC_TXT_WID,0x1E,0x00); // 文本显示区宽度
521 1 fnPR1(LC_GRH_STP,0x00,0x00); // 图形显示区首地址
522 1 fnPR1(LC_GRH_WID,0x1E,0x00); // 图形显示区宽度
523 1 fnPR12(LC_CUR_SHP | 0x01); // 光标形状
524 1 fnPR12(LC_MOD_OR); // 显示方式设置
525 1 fnPR12(LC_DIS_SW | 0x08); // 显示开关设置
526 1 return(0);
527 1 }
528 /********************************************************/
529 /* ASCII(8*16) 及 汉字(16*16) 显示函数 */
530 /********************************************************/
531 unsigned char dprintf(unsigned char x,unsigned char y, char *ptr)
532 {
533 1 unsigned char c1,c2;//cData;
534 1 unsigned char i,j,uLen,uRow,uCol;
535 1 unsigned int k;
536 1 uLen=0;
537 1 i=0;
538 1 uRow = y;
539 1 uCol = x;
540 1 fnSetPos(uRow*16,uCol); //起点定位
541 1 while (ptr[uLen]!=0) //探测字串长度
542 1 {
543 2 uLen++;
544 2 }
545 1 while(i<uLen)
546 1 {
547 2 c1 = ptr[i];
548 2 c2 = ptr[i+1];
549 2 //ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
550 2 uRow = fnGetRow();
551 2 uCol = fnGetCol();
C51 COMPILER V7.06 MY6963 11/22/2007 16:45:41 PAGE 10
552 2 if(c1 <=128) // ASCII
553 2 {
554 3 for(j=0;j<16;j++) //写16行
555 3 {
556 4 fnPR12(LC_AUT_WR); // 写数据(命令)
557 4 if (c1 >= 0x20)
558 4 {
559 5 fnPR13( ASC_MSK[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)] );
560 5 }
561 4 else
562 4 {
563 5 fnPR13(0x00);// fnPR13(cData);
564 5 }
565 4 fnPR12(LC_AUT_OVR); //写数据结束
566 4 fnSetPos(uRow+j+1,uCol);
567 4 }
568 3 if(c1 != BS) // 非退格
569 3 {
570 4 uCol++; // 列数加1
571 4 }
572 3
573 3 }
574 2 else // 中文
575 2 {
576 3 for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++) // 查找定位,第几个汉字
577 3 {
578 4 if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
579 4 {
580 5 break;
581 5 }
582 4
583 4 }
584 3 for(k=0;k<sizeof(GB_16[0].Msk)/2;k++) //16行循环
585 3 {
586 4 fnSetPos(uRow+k,uCol);
587 4 fnPR12(LC_AUT_WR); // 写数据
588 4 if(j < sizeof(GB_16)/sizeof(GB_16[0])) //四个汉字 第几个汉字
589 4 {
590 5 fnPR13(GB_16[j].Msk[k*2]);
591 5 fnPR13(GB_16[j].Msk[k*2+1]);
592 5 }
593 4 else // 未找到该字
594 4 {
595 5 if(k < sizeof(GB_16[0].Msk)/4)
596 5 {
597 6 fnPR13(0x00);
598 6 fnPR13(0x00);
599 6 }
600 5 else
601 5 {
602 6 fnPR13(0xff);
603 6 fnPR13(0xff);
604 6 }
605 5 }
606 4 fnPR12(LC_AUT_OVR);
607 4 }
608 3 uCol += 2;
609 3 i++;
610 3 };
611 2 if(uCol >= 30) // 光标后移
612 2 {
613 3 uRow += 16;
C51 COMPILER V7.06 MY6963 11/22/2007 16:45:41 PAGE 11
614 3 if(uRow < 0x80)
615 3 {
616 4 uCol -= 30;
617 4 }
618 3 else
619 3 {
620 4 uRow = 0;
621 4 uCol = 0;
622 4 }
623 3 }
624 2 fnSetPos(uRow,uCol);
625 2 i++;
626 2 }
627 1 return uLen; //返回字串长度,汉字按2字节计算
628 1 }
629 /*======================*/
630 /* 延时*/
631 /*======================*/
632 void shortdelay(unsigned int tt)
633 {
634 1 unsigned char i;
635 1 while (tt)
636 1 {
637 2 i=100;
638 2 while (i)
639 2 {
640 3 i--;
641 3 }
642 2 tt--;
643 2 }
644 1 }
645
646 /*************************/
647 /* 画点*/
648 /*************************/
649 void point(unsigned char x,unsigned char y,unsigned char s)
650 {
651 1 unsigned char x1;
652 1 x1 = x >> 3; // 取Y方向分页地址
653 1 fnSetPos(y,x1); // 起点定位
654 1 x1 = turnf[ x & 0x07 ];
655 1 x1 = 0xF0 | x1 | s; // 字节内位置计算
656 1 fnPR12(x1); // 画上屏幕S显示属性8 画点0 擦除点
657 1 }
658
659 /************************************************/
660 /* 画线任意方向的斜线,直线数学方程aX+bY=1 */
661 /************************************************/
662 void Linexy(unsigned char x0,unsigned char y0,unsigned char xt,unsigned char yt,unsigned char s)
663 {
664 1 register unsigned char t;
665 1 int xerr = 0,yerr = 0;
666 1 int delta_x,delta_y,distance;
667 1 int incx,incy,uRow,uCol;
668 1 delta_x = xt-x0; // 计算坐标增量
669 1 delta_y = yt-y0;
670 1 uRow = x0;
671 1 uCol = y0;
672 1 if(delta_x>0)
673 1 {
674 2 incx = 1; // 设置单步方向
675 2 }
C51 COMPILER V7.06 MY6963 11/22/2007 16:45:41 PAGE 12
676 1 else if( delta_x==0 )
677 1 {
678 2 incx=0; // 垂直线
679 2 }
680 1 else
681 1 {
682 2 incx = -1;
683 2 delta_x = -delta_x;
684 2
685 2 }
686 1 if(delta_y>0)
687 1 {
688 2 incy=1;
689 2 }
690 1 else if( delta_y==0 )
691 1 {
692 2 incy=0; // 水平线
693 2 }
694 1 else
695 1 {
696 2 incy=-1;
697 2 delta_y=-delta_y;
698 2 }
699 1 if( delta_x > delta_y )
700 1 {
701 2 distance=delta_x; // 选取基本增量坐标轴
702 2 }
703 1 else
704 1 {
705 2 distance=delta_y;
706 2 }
707 1 for( t=0;t <= distance+1; t++ ) // 画线输出
708 1 {
709 2 point(uRow,uCol,s); // 画点
710 2 xerr += delta_x;
711 2 yerr += delta_y;
712 2 if( xerr > distance )
713 2 {
714 3 xerr -= distance;
715 3 uRow += incx;
716 3 }
717 2 if( yerr > distance )
718 2 {
719 3 yerr -= distance;
720 3 uCol += incy;
721 3 }
722 2 }
723 1 }
724
725 void main(void) // 测试用
726 {
727 1 unsigned char i,j,l,k;
728 1
729 1 shortdelay(1200);
730 1
731 1 fnLCMInit();
732 1 cls();
733 1 cursor(0,0);
734 1 dprintf(12,0,"I completed T6963C");
735 1 dprintf(10,1,"display with AT89C52");
736 1 dprintf(10,2,"---hubei, china ---");
737 1 dprintf(10,3,"07-11-22 15:49 周四");
C51 COMPILER V7.06 MY6963 11/22/2007 16:45:41 PAGE 13
738 1
739 1 k=0;
740 1 for(l=0;l<img1[1];l++)//交错显示两个图像
741 1 {
742 2 fnSetPos(k,0);k++;
743 2 fnPR12(LC_AUT_WR); // 写数据
744 2 for(j=0;j<img1[0]/8;j++)
745 2 fnPR13(img1[l*(img1[0]/8)+j+2]);
746 2 fnPR12(LC_AUT_OVR);
747 2 }
748 1 shortdelay(3000);
749 1 k=24;
750 1 for(l=0;l<img1[1];l++)
751 1 {
752 2 fnSetPos(k,5);k++;
753 2 fnPR12(LC_AUT_WR); // 写数据
754 2 for(j=0;j<img1[0]/8;j++)
755 2 fnPR13(img1[l*(img1[0]/8)+j+2]);
756 2 fnPR12(LC_AUT_OVR);
757 2 }
758 1 shortdelay(3000);
759 1
760 1 Linexy(0,0,79,0,8); // 横线
761 1 Linexy(0,63,79,63,8); // 横线
762 1 Linexy(0,0,0,63,8); // 竖线
763 1 Linexy(79,0,79,63,8); // 竖线
764 1 while(1);
765 1 }
*** WARNING C280 IN LINE 727 OF MY6963.C: 'i': unreferenced local variable
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1470 ----
CONSTANT SIZE = 2022 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 42
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -