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

📄 lcd12864.lst

📁 lcd12864的驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 224   3                 lck = 1;
 225   3                 right = 1;break;}//置右半屏标志
 226   2         case 0x40:{//左半屏 
 227   3                 
 228   3                 RW = 1;//R/W=1读
 229   3                 CSA = 0;
 230   3                 CSB = 1;
 231   3                 DI = 0;//命令操作
 232   3                 lck = 0;
 233   3                 P1 = 0xff;
 234   3                 lck = 1;//使能LCD
C51 COMPILER V7.06   LCD12864                                                              05/31/2007 14:34:54 PAGE 5   

 235   3                 while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
 236   3                 lck = 0;
 237   3                 P1 = 0xef;
 238   3                 lck = 1;
 239   3                 right = 0;break;}//置左半屏标志
 240   2           }
 241   1         x=col&0x3f|SETX;//把列数据变成行命令
 242   1         y=row&0x07|SETY;//把行数据变成行命令
 243   1      /**********************************/
 244   1         lck = 0;
 245   1         P1 = 0xff;
 246   1         lck = 1;//判断忙标志
 247   1         while(P0 & LCDBUZY);//最高位为1,表示忙,则循环 
 248   1         lck = 0;
 249   1         P1 = 0xef;
 250   1         lck = 1;
 251   1      /*********以上为判断忙标志********/
 252   1      /*********************************/
 253   1         RW = 0;//R/W=0写
 254   1      
 255   1         P0 = y;//行数据送到P0口
 256   1      
 257   1         lck = 0;
 258   1         P1 = 0xff;
 259   1         lck = 1;//使能LCD,把数据打入LCD
 260   1         delay(3);
 261   1         lck = 0;
 262   1         P1 = 0xef;
 263   1         lck = 1;
 264   1      /**********以上为送行命令***********/
 265   1         RW =1;//R/W=1读
 266   1         lck = 0;
 267   1         P1 = 0xff;
 268   1         lck = 1;//使能LCD,准备读忙标志
 269   1         while(P0 & LCDBUZY);//最高位为1,表示忙,则循环 
 270   1         lck = 0;
 271   1         P1 = 0xef;
 272   1         lck = 1;
 273   1      /*********以上为判断忙标志********/
 274   1         RW = 0;//R/W=0写
 275   1      
 276   1         P0 = x;//列数据送P0口
 277   1      
 278   1         lck = 0;
 279   1         P1 = 0xff;
 280   1         lck = 1;//使能LCD,把数据打入LCD
 281   1         delay(3);
 282   1         lck = 0;
 283   1         P1 = 0xef;
 284   1         lck = 1;
 285   1      /**********以上为送列命令***********/
 286   1         if(right)
 287   1          statu = 1;//置右半区标志
 288   1         else
 289   1          statu = 0;//置左半区标志
 290   1      }
 291          
 292          
 293          /**************数据写输出***************/
 294          void  Wrdata(uchar  x,uchar  row,uchar  col)
 295          {   
 296   1          Locatexy(row,col);//定位显示位置
C51 COMPILER V7.06   LCD12864                                                              05/31/2007 14:34:54 PAGE 6   

 297   1          RW = 0;//R/W=0
 298   1          DI = 1;//数据操作
 299   1         lck = 0;
 300   1         P1 = 0xef;
 301   1         lck = 1;;//不使能LCD
 302   1          if(statu){//根据状态确定是左半屏还是右半屏
 303   2           CSA= 1;
 304   2           CSB= 0;    
 305   2          }else{
 306   2           CSA=0;
 307   2           CSB=1;
 308   2          }
 309   1      
 310   1          P0 = x;//送显示数据
 311   1      
 312   1         lck = 0;
 313   1         P1 = 0xff;
 314   1         lck = 1; //使能LCD,把P0数据打入LCD
 315   1          delay(3);
 316   1         lck = 0;
 317   1         P1 = 0xef;
 318   1         lck = 1;
 319   1      }
 320          
 321          
 322          
 323          /****************图形输出******************/
 324          void Putpicture(uchar flag)
 325          {
 326   1         unsigned char i,j,row, col ;
 327   1         unsigned int x;
 328   1         row = 0; col=0;
 329   1          for(j=0;j<128;j++){
 330   2           x=j*0x08; 
 331   2           for(i=0;i<8;i++)
 332   2            {  if(flag)
 333   3                 cbyte=picture1[x++];
 334   3               else 
 335   3                 cbyte=picture2[x++];
 336   3                Wrdata(cbyte,row,col);
 337   3              row++;
 338   3            }   
 339   2           row=0;
 340   2           col++;    
 341   2          }  
 342   1            
 343   1      }
 344          
 345          /***************半角数据点阵输出*******************/
 346          void Puthalf(uchar *strch,uchar row,uchar col)
 347          {
 348   1          uchar i,bakerx;
 349   1          bakerx = row;
 350   1          for(i=0;i<16;i++)//上半字输出
 351   1           {
 352   2              cbyte=strch[i];
 353   2              Wrdata(cbyte,bakerx,col);
 354   2        
 355   2              cbyte=strch[i+1];
 356   2              Wrdata(cbyte,bakerx+1,col);
 357   2              col++;
 358   2              i++;
C51 COMPILER V7.06   LCD12864                                                              05/31/2007 14:34:54 PAGE 7   

 359   2             }
 360   1      }
 361          
 362          
 363          /************汉字输出******************/
 364          /*void Puthz(uchar *str,uchar row,uchar col)
 365          {
 366              uchar  i,bakerx;
 367              bakerx=row;
 368              for(i=0;i<32;i++)
 369                {
 370                  cbyte=str[i];
 371                  Wrdata(cbyte,row,col);       //上半字节输出
 372                  i++;
 373                  row=bakerx+1;
 374                  cbyte=str[i];
 375                  Wrdata(cbyte,row,col);       //下半字节输出
 376          
 377                  row=bakerx;
 378                  col=col+1;
 379                }
 380          }
 381          
 382          */
 383          /***********************字符型点阵行--》列转换********************/
 384          void VtoH8x16change(uchar   *hzbuf)
 385          {   uchar  i,j,k,  cash[16];
 386   1          uchar   newbyte, savebit[8];
 387   1          for(k=0;k<16;k++){
 388   2            newbyte = 0;
 389   2            for(i=0;i<8;i++){
 390   3              savebit[i]=hzbuf[i] & 0x80;
 391   3             }
 392   2            for(j=0;j<8;j++){
 393   3              savebit[j] = savebit[j] >> (7-j);
 394   3              newbyte = newbyte | savebit[j];
 395   3             }
 396   2            cash[k] = newbyte;
 397   2            newbyte = 0;
 398   2            for(i=8;i<16;i++){
 399   3              savebit[i-8]=hzbuf[i] & 0x80;
 400   3             }
 401   2            for(j=0;j<8;j++){
 402   3              savebit[j] = savebit[j] >> (7-j);
 403   3              newbyte = newbyte |savebit[j];
 404   3             }
 405   2            cash[k+1] = newbyte;
 406   2            for(j=0;j<16;j++){
 407   3              hzbuf[j] = hzbuf[j] <<1; 
 408   3             }
 409   2            k++;
 410   2           }
 411   1          for(i=0;i<16;i++)
 412   1            hzbuf[i] = cash[i];
 413   1       }
 414          
 415          
 416          /************************显示英文和符号字符********************/
 417          void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag)
 418          {
 419   1              uchar    ucXArray[16],i;
 420   1      
C51 COMPILER V7.06   LCD12864                                                              05/31/2007 14:34:54 PAGE 8   

 421   1          if(flag){     // 反白显示英文
 422   2                      for(i = 0; i < 16; i++)
 423   2                              ucXArray[i] = ~ch[i];
 424   2              }else{
 425   2              for(i = 0; i < 16; i++)
 426   2                  ucXArray[i] = ch[i];
 427   2          }
 428   1          VtoH8x16change(ucXArray);
 429   1              Puthalf(ucXArray,row,col);
 430   1      }
 431          
 432          /*************************显示英文字符串**********************/
 433          void  vWrite8x16String(uchar  *str,uchar row, uchar col, bit flag)
 434          {
 435   1              unsigned char  i,  j,thiscol;
 436   1              j = strlen(str);
 437   1              for(i = 0; i < j; i++)
 438   1              {   thiscol = (i % 16) * 8 + col;//计算列地址
 439   2                      if(str[i] < 0xa1)//当前显示内容为英文字符
 440   2                vWrite8x16Character(&char_Table[str[i]-0x20][0],row,thiscol,flag);           
 441   2              }
 442   1      }
 443          
 444          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1210    ----
   CONSTANT SIZE    =     60    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2      75
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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