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

📄 12232drivers.lst

📁 液晶显示屏12232的驱动程序.内包含了EEPROM及AD7705的驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 274   1              send_si(disp_on);  
 275   1      }
 276          
 277          //清屏
 278          void lcd_clr(void)
 279          {
 280   1          uchar i, page;
 281   1              for (page=0;page<4;page++)
 282   1          {
 283   2              send_mi(page_addr_set|page);  //0xb8  10111000
 284   2                      send_si(page_addr_set|page);
 285   2              send_mi(0);                     //主窗口设置为0列
 286   2                      send_si(0);                     //从窗口设置为0列               
 287   2              for (i=0;i<62;i++)
 288   2              {
 289   3                      send_md(0x00);
 290   3                              send_sd(0x00);
 291   3                      }
 292   2          }
 293   1      }  
 294          
 295          void lcd_clr1(uchar page,uchar i,uchar withe,uchar mode)
 296          {
 297   1          //uchar  page;
 298   1              //for (page=0;page<4;page++)
 299   1          //{
 300   1                  uchar k;
 301   1              send_mi(page_addr_set|page);   //0xb8  10111000
 302   1                      send_si(page_addr_set|page); 
 303   1              send_mi(i);
C51 COMPILER V7.50   12232DRIVERS                                                          05/28/2007 15:49:30 PAGE 6   

 304   1              send_si(i);             
 305   1              //for (i=0;i<62;i++)
 306   1                      for(k=i;k<(i+withe);k++)
 307   1              {
 308   2                      //send_md(0x00);
 309   2                              //send_sd(0x00);
 310   2                              if(mode)
 311   2                              {
 312   3                                 send_md(0);                  //左屏
 313   3      //                         send_sd(0);                  
 314   3                              }
 315   2                              else   send_sd(0);         //右屏
 316   2                      }
 317   1          //}
 318   1      }   
 319          void lcd_clr2()
 320          {
 321   1              lcd_clr1(0,6,54,1);
 322   1              lcd_clr1(1,6,54,1);
 323   1              lcd_clr1(2,6,54,1);
 324   1              lcd_clr1(3,6,54,1);
 325   1              lcd_clr1(0,6,54,0);
 326   1              lcd_clr1(1,6,54,0);
 327   1              lcd_clr1(2,6,54,0);
 328   1              lcd_clr1(3,6,54,0);
 329   1      }     
 330          
 331          //同时设置主(右)从(左)显示页为0~3页
 332          void set_page(uchar page)
 333          {
 334   1          send_mi(page_addr_set|page);
 335   1          send_si(page_addr_set|page);
 336   1      }
 337          
 338          //同时设置主(右)从(左)列地址为0~61列
 339          void set_address(uchar address)
 340          {
 341   1          send_mi(address&0x7F);               //&0x7F,考虑到防止越限
 342   1          send_si(address&0x7F);
 343   1      }
 344          
 345          //在右页(从窗口)当前地址画一个字节(8点)
 346          
 347          void putchar_l(uchar c)
 348          {
 349   1          send_md(c);
 350   1      }
 351          
 352          //在左页(主窗口)当前地址画一个字节(8点)
 353          
 354          void putchar_r(uchar c)
 355          {
 356   1          send_sd(c);
 357   1      }    
 358          
 359          //画一个图,横坐标是col,layer表示上下层,width是图形的宽,高固定16
 360          //          bmp是图形指针
 361          //          使用zimo21软件,采用纵向取模下高位得到bmp数据。
 362          //  col     图型的起始位置0~121
 363          // layer    图形的位置(Y坐标)0-下半部分 非0-上半部分
 364          // width    图形宽度8,16可选
 365          //  bmp     图形数据指针
C51 COMPILER V7.50   12232DRIVERS                                                          05/28/2007 15:49:30 PAGE 7   

 366          
 367          void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
 368          {
 369   1          uchar x;        
 370   1              uchar address;                  //address表示显存的物理地址
 371   1              uchar p=0;         
 372   1          uchar page=0;
 373   1              uchar window=0;                             //page表示上下两页,window表示左右窗口(0
 374   1      //左,1右)
 375   1          if (layer) page=2;              //左-主窗口,右-从窗口
 376   1          
 377   1          for (x=col; x<col+width; x++)
 378   1          {   
 379   2                  if (x>121)return;           //防止显示乱码
 380   2              if (x>60)                                       //左右窗口定位
 381   2                      {
 382   3                              window=1;               //右-从窗口
 383   3                              address=x%61;
 384   3                      }
 385   2              else
 386   2                          address=x;              //主窗口输出  
 387   2      
 388   2              set_page(page);             //上层数据输出
 389   2              set_address(address);
 390   2              
 391   2              if (window)                             
 392   2                putchar_r(bmp[p]);        
 393   2              else 
 394   2                putchar_l(bmp[p]);        
 395   2      
 396   2              set_page(page+1);           //下层数据输出
 397   2              set_address(address);       //列保持不变 
 398   2              
 399   2              if (window)                             
 400   2                 putchar_r(bmp[p+width]);     
 401   2                      else 
 402   2                 putchar_l(bmp[p+width]);       
 403   2      
 404   2              p++;
 405   2          }
 406   1      } 
 407          void draw_bmp1(uchar col,uchar width,uchar *bmp)
 408          {
 409   1          uchar x;        
 410   1              uchar address;                  //address表示显存的物理地址
 411   1              uchar p=0;         
 412   1          uchar page=0;
 413   1              uchar window=0;                             //page表示上下两页,window表示左右窗口(0
 414   1      //左,1右)
 415   1      //    if (layer) page=2;              //左-主窗口,右-从窗口
 416   1          
 417   1          for (x=col; x<col+width; x++)
 418   1          {   
 419   2                  if (x>121)return;           //防止显示乱码
 420   2              if (x>60)                                       //左右窗口定位
 421   2                      {
 422   3                              window=1;               //右-从窗口
 423   3                              address=x%61;
 424   3                      }
 425   2              else
 426   2                          address=x;              //主窗口输出  
 427   2      
C51 COMPILER V7.50   12232DRIVERS                                                          05/28/2007 15:49:30 PAGE 8   

 428   2              set_page(page);             //上层数据输出
 429   2              set_address(address);
 430   2              
 431   2              if (window)                             
 432   2                putchar_r(bmp[p]);        
 433   2              else 
 434   2                putchar_l(bmp[p]);        
 435   2      
 436   2              set_page(page+1);           //下层数据输出
 437   2              set_address(address);       //列保持不变 
 438   2              
 439   2              if (window)                             
 440   2                 putchar_r(bmp[p+width]);     
 441   2                      else 
 442   2                 putchar_l(bmp[p+width]);  
 443   2      
 444   2                  //page=2;
 445   2                      set_page(page+2);             //上层数据输出
 446   2              set_address(address);
 447   2              
 448   2              if (window)                             
 449   2                putchar_r(bmp[p+2*width]);        
 450   2              else 
 451   2                putchar_l(bmp[p+2*width]);        
 452   2      
 453   2              set_page(page+3);           //下层数据输出
 454   2              set_address(address);       //列保持不变 
 455   2              
 456   2              if (window)                             
 457   2                 putchar_r(bmp[p+3*width]);     
 458   2                      else 
 459   2                 putchar_l(bmp[p+3*width]);
 460   2                               
 461   2              p++;
 462   2          }
 463   1      
 464   1      
 465   1      }
 466          
 467          //显示单个ASCII码col-列;layer-上下行:1-上,0-下;ascii_code:所要显示德ASCCII码
 468          
 469          void disp_one_ascii(uchar col,uchar layer,uchar ascii_code,uchar mode)
 470          {
 471   1              uchar i;
 472   1              for(i=0;i<16;i++)                //ASCII码显示占用16个字节
 473   1              {   
 474   2                      if(mode)dot_buffer[i]=~ascii[(ascii_code-0x20)*16 + i];
 475   2                  else    dot_buffer[i]= ascii[(ascii_code-0x20)*16 + i]; 
 476   2              }  
 477   1              draw_bmp(col,layer,8,dot_buffer);
 478   1      }
 479          
 480          //显示小于4个的十进制数字
 481          //修改缓冲区的大小可以扩展显示
 482          #ifdef   disp_ram_data
              #define  disp_ram_data
              void disp_ram_data(uchar col,uchar layer,uchar n,uchar mode)
              {
                   while(n--)
                       {
                              if(mode)disp_one_ascii(col,layer,disp_buffer[n]+0x30,1);
                              else    disp_one_ascii(col,layer,disp_buffer[n]+0x30,0);
C51 COMPILER V7.50   12232DRIVERS                                                          05/28/2007 15:49:30 PAGE 9   

                              col += 8;
                       }
              }
              #endif
 494          
 495          //ASCII(8*16) 和 汉字(16*16)显示函数
 496          
 497          void dprintf(uchar col,uchar layer,uchar *ptr,uchar mode)
 498          {
 499   1              uchar c1,c2;
 500   1              uchar i,j,k;
 501   1              uchar ulen;
 502   1              //uchar ucol,ulayer,umode;
 503   1              uchar ucol,ulayer;
 504   1          ulen = 0; 
 505   1              ucol = col;   
 506   1              ulayer = layer;
 507   1              
 508   1              while (ptr[ulen]!= 0)ulen++;               //探测字串长度
 509   1          i=0;
 510   1              while(i<ulen)
 511   1              {
 512   2                      c1 = ptr[i];
 513   2                      c2 = ptr[i+1];
 514   2                                               //ASCII字符与汉字内码的区别在于128做
 515   2      //分界;大于128的为汉字码
 516   2                      if(c1 <=128)                                      //ASCII
 517   2                      {   
 518   3                              if(mode)disp_one_ascii(ucol,ulayer,c1,1);
 519   3                                      else    disp_one_ascii(ucol,ulayer,c1,0);
 520   3                                      ucol+=8;
 521   3                                      i++;                      //ASCII码的处理
 522   3                      }
 523   2                      else                                                      //中文
 524   2                      {
 525   3                                  for(j=0;j<sizeof(hz16)/sizeof(hz16[0]);j++)                                                         
 526   3                                  {                         //查找定位当前汉字的点阵区
 527   4                                          if((c1 == hz16[j].index[0]) && (c2 == hz16[j].index[1]))
 528   4                                              break;
 529   4                                  }
 530   3                                  for(k=0;k<32;k++)
 531   3                                      {   if(mode)dot_buffer[k]=~hz16[j].zimo[k];
 532   4                                          else    dot_buffer[k]= hz16[j].zimo[k];
 533   4                                      }       
 534   3                                  draw_bmp(ucol,ulayer,16,dot_buffer);
 535   3                                  ucol+=16;
 536   3                                      i+=2;                     //中文的处理
 537   3                      }
 538   2              }
 539   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1686    ----
   CONSTANT SIZE    =   1462    ----
   XDATA SIZE       =     42      50
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -