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

📄 lcd12864.lst

📁 这个事在51上面实现lcd串行驱动
💻 LST
📖 第 1 页 / 共 2 页
字号:
 182   2                      {
 183   3                              pData = &nAsciiDot[(c1 - 0x20) * 16];
 184   3                              LCDSetPos(Page * 2, Col);
 185   3                              for (i = 0; i < 8; i++)
 186   3                              {
 187   4                                      temp = *pData++;
 188   4                                      temp = (Mod == 1) ? ~temp : temp;
 189   4                                      LCDSendData(temp);
 190   4                              }
 191   3                              LCDSetPos(Page * 2 + 1, Col);
 192   3                              for (i = 0; i< 8; i++)
 193   3                              {
 194   4                                      temp = *pData++;
 195   4                                      temp = (Mod == 1) ? ~temp : temp;
 196   4                                      LCDSendData(temp);
 197   4                              }
 198   3                              Col = Col + 8;
 199   3                      }
 200   2              }
 201   1      }
 202          
 203          uint8 LCDPrintf(uint8 Page, uint8 Col, uint8 Mod, uint8 *pFmt, ...)
 204          {
 205   1              uint8 c1,c2,i,temp;
 206   1              uint8 *pData;
 207   1              uint8 uLen;
 208   1              uint8 buf[64];
 209   1              uint8 *pFmtBuf ;
 210   1          va_list arg_ptr;
 211   1              pFmtBuf = buf;
 212   1      
 213   1          va_start(arg_ptr, pFmt);
 214   1          uLen = (uint8)vsprintf(pFmtBuf, pFmt, arg_ptr);
 215   1          va_end(arg_ptr);
 216   1              LCDSetPos(Page, Col);
 217   1              // 取出一个字符
 218   1              while(*pFmtBuf != '\0')
 219   1              {
 220   2                      c1 = *pFmtBuf++;
 221   2                      if(c1 < 0x80)   // 如果是ASCII码
 222   2                      {
 223   3                              if (c1 < 0x20)  // 如果是转意字符
 224   3                              {
 225   4                                      switch (c1)
 226   4                                      {
 227   5                                      case '\n': 
 228   5                                      {
 229   6                                              Page = Page + 1;
 230   6                                              Col = 0;
 231   6                                              break;
 232   6                                      }
 233   5                                      case '\t':
 234   5                                      case '\b':
 235   5                                      default: ;
 236   5                                      }
 237   4                              }
 238   3                              else                    // 如果是一般字符
 239   3                              {
 240   4                                      // 要显示的字在屏的边界
C51 COMPILER V8.02   LCD12864                                                              07/09/2008 11:10:59 PAGE 5   

 241   4                                      if (Col > 128 - 8)
 242   4                                      {
 243   5                                              Page = Page + 1;
 244   5                                              Col = 0;
 245   5                                      }
 246   4                                      pData = &nAsciiDot[(c1 - 0x20) * 16];
 247   4                                      LCDSetPos(Page * 2, Col);                               
 248   4                                      for (i = 0; i < 8; i++)
 249   4                                      {
 250   5                                              temp = *pData++;
 251   5                                              temp = (Mod == 1) ? ~temp : temp;
 252   5                                              LCDSendData(temp);
 253   5                                      }
 254   4                                      LCDSetPos(Page * 2 + 1, Col);
 255   4                                      for (i = 0; i< 8; i++)
 256   4                                      {
 257   5                                              temp = *pData++;
 258   5                                              temp = (Mod == 1) ? ~temp : temp;
 259   5                                              LCDSendData(temp);
 260   5                                      }
 261   4                                      Col = Col + 8;
 262   4                              }
 263   3                      }
 264   2                      // 如果是汉字
 265   2                      else
 266   2                      {
 267   3                              // 再取出一个字
 268   3                              c2 = *pFmtBuf++;
 269   3                              // 在字模表中找到字模的首地址
 270   3                              for(i = 0; i < sizeof(GB_16)/sizeof(GB_16[0]); i++)
 271   3                              {
 272   4                                      if (c1 == GB_16[i].Index[0] && c2 == GB_16[i].Index[1])
 273   4                                      {
 274   5                                              pData = &GB_16[i].Msk[0];
 275   5                                              break;
 276   5                                      }
 277   4                              }
 278   3                              // 要显示的字在屏的边界
 279   3                              if (Col > 128 - 16)
 280   3                              {
 281   4                                      Page = Page + 1;
 282   4                                      Col = 0;
 283   4                              }
 284   3                              // 在中线上,进行处理
 285   3                              if (Col == 64 - 8)
 286   3                              {
 287   4                                      LCDSetPos(Page * 2, 64 - 8);
 288   4                                      for(i = 0; i < 8; i++)
 289   4                                      {
 290   5                                              temp = *pData++;
 291   5                                              temp = (Mod == 1) ? ~temp : temp;
 292   5                                              LCDSendData(temp);
 293   5                                      }
 294   4                                      LCDSetPos(Page * 2, 64);
 295   4                                      for(i = 0; i < 8; i++)
 296   4                                      {
 297   5                                              temp = *pData++;
 298   5                                              temp = (Mod == 1) ? ~temp : temp;
 299   5                                              LCDSendData(temp);
 300   5                                      }
 301   4                                      LCDSetPos(Page * 2 + 1, 64 - 8);
 302   4                                      for(i = 0; i < 8; i++)
C51 COMPILER V8.02   LCD12864                                                              07/09/2008 11:10:59 PAGE 6   

 303   4                                      {
 304   5                                              temp = *pData++;
 305   5                                              temp = (Mod == 1) ? ~temp : temp;
 306   5                                              LCDSendData(temp);
 307   5                                      }
 308   4                                      LCDSetPos(Page * 2 + 1, 64);
 309   4                                      for(i = 0; i < 8; i++)
 310   4                                      {
 311   5                                              temp = *pData++;
 312   5                                              temp = (Mod == 1) ? ~temp : temp;
 313   5                                              LCDSendData(temp);
 314   5                                      }
 315   4                              }
 316   3                              // 不在中线上,直接显示
 317   3                              else
 318   3                              {
 319   4                                      LCDSetPos(Page * 2, Col);
 320   4                                      for(i = 0; i < 16; i++)
 321   4                                      {
 322   5                                              temp = *pData++;
 323   5                                              temp = (Mod == 1) ? ~temp : temp;
 324   5                                              LCDSendData(temp);
 325   5                                      }
 326   4                                      LCDSetPos(Page * 2 + 1, Col);
 327   4                                      for(i = 0; i < 16; i++)
 328   4                                      {
 329   5                                              temp = *pData++;
 330   5                                              temp = (Mod == 1) ? ~temp : temp;
 331   5                                              LCDSendData(temp);
 332   5                                      }
 333   4                              }                               
 334   3                              Col = Col + 16;
 335   3                      }
 336   2              }
 337   1              return uLen;
 338   1      }
 339          
 340          void LCDDispGraph(uint8 *pData)
 341          {
 342   1              uint8 i,j;
 343   1              for (j=0; j<8; j++)
 344   1              {
 345   2                      LCDSetPos(0,j);
 346   2                      for(i = 0; i<64; i++)
 347   2                      {
 348   3                              LCDSendData(*pData++);
 349   3                      }
 350   2                      LCDSetPos(64,j);
 351   2                      for(i = 0; i<64; i++)
 352   2                      {
 353   3                              LCDSendData(*pData++);
 354   3                      }
 355   2              }
 356   1      }
 357           


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1863    ----
   CONSTANT SIZE    =   2182    ----
   XDATA SIZE       =   ----     153
   PDATA SIZE       =   ----    ----
C51 COMPILER V8.02   LCD12864                                                              07/09/2008 11:10:59 PAGE 7   

   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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