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

📄 my6963.lst

📁 T6963C程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -