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