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

📄 ra8835.lst

📁 C8051F020+RA8835 I/O口控制 中英文混合显示
💻 LST
📖 第 1 页 / 共 3 页
字号:
 207   1              test_read=ReadData();
 208   1      } 
 209          
 210          /*============================================================================ 
 211          ** 函数名称: Locatexy
 212          ** 功能描述: LCD的光标定位
 213          ** 输入参数: Uchar x    水平方向字节单位坐标,即可以以半个汉字宽度设定水平坐标
 214                                                           Uchar y        垂直方向以行线定位的坐标,可以定位到点单位
 215                                                           注:屏左上角为(0,0)
 216          **
 217          ** 输出参数: 无
 218          **
 219          ** 全局变量: 无
 220          ** 调用模块:  
 221          **---------------------------------------------------------------------------
 222          ** 作  者:      wjf
 223          ** 日  期:      2008/08/01
 224           ============================================================================*/ 
 225          void Locatexy(Uchar x,Uchar y, Uchar attribs) { 
 226   1              Uint temp; 
 227   1              temp = (Uint)y*paraP9+x; 
 228   1              if(attribs) temp += BasePart2*256;    // 如果需要就指向第二区,加上第二区首地址 
 229   1              WriteCommand( CsrW );                // 光标Locate,定位 
 230   1              WriteData( (Uchar)(temp &0xff) );    // 写入参数CSRL设置参数光标指针低8位 
 231   1              WriteData( (Uchar)(temp /256 ) );    // 写入参数CSRH设置参数光标指针高8位 
 232   1      } 
 233          
 234          
 235          
 236          /*============================================================================ 
 237          ** 函数名称: dprintf
 238          ** 功能描述: ASCII(8*16) 及 汉字(16*16) 混合字符串显示
 239          ** 输入参数: Uchar x  显示字符串的横坐标  8点一字节位置
 240                       Uchar y  显示字符串的纵坐标  一条扫描线定位 
 241          **
C51 COMPILER V7.20   RA8835                                                                08/19/2008 11:47:52 PAGE 5   

 242          ** 输出参数: Uchar 字符串的长度(汉字为两个字节)
 243          **
 244          ** 全局变量: 无
 245          ** 调用模块:  
 246          
 247             说明:调用时汉字必须在字库数组中已经存在,否则将输出不正确的结果
 248          **---------------------------------------------------------------------------
 249          ** 作  者:      wjf
 250          ** 日  期:      2008/08/01
 251           ============================================================================*/ 
 252           
 253          Uchar dprintf(Uchar x,Uchar y, Uchar  *ptr, Uchar att) 
 254          { 
 255   1      
 256   1              Uchar  c1,c2; 
 257   1              Uchar i,j,uLen,uRow,uCol,temp; 
 258   1              Uint  k; 
 259   1              uRow = x; 
 260   1              uCol = y; 
 261   1              uLen=0; 
 262   1              WriteCommand( CsrDirD );                                                                                        // 光标移动方向定义:自动下移 
 263   1              Locatexy(uRow,uCol,att);                                                                                        //起点定位 
 264   1              while ( (Uchar)ptr[uLen] >= 0x10 ){uLen++;};                                                                    //探测字串长度 
 265   1              i=0; 
 266   1              while(i<uLen) 
 267   1              { 
 268   2                      c1 = ptr[i]; 
 269   2                      c2 = ptr[i+1]; 
 270   2      
 271   2      //ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码 
 272   2                      if(c1 <=128)                                                                                                    // ASCII 
 273   2                      { 
 274   3                              if (c1 >= 0x10)    { 
 275   4                                      WriteCommand( mWrite );                                                                                         // 写数据(命令) 
 276   4                                      for(j=0;j<16;j++) WriteData( ASC_MSK[(c1-0x20)*16 +j ]); 
 277   4                              } 
 278   3                              uRow++;                                                                                                         // 列数加1 
 279   3                      } 
 280   2                      else                                                                                                            // 中文 
 281   2                      { 
 282   3                              for(j=0;j<sizeof(Cdotlib)/sizeof(Cdotlib[0]);j++)                               // 查找定位 
 283   3                              { 
 284   4                                      if((c1 == Cdotlib[j].Index[0]) && (c2 == Cdotlib[j].Index[1])) 
 285   4                                              break; 
 286   4                              } 
 287   3                              for(k=0;k<2;k++)                                                                                                         // 分16行输出 
 288   3                              { 
 289   4                                      Locatexy(uRow+k,uCol,att); 
 290   4                                      WriteCommand( mWrite );                                                                                         // 写数据(命令) 
 291   4      
 292   4                                      for(temp=0;temp<16;temp++) WriteData( Cdotlib[j].Msk[temp*2 + k]); 
 293   4                              } 
 294   3                              uRow +=2;                                                                                                       // 光标右移一大格 
 295   3                              i++; 
 296   3                      } 
 297   2                      if(uRow >= 40)                                                                  // 光标后移 
 298   2                      { 
 299   3                              uCol += 16;                                                                             // Y坐标 
 300   3                              uRow = 0;                                                                                       // X坐标 
 301   3                              if( uCol >= 240 ) uCol = 0; 
 302   3                      } 
 303   2      
C51 COMPILER V7.20   RA8835                                                                08/19/2008 11:47:52 PAGE 6   

 304   2                      Locatexy(uRow,uCol,att); 
 305   2                      i++; 
 306   2              } 
 307   1              return uLen;                                            //返回字串长度,汉字按2字节计算 
 308   1      } 
 309          
 310          
 311          /*============================================================================ 
 312          ** 函数名称: hprintf
 313          ** 功能描述:汉字(24*16) 混合字符串显示
 314          ** 输入参数: Uchar x  显示字符串的横坐标  8点一字节位置
 315                       Uchar y  显示字符串的纵坐标  一条扫描线定位 
 316          **
 317          ** 输出参数: Uchar 字符串的长度(汉字为两个字节)
 318          **
 319          ** 全局变量: 无
 320          ** 调用模块:  
 321          
 322             说明:调用时汉字必须在字库数组中已经存在,否则将输出不正确的结果
 323          **---------------------------------------------------------------------------
 324          ** 作  者:      wjf
 325          ** 日  期:      2008/08/08
 326           ============================================================================*/ 
 327           
 328          Uchar hprintf(Uchar x,Uchar y, Uchar  *ptr, Uchar att) 
 329          { 
 330   1      
 331   1              
 332   1              Uchar  c1,c2; 
 333   1              Uchar i,j,uLen,uRow,uCol,temp; 
 334   1              Uint  k; 
 335   1              uRow = x; 
 336   1              uCol = y; 
 337   1              uLen=0; 
 338   1              WriteCommand( CsrDirD );                                                                                        // 光标移动方向定义:自动下移 
 339   1              Locatexy(uRow,uCol,att);                                                                                        //起点定位 
 340   1              while ( (Uchar)ptr[uLen] >= 0x10 ){uLen++;};                                                                    //探测字串长度 
 341   1              i=0; 
 342   1              while(i<uLen) 
 343   1              { 
 344   2                      c1 = ptr[i]; 
 345   2                      c2 = ptr[i+1]; 
 346   2      
 347   2      //ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码 
 348   2                      if(c1 <=128)                                                                                                    // ASCII 
 349   2                      { 
 350   3                              if (c1 >= 0x10)    { 
 351   4                                      WriteCommand( mWrite );                                                                                         // 写数据(命令) 
 352   4                                      for(j=0;j<16;j++) WriteData( ASC_MSK[(c1-0x20)*16 +j ]); 
 353   4                              } 
 354   3                              uRow++;                                                                                                         // 列数加1 
 355   3                      } 
 356   2                      else                                                                                                            // 中文 
 357   2                      { 
 358   3                              for(j=0;j<sizeof(Cdotlib24)/sizeof(Cdotlib24[0]);j++)                                   // 查找定位 
 359   3                              { 
 360   4                                      if((c1 == Cdotlib24[j].Index[0]) && (c2 == Cdotlib24[j].Index[1])) 
 361   4                                              break; 
 362   4                              } 
 363   3                              for(k=0;k<3;k++)                                                                                                         // 分16行输出 
 364   3                              { 
 365   4                                      Locatexy(uRow+k,uCol,att); 
C51 COMPILER V7.20   RA8835                                                                08/19/2008 11:47:52 PAGE 7   

 366   4                                      WriteCommand( mWrite );                                                                                         // 写数据(命令) 
 367   4      
 368   4                                      for(temp=0;temp<16;temp++) WriteData( Cdotlib24[j].Msk[temp*3 + k]); 
 369   4                              } 
 370   3                              uRow +=3;                                                                                                       // 光标右移一大格 
 371   3                              i++; 
 372   3                      } 
 373   2                      if(uRow >= 40)                                                                  // 光标后移 
 374   2                      { 
 375   3                              uCol += 16;                                                                             // Y坐标 
 376   3                              uRow = 0;                                                                                       // X坐标 
 377   3                              if( uCol >= 240 ) uCol = 0; 
 378   3                      } 
 379   2      
 380   2                      Locatexy(uRow,uCol,att); 
 381   2                      i++; 
 382   2              } 
 383   1              return uLen;                                            //返回字串长度,汉字按2字节计算 
 384   1      } 
 385          
 386          
 387          /*============================================================================ 
 388          ** 函数名称: printfUpDown
 389          ** 功能描述:显示 (8*16)的上下箭头
 390          ** 输入参数: Uchar x  显示横坐标  8点一字节位置
 391                       Uchar y  显示纵坐标  一条扫描线定位 
 392                       Uchar flag                 0——上箭头                     1——下箭头
 393          **
 394          ** 输出参数: 无
 395          **
 396          ** 全局变量: 无
 397          ** 调用模块:  
 398          **---------------------------------------------------------------------------
 399          ** 作  者:      wjf
 400          ** 日  期:      2008/08/09
 401           ============================================================================*/ 
 402           
 403          void printfUpDown(Uchar x,Uchar y, Uchar flag, Uchar att) 
 404          { 
 405   1              
 406   1              Uchar i;
 407   1              WriteCommand( CsrDirD );                                                                                        
 408   1              Locatexy(x,y,att);                                                                                      
 409   1              WriteCommand( mWrite );                                                                                          
 410   1              for(i=0;i<16;i++) WriteData( up_down[flag*16 +i ]); 
 411   1                      
 412   1      } 
 413          
 414          /*============================================================================ 
 415          ** 函数名称: printfLeftRight
 416          ** 功能描述:显示 (16*16)的上下箭头
 417          ** 输入参数: Uchar x  显示横坐标  8点一字节位置
 418                       Uchar y  显示纵坐标  一条扫描线定位 
 419                       Uchar flag                 0——左箭头                     1——右箭头   2——℃  3----λ   4-------光标
 420          **
 421          ** 输出参数: 无

⌨️ 快捷键说明

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