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

📄 my6963.lst

📁 基于proteus的液晶(t6969c)显示程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -