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

📄 lcdcon.lst

📁 proteus与keil仿真89c55控制18b20 ds1302 字符液晶
💻 LST
📖 第 1 页 / 共 3 页
字号:
 312          uchar dprintf(uchar x,uchar y,char *string,uchar mod)//ASCII(8*16)与汉字(16*16)显示
 313          {
 314   1              char c1,c2,cData;
 315   1              uint i=0,j,len;
 316   1              uchar k;
 317   1      
 318   1              len=strlen(string);
 319   1      
 320   1              while(i<len)
 321   1              {
 322   2                      c1 = string[i];
 323   2                      c2 = string[i+1];
 324   2      
 325   2                      SetPos(y,x/8);
 326   2                      if(c1 >= 0)
 327   2                      {
 328   3                              // ASCII
 329   3                          if(c1 < 0x20)
C51 COMPILER V8.01   LCDCON                                                                10/03/2008 08:28:26 PAGE 7   

 330   3                          {
 331   4                              switch(c1)
 332   4                              {
 333   5                                  case CR:
 334   5                                  case LF: // 回车或换行
 335   5                                      i++;
 336   5                                                      x=0;
 337   5                                      if(y < 112)y+=HZ_CHR_HEIGHT;
 338   5                                      continue;
 339   5                                  case BS: // 退格
 340   5                                                      i++;
 341   5                                      if(y>ASC_CHR_WIDTH)y-=ASC_CHR_WIDTH;
 342   5                                      cData = 0x00;
 343   5                                      break;
 344   5                              }
 345   4                              }
 346   3                              for(j=0;j<ASC_CHR_HEIGHT;j++)
 347   3                          {
 348   4                              
 349   4                              if(c1 >= 0x1f)
 350   4                              {
 351   5                                              cData= ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+j];
 352   5                                              if(mod == 0)
 353   5                                                      cData = ~cData;
 354   5                                              SetPos(y+j,x/8);
 355   5                                              if((x%8)==0)
 356   5                                              {
 357   6                                                      WriteCom(LC_AUT_WR); // 写数据
 358   6                                              WriteData(cData);       
 359   6                                              WriteCom(LC_AUT_OVR);
 360   6                                              }
 361   5                              }
 362   4                              SetPos(y+j,x/8);
 363   4                          }
 364   3                          if(c1 != BS) // 非退格
 365   3                          x+=ASC_CHR_WIDTH;
 366   3                      }
 367   2                      else
 368   2                      { // 中文
 369   3                              
 370   3                          for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
 371   3                          {
 372   4                              if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
 373   4                              break;
 374   4                          }
 375   3                          for(k=0;k<HZ_CHR_HEIGHT;k++)
 376   3                          {
 377   4                                      
 378   4                              SetPos(y+k,x/8);
 379   4                              if(j < sizeof(GB_16)/sizeof(GB_16[0]))
 380   4                              {
 381   5                                              c1=GB_16[j].Msk[k*2];
 382   5                                              c2=GB_16[j].Msk[k*2+1];
 383   5                                      }
 384   4                                      else       
 385   4                                              c1=c2=0;
 386   4                                      if(mod == 0)
 387   4                                      {
 388   5                                              c1 = ~c1;
 389   5                                              c2 = ~c2;
 390   5                                      }
 391   4                                      WriteCom(LC_AUT_WR);
C51 COMPILER V8.01   LCDCON                                                                10/03/2008 08:28:26 PAGE 8   

 392   4                                      WriteData(c1);
 393   4                                  WriteCom(LC_AUT_OVR);
 394   4                                      
 395   4                                      WriteCom(LC_AUT_WR);
 396   4                                      WriteData(c2);
 397   4                                      WriteCom(LC_AUT_OVR);
 398   4                          }
 399   3                          x+=HZ_CHR_WIDTH;
 400   3                          i++;
 401   3                      }  
 402   2                      i++;
 403   2              }
 404   1              return len;
 405   1      }
 406          /*
 407          void SetShowMode(uchar ShowMod)//设置显示模式
 408          {
 409                  ShowModeSW=ShowMod;
 410                  WriteCom(LC_DIS_SW |ShowMod);
 411          }
 412          
 413          void Pixel(uchar PointX,uchar PointY,bit mod)//画点函数
 414          {
 415                  unsigned char StartAddr;
 416              unsigned char dat;
 417              StartAddr=7-(PointX%8);
 418              dat=LC_BIT_OP|StartAddr; //生产位操作命令画点的数据
 419              if(mod)
 420                          dat=dat|0x08;
 421                  SetPos(PointY,PointX/8);
 422                  WriteCom(LC_BIT_OP|dat); // 写数据
 423          }
 424          
 425          void Line(uchar x1,uchar y1,uchar x2,uchar y2,bit mod)//画线函数
 426          {
 427                  unsigned char x,y;
 428              float k,b;
 429          
 430              if( abs(y1-y2) <= abs(x1-x2) ) // |k|<=1
 431              {
 432                  k=((float)y2-y1) / ((float)x2-x1) ;
 433                  b=y1-k*x1;
 434                  if( x1 <= x2 )
 435                  {
 436                      for(x=x1;x<=x2;x++)
 437                      {
 438                          y=(uchar)(k*x+b);
 439                          Pixel(x, y, mod);
 440                      }
 441                  }
 442                  else
 443                  {
 444                      for(x=x2;x<=x1;x++)
 445                      {
 446                          y=(uchar)(k*x+b);
 447                          Pixel(x, y, mod);
 448                      }
 449                  }
 450              }
 451              else // abs(y1-y2) > abs(x1-x2) |K|>1
 452              {
 453                  k=((float)x2-x1) / ((float)y2-y1) ;
C51 COMPILER V8.01   LCDCON                                                                10/03/2008 08:28:26 PAGE 9   

 454                  b=x1-k*y1;
 455                  if( y1 <= y2 )
 456                  {
 457                      for(y=y1;y<=y2;y++)
 458                      {
 459                          x=(uchar)(k*y+b);
 460                          Pixel( x , y, mod);
 461                      }
 462                  }
 463                  else
 464                  {
 465                      for(y=y2;y<=y1;y++)
 466                      {
 467                          x=(uchar)(k*y+b);
 468                          Pixel( x , y, mod);
 469                      }
 470                  }
 471              }
 472          }
 473          */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    857    ----
   CONSTANT SIZE    =   2744    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9      16
   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 + -