⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t6963.lst

📁 T6963为控制芯片的液晶驱动程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -