📄 t6963.lst
字号:
528 3 for(j=0;j<16;j++) //写16行
529 3 {
530 4 fnPR12(LC_AUT_WR); // 写数据(命令)
531 4 if (c1 >= 0x20)
532 4 {
533 5 fnPR13( ASC_MSK[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)] );
534 5 }
535 4 else
536 4 {
537 5 fnPR13(cData);
538 5 }
539 4 fnPR12(LC_AUT_OVR); //写数据结束
540 4 fnSetPos(uRow+j+1,uCol);
541 4 }
542 3 if(c1 != BS) // 非退格
543 3 {
544 4 uCol++; // 列数加1
545 4 }
546 3
547 3 }
548 2 else // 中文
549 2 {
550 3 for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++) // 查找定位,第几个汉字
551 3 {
C51 COMPILER V7.50 T6963 06/10/2007 18:45:08 PAGE 10
552 4 if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
553 4 {
554 5 break;
555 5 }
556 4
557 4 }
558 3 for(k=0;k<sizeof(GB_16[0].Msk)/2;k++) //16行循环
559 3 {
560 4 fnSetPos(uRow+k,uCol);
561 4 fnPR12(LC_AUT_WR); // 写数据
562 4 if(j < sizeof(GB_16)/sizeof(GB_16[0])) //四个汉字 第几个汉字
563 4 {
564 5 fnPR13(GB_16[j].Msk[k*2]);
565 5 fnPR13(GB_16[j].Msk[k*2+1]);
566 5 }
567 4 else // 未找到该字
568 4 {
569 5 if(k < sizeof(GB_16[0].Msk)/4)
570 5 {
571 6 fnPR13(0x00);
572 6 fnPR13(0x00);
573 6 }
574 5 else
575 5 {
576 6 fnPR13(0xff);
577 6 fnPR13(0xff);
578 6 }
579 5 }
580 4 fnPR12(LC_AUT_OVR);
581 4 }
582 3 uCol += 2;
583 3 i++;
584 3 };
585 2 if(uCol >= 30) // 光标后移
586 2 {
587 3 uRow += 16;
588 3 if(uRow < 0x80)
589 3 {
590 4 uCol -= 30;
591 4 }
592 3 else
593 3 {
594 4 uRow = 0;
595 4 uCol = 0;
596 4 }
597 3 }
598 2 fnSetPos(uRow,uCol);
599 2 i++;
600 2 }
601 1 return uLen; //返回字串长度,汉字按2字节计算
602 1 }
603 /*======================*/
604 /* 延时*/
605 /*======================*/
606 void shortdelay(unsigned int tt)
607 {
608 1 unsigned char i;
609 1 while (tt)
610 1 {
611 2 i=100;
612 2 while (i)
613 2 {
C51 COMPILER V7.50 T6963 06/10/2007 18:45:08 PAGE 11
614 3 i--;
615 3 }
616 2 tt--;
617 2 }
618 1 }
619 /*************************/
620 /* 画点*/
621 /*************************/
622 void point(unsigned char x,unsigned char y,unsigned char s)
623 {
624 1 unsigned char x1;
625 1 x1 = x >> 3; // 取Y方向分页地址
626 1 fnSetPos(y,x1); // 起点定位
627 1 x1 = turnf[ x & 0x07 ];
628 1 x1 = 0xF0 | x1 | s; // 字节内位置计算
629 1 fnPR12(x1); // 画上屏幕S显示属性8 画点0 擦除点
630 1 }
631 /************************************************/
632 /* 画线任意方向的斜线,直线数学方程aX+bY=1 */
633 /************************************************/
634 void Linexy(unsigned char x0,unsigned char y0,unsigned char xt,unsigned char yt,unsigned char s)
635 {
636 1 register unsigned char t;
637 1 int xerr = 0,yerr = 0;
638 1 int delta_x,delta_y,distance;
639 1 int incx,incy,uRow,uCol;
640 1 delta_x = xt-x0; // 计算坐标增量
641 1 delta_y = yt-y0;
642 1 uRow = x0;
643 1 uCol = y0;
644 1 if(delta_x>0)
645 1 {
646 2 incx = 1; // 设置单步方向
647 2 }
648 1 else if( delta_x==0 )
649 1 {
650 2 incx=0; // 垂直线
651 2 }
652 1 else
653 1 {
654 2 incx = -1;
655 2 delta_x = -delta_x;
656 2
657 2 }
658 1 if(delta_y>0)
659 1 {
660 2 incy=1;
661 2 }
662 1 else if( delta_y==0 )
663 1 {
664 2 incy=0; // 水平线
665 2 }
666 1 else
667 1 {
668 2 incy=-1;
669 2 delta_y=-delta_y;
670 2 }
671 1 if( delta_x > delta_y )
672 1 {
673 2 distance=delta_x; // 选取基本增量坐标轴
674 2 }
675 1 else
C51 COMPILER V7.50 T6963 06/10/2007 18:45:08 PAGE 12
676 1 {
677 2 distance=delta_y;
678 2 }
679 1 for( t=0;t <= distance+1; t++ ) // 画线输出
680 1 {
681 2 point(uRow,uCol,s); // 画点
682 2 xerr += delta_x;
683 2 yerr += delta_y;
684 2 if( xerr > distance )
685 2 {
686 3 xerr -= distance;
687 3 uRow += incx;
688 3 }
689 2 if( yerr > distance )
690 2 {
691 3 yerr -= distance;
692 3 uCol += incy;
693 3 }
694 2 }
695 1 }
696 /********************************************/
697 /* 画圆数学方程(X-Ox)^2+(Y-Oy)^2=Rx^2 */
698 /********************************************/
699 void circle(unsigned char Ox,unsigned char Oy,unsigned char Rx,unsigned char s)
700 {
701 1 unsigned int xx,rr;
702 1 unsigned int xt,yt;
703 1 unsigned int rs,row,col;
704 1 yt = Rx;
705 1 rr = (unsigned int)Rx*Rx+1; // 补偿1 修正方形
706 1 rs = (yt+(yt>>1))>>1; // (*0.75)分开1/8圆弧来画
707 1 for (xt=0;xt<=rs;xt++)
708 1 {
709 2 xx = xt*xt;
710 2 while ((yt*yt)>(rr-xx))
711 2 {
712 3 yt--;
713 3 }
714 2 row = Ox+xt; // 第一象限
715 2 col = Oy-yt;
716 2 point(row,col,s);
717 2 row = Ox-xt; // 第二象限
718 2 point(row,col,s);
719 2 col = Oy+yt; // 第三象限
720 2 point(row,col,s);
721 2 row = Ox+xt; // 第四象限
722 2 point(row,col,s);
723 2 /***************45度镜象画另一半***************/
724 2 row = Ox+yt; // 第一象限
725 2 col = Oy-xt;
726 2 point(row,col,s);
727 2 row = Ox-yt; // 第二象限
728 2 point(row,col,s);
729 2 col = Oy+xt; // 第三象限
730 2 point(row,col,s);
731 2 row = Ox+yt; // 第四象限
732 2 point(row,col,s);
733 2 }
734 1 }
735 void main(void) // 测试用
736 {
737 1 unsigned char i;
C51 COMPILER V7.50 T6963 06/10/2007 18:45:08 PAGE 13
738 1 // DDRA = 0xFF; //输出
739 1 // port_conp = 0xff;
740 1 shortdelay(1200);
741 1 //MCUCR = 0x00;
742 1 fnLCMInit();
743 1 cls();
744 1 cursor(0,0);
745 1 dprintf(12,1,"mafei is a boy he loves dan pian ji ");
746 1 dprintf(10,2,"T6963C use ATMega16");
747 1 dprintf(10,3,"~mymach~");
748 1 dprintf(35,3,"中文");
749 1 Linexy(5,5,80,5,8); // 画斜线1
750 1 Linexy(5,5,80,20,8); // 斜线2
751 1 Linexy(80,20,80,5,8); // 斜线3
752 1
753 1 Linexy(2,2,238,2,8); // ------
754 1 Linexy(2,2,2,62,8); // |
755 1 circle(45,45,20,8); // 画圆
756 1 circle(45,45,21,8); // 画同心圆加粗
757 1 shortdelay(2000);
758 1
759 1 while(1)
760 1 {
761 2 // 变化圆演示直径不断的变化由大到小再由小到大来回缩放
762 2 for (i=20;i>5;i--)
763 2 {
764 3 circle(45,45,i+1,0); // 擦除外圆
765 3 circle(45,45,i,8);
766 3 circle(45,45,i-1,8);
767 3 shortdelay(3000);
768 3 }
769 2
770 2 shortdelay(500);
771 2 for (i=5;i<20;i++)
772 2 {
773 3 circle(45,45,i-1,0); // 擦除内圆
774 3 circle(45,45,i,8);
775 3 circle(45,45,i+1,8);
776 3 shortdelay(2000);
777 3 }
778 2 shortdelay(3000);
779 2 }
780 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1709 ----
CONSTANT SIZE = 1760 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 56
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 + -