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

📄 main_lcd.lst

📁 这个也是51单片机的应用程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   MAIN_LCD                                                              05/09/2007 10:46:29 PAGE 5   

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

 297   1         RW = 0;//R/W=0写
 298   1      
 299   1         P0 = y;//行数据送到P0口
 300   1      
 301   1         lck = 0;
 302   1         P1 = 0xff;
 303   1         lck = 1;//使能LCD,把数据打入LCD
 304   1         delay(3);
 305   1         lck = 0;
 306   1         P1 = 0xef;
 307   1         lck = 1;
 308   1      /**********以上为送行命令***********/
 309   1         RW =1;//R/W=1读
 310   1         lck = 0;
 311   1         P1 = 0xff;
 312   1         lck = 1;//使能LCD,准备读忙标志
 313   1         while(P0 & LCDBUZY);//最高位为1,表示忙,则循环 
 314   1         lck = 0;
 315   1         P1 = 0xef;
 316   1         lck = 1;
 317   1      /*********以上为判断忙标志********/
 318   1         RW = 0;//R/W=0写
 319   1      
 320   1         P0 = x;//列数据送P0口
 321   1      
 322   1         lck = 0;
 323   1         P1 = 0xff;
 324   1         lck = 1;//使能LCD,把数据打入LCD
 325   1         delay(3);
 326   1         lck = 0;
 327   1         P1 = 0xef;
 328   1         lck = 1;
 329   1      /**********以上为送列命令***********/
 330   1         if(right)
 331   1          statu = 1;//置右半区标志
 332   1         else
 333   1          statu = 0;//置左半区标志
 334   1      }
 335          
 336          
 337          /**************数据写输出***************/
 338          void  Wrdata(uchar  x,uchar  row,uchar  col)
 339          {   
 340   1          Locatexy(row,col);//定位显示位置
 341   1          RW = 0;//R/W=0
 342   1          DI = 1;//数据操作
 343   1         lck = 0;
 344   1         P1 = 0xef;
 345   1         lck = 1;;//不使能LCD
 346   1          if(statu){//根据状态确定是左半屏还是右半屏
 347   2           CSA= 1;
 348   2           CSB= 0;    
 349   2          }else{
 350   2           CSA=0;
 351   2           CSB=1;
 352   2          }
 353   1      
 354   1          P0 = x;//送显示数据
 355   1      
 356   1         lck = 0;
 357   1         P1 = 0xff;
 358   1         lck = 1; //使能LCD,把P0数据打入LCD
C51 COMPILER V7.06   MAIN_LCD                                                              05/09/2007 10:46:29 PAGE 7   

 359   1          delay(3);
 360   1         lck = 0;
 361   1         P1 = 0xef;
 362   1         lck = 1;
 363   1      }
 364          
 365          
 366          
 367          
 368          /******************************************图形输出*********************************/
 369          void Putpicture(void)
 370          {
 371   1         unsigned char i,j,row, col ;
 372   1         unsigned int x;
 373   1         row = 0; col=0;
 374   1          for(j=0;j<128;j++){
 375   2           x=j*0x08; 
 376   2           for(i=0;i<8;i++)
 377   2            { 
 378   3                cbyte=picture[x++];
 379   3                Wrdata(cbyte,row,col);
 380   3              row++;
 381   3            }   
 382   2           row=0;
 383   2           col++;    
 384   2          }  
 385   1            
 386   1      }
 387          
 388          /****************************************半角数据点阵输出******************************/
 389          void Puthalf(uchar *strch,uchar row,uchar col)
 390          {
 391   1          uchar i,bakerx;
 392   1          bakerx = row;
 393   1          for(i=0;i<16;i++)//上半字输出
 394   1           {
 395   2              cbyte=strch[i];
 396   2              Wrdata(cbyte,bakerx,col);
 397   2        
 398   2              cbyte=strch[i+1];
 399   2              Wrdata(cbyte,bakerx+1,col);
 400   2              col++;
 401   2              i++;
 402   2             }
 403   1      }
 404          
 405          
 406          /***************************************字符型点阵行--》列转换************************/
 407          void VtoH8x16change(uchar   *hzbuf)
 408          {   uchar  i,j,k,  cash[16];
 409   1          uchar   newbyte, savebit[8];
 410   1          for(k=0;k<16;k++){
 411   2            newbyte = 0;
 412   2            for(i=0;i<8;i++){
 413   3              savebit[i]=hzbuf[i] & 0x80;
 414   3             }
 415   2            for(j=0;j<8;j++){
 416   3              savebit[j] = savebit[j] >> (7-j);
 417   3              newbyte = newbyte | savebit[j];
 418   3             }
 419   2            cash[k] = newbyte;
 420   2            newbyte = 0;
C51 COMPILER V7.06   MAIN_LCD                                                              05/09/2007 10:46:29 PAGE 8   

 421   2            for(i=8;i<16;i++){
 422   3              savebit[i-8]=hzbuf[i] & 0x80;
 423   3             }
 424   2            for(j=0;j<8;j++){
 425   3              savebit[j] = savebit[j] >> (7-j);
 426   3              newbyte = newbyte |savebit[j];
 427   3             }
 428   2            cash[k+1] = newbyte;
 429   2            for(j=0;j<16;j++){
 430   3              hzbuf[j] = hzbuf[j] <<1; 
 431   3             }
 432   2            k++;
 433   2           }
 434   1          for(i=0;i<16;i++)
 435   1            hzbuf[i] = cash[i];
 436   1       }
 437          
 438          
 439          /*************************************显示英文和符号字符*******************************/
 440          void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag)
 441          {
 442   1              uchar    ucXArray[16],i;
 443   1      
 444   1          if(flag){     // 反白显示英文
 445   2                      for(i = 0; i < 16; i++)
 446   2                              ucXArray[i] = ~ch[i];
 447   2              }else{
 448   2              for(i = 0; i < 16; i++)
 449   2                  ucXArray[i] = ch[i];
 450   2          }
 451   1          VtoH8x16change(ucXArray);
 452   1              Puthalf(ucXArray,row,col);
 453   1      }
 454          
 455          /******************************************显示中英文字符串************************************/
 456          void  vWrite8x16String(uchar  *str,uchar row, uchar col, bit flag)
 457          {
 458   1              unsigned char  i,  j,thiscol;
 459   1              j = strlen(str);
 460   1              for(i = 0; i < j; i++)
 461   1              {   thiscol = (i % 16) * 8 + col;//计算列地址
 462   2                      if(str[i] < 0xa1)//当前显示内容为英文字符
 463   2                vWrite8x16Character(&char_Table[str[i]-0x20][0],row,thiscol,flag);           
 464   2              }
 465   1      }
 466          
 467          /**************************************结束*************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1569    ----
   CONSTANT SIZE    =     57    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     24      77
   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 + -