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

📄 1335c51.lst

📁 1335液晶的光标控制
💻 LST
📖 第 1 页 / 共 4 页
字号:
 595   4                                                      }
 596   3                                                      break;
 597   3                      }
 598   2                      tempPtr = Cnumber * DotWidth*nByte + tempCount1 + 1;
 599   2                      Optr++;
 600   2              }
 601   1      }
 602          /*
 603          void PutCdotInGraph( Uint Ox, Uchar Oy, Uchar Cnumber, Uchar DotWidth,Uchar attribs ) {
 604          
 605          Uint tempPtr,Optr;
 606          Uchar tempCount1,tempCount2,nByte;
 607                          
 608                  Optr = (Uint)Oy * paraP9 + Ox;
 609                  nByte = DotWidth/8;
 610                  WriteCommand( CsrDirD );                                                // 自动右移。
 611          
 612          
 613                          if(attribs)Optr += BasePart2*256;
 614                          WriteCommand( CsrW );                                           // 光标定位指令
 615                          WriteData( (Uchar)(Optr &0xff) );               // 设置光标地址CSR
 616                          WriteData( (Uchar)(Optr /256 ) );
 617                          WriteCommand( mWrite );                                         // ram写指令
 618                          
 619                  
 620                                  for(tempCount2=0;tempCount2<DotWidth;tempCount2++) {
 621                                                          WriteData( Cdotlib[Cnumber].Msk[tempCount2*2] );                // 写入数据
 622                                                          }
 623                                                  
 624                  
 625                          tempPtr = Cnumber * DotWidth*nByte + tempCount1 + 1;
 626                          Optr++; 
 627                          if(attribs)Optr += BasePart2*256;
 628                          WriteCommand( CsrW );                                           // 光标定位指令
 629                          WriteData( (Uchar)(Optr &0xff) );               // 设置光标地址CSR
 630                          WriteData( (Uchar)(Optr /256 ) );
 631                          WriteCommand( mWrite );                                         // ram写指令
 632          
 633                          for(tempCount2=0;tempCount2<DotWidth;tempCount2++) {
 634                                                          WriteData( Cdotlib[Cnumber].Msk[tempCount2*2+1] );              // 写入数据
 635                                                          }
 636          
 637                  }
 638          
 639           */
 640          /*============================================================================
 641           汉字写入子程序(文本方式)
C51 COMPILER V8.08   1335C51                                                               04/26/2008 21:36:20 PAGE 12  

 642           在文本方式下显示汉字,  首先要建立汉字Cgram, 要定义汉字代码.
 643           在文本方式下写汉字需要写入4 个代码以组成一个汉字 
 644           每8字节组成一个点阵Ascii小区,4个小区组合成一个汉字所以需要4个代码
 645           ============================================================================*/
 646          void PutCdotInAlpha( Uchar Ox, Uchar Oy, Uchar Cnumber) {
 647   1      
 648   1      Uint tempPtr;
 649   1      Uchar tempCount;
 650   1                      
 651   1              tempPtr = (Uint)Oy * paraP9 + Ox;
 652   1              WriteCommand( CsrDirD );                                        // CSRDIR 代码(下移)
 653   1      
 654   1              for(tempCount=0;tempCount<2;tempCount++) {
 655   2                      
 656   2              
 657   2                      WriteCommand( CsrW );                                   // CSRW 代码,光标指针设置
 658   2                      WriteData( (Uchar)(tempPtr &0xff) );    // 设置光标地址CSR
 659   2                      WriteData( tempPtr /256 + BasePart3 );
 660   2                      WriteCommand( mWrite );                                 // 代码0x42,数据写入指令
 661   2      
 662   2                      WriteData( Cnumber++ );                                 // 写入汉字代码
 663   2      
 664   2                      WriteData( Cnumber++ );                                 // 写入汉字代码
 665   2                      tempPtr++;                                                              // 修正光标地址
 666   2              }
 667   1      }
 668          
 669          /*======================== 清显示 32K RAM区(清屏)子程序 ======================*/
 670          
 671          void LcmClear( void ) {
 672   1      
 673   1      Uint i1=32768;
 674   1      
 675   1              WriteCommand( CsrDirR );                        // 光标移动方向定义:自动右移
 676   1              WriteCommand( CsrW );                           // 光标Locate,定位
 677   1              WriteData( 0 );                                         // 写入参数CSRL设置参数光标指针低8位
 678   1              WriteData( 0 );                                         // 写入参数CSRH设置参数光标指针高8位
 679   1              WriteCommand( mWrite );                         // 数据写入指令,代码0x42
 680   1              while(i1--)     {
 681   2      
 682   2                      WriteData( 0x0 );       // 写入数据0
 683   2              }
 684   1      }
 685          
 686          /*============================================================================
 687           光标位定位,用于在1区图形方式下。
 688           输入参数约定: x...水平方向字节单位坐标,即可以以半个汉字宽度设定水平坐标。
 689                                          y...垂直方向以行线定位的坐标,可以定位到点单位。
 690                                          左上角约定坐标为( 0, 0 )
 691          
 692           ============================================================================*/
 693          void Locatexy(Uchar x,Uchar y, Uchar attribs) {
 694   1      Uint temp;
 695   1              temp = (Uint)y*paraP9+x;
 696   1              if(attribs)temp += BasePart2*256;       // 如果需要就指向第二区,加上第二区首地址
 697   1              WriteCommand( CsrW );                           // 光标Locate,定位
 698   1              WriteData( (Uchar)(temp & 0xff) );      // 写入参数CSRL设置参数光标指针低8位
 699   1              WriteData( (Uchar)(temp /256 ) );       // 写入参数CSRH设置参数光标指针高8位
 700   1      }
 701          
 702          /*=============================================================================
 703            ASCII(8*16) 及 汉字(16*16) 混合字符串显示函数 
C51 COMPILER V8.08   1335C51                                                               04/26/2008 21:36:20 PAGE 13  

 704            输入参数约定:
 705                  x,y显示字符串的左上角xy坐标.x..8点一字节位置; y..一条扫描线定位
 706                                                                  
 707                  *ptr...字符串指针,本函数所指的是flash字串
 708                  att....显示区标志,0...第一区;1...第二区
 709            返回参数:输出字串长度,留意汉字一个算两个
 710            其它假定:调用时汉字必须在字库数组中已经存在,否则将输出不正确的结果
 711          ==============================================================================*/
 712          Uchar dprintf(Uchar x,Uchar y, char code *ptr, Uchar att)
 713          {
 714   1      
 715   1              Uchar  c1,c2;
 716   1              Uchar i,j,uLen,uRow,uCol,temp;
 717   1              Uint  k;
 718   1              uRow = x;
 719   1              uCol = y;
 720   1              uLen=0;
 721   1              WriteCommand( CsrDirD );                                                // 光标移动方向定义:自动下移
 722   1              Locatexy(uRow,uCol,att);                                                //起点定位
 723   1              while ( (Uchar)ptr[uLen] >= 0x10 ){uLen++;};    //探测字串长度
 724   1              i=0;
 725   1              while(i<uLen)
 726   1              {
 727   2                      c1 = ptr[i];
 728   2                      c2 = ptr[i+1];
 729   2      
 730   2      //ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
 731   2                      if(c1 <=128)                                                            // ASCII
 732   2                      {
 733   3                              if (c1 >= 0x10) {
 734   4                                      WriteCommand( mWrite );                         // 写数据(命令)
 735   4                                      for(j=0;j<16;j++) WriteData( ASC_MSK[(c1-0x20)*16 +j ]);
 736   4                              }
 737   3                              uRow++;                                                                 // 列数加1
 738   3                      }
 739   2                      else                                                                            // 中文
 740   2                      {
 741   3                              for(j=0;j<sizeof(Cdotlib)/sizeof(Cdotlib[0]);j++)       // 查找定位
 742   3                              {
 743   4                                      if((c1 == Cdotlib[j].Index[0]) && (c2 == Cdotlib[j].Index[1]))
 744   4                                              break;
 745   4                              }
 746   3                              for(k=0;k<2;k++)                                                // 分16行输出
 747   3                              {
 748   4                                      Locatexy(uRow+k,uCol,att);
 749   4                                      WriteCommand( mWrite );                         // 写数据(命令)
 750   4      
 751   4                                      for(temp=0;temp<16;temp++) WriteData( Cdotlib[j].Msk[temp*2 + k]);
 752   4                              }
 753   3                              uRow +=2;                                                               // 光标右移一大格
 754   3                              i++;
 755   3                      }
 756   2                      if(uRow >= 40)                                                          // 光标后移
 757   2                      {
 758   3                              uCol += 16;                                                             // Y坐标
 759   3                              uRow = 0;                                                       // X坐标
 760   3                              if( uCol >= 240 ) uCol = 0;
 761   3                      }
 762   2      
 763   2                      Locatexy(uRow,uCol,att);
 764   2                      i++;
 765   2              }
C51 COMPILER V8.08   1335C51                                                               04/26/2008 21:36:20 PAGE 14  

 766   1              return uLen;                                                                    //返回字串长度,汉字按2字节计算
 767   1      }
 768          
 769          
 770          /*================================================
 771             在定时器中断
 772           ================================================*/
 773          void timers0() interrupt 1 using 1 {
 774   1      
 775   1              TH0 = 0x80;
 776   1              TL0 = 0x00;
 777   1              if (timer1)timer1--;
 778   1              if (timer2)timer2--;
 779   1      }
 780          
 781          
 782          /*================================================
 783           使用定时中断的长延时程序
 784           ===============================================*/
 785          void DelayMs(Uint tt) {
 786   1              timer1=tt;
 787   1              while(timer1);
 788   1      }
 789          
 790          
 791          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3059    ----
   CONSTANT SIZE    =   3863    ----
   XDATA SIZE       =    256    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4      55
   IDATA SIZE       =     12    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  34 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -