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

📄 12232drivers.lst

📁 C51单片机一个小项目源程序:包含液晶12232驱动,AD7705驱动,按键扫描及单片机内部EEPROM的驱动,是一个比较值得参考的源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 236                  lcd_clr1(1,6,54,1);
 237                  lcd_clr1(2,6,54,1);
 238                  lcd_clr1(3,6,54,1);
 239                  lcd_clr1(0,6,54,0);
 240                  lcd_clr1(1,6,54,0);
 241                  lcd_clr1(2,6,54,0);
C51 COMPILER V7.50   12232DRIVERS                                                          09/26/2007 17:19:04 PAGE 5   

 242                  lcd_clr1(3,6,54,0);
 243          }  */   
 244          
 245          //同时设置主(右)从(左)显示页为0~3页
 246          void set_page(uchar page)
 247          {
 248   1          send_mi(page_addr_set|page);
 249   1          send_si(page_addr_set|page);
 250   1      }
 251          
 252          //同时设置主(右)从(左)列地址为0~61列
 253          void set_address(uchar address)
 254          {
 255   1          send_mi(address&0x7F);               //&0x7F,考虑到防止越限
 256   1          send_si(address&0x7F);
 257   1      }
 258          
 259          //在右页(从窗口)当前地址画一个字节(8点)
 260          
 261          void putchar_l(uchar c)
 262          {
 263   1          send_md(c);
 264   1      }
 265          
 266          //在左页(主窗口)当前地址画一个字节(8点)
 267          
 268          void putchar_r(uchar c)
 269          {
 270   1          send_sd(c);
 271   1      }    
 272          
 273          //画一个图,横坐标是col,layer表示上下层,width是图形的宽,高固定16
 274          //          bmp是图形指针
 275          //          使用zimo21软件,采用纵向取模下高位得到bmp数据。
 276          //  col     图型的起始位置0~121
 277          // layer    图形的位置(Y坐标)0-下半部分 非0-上半部分
 278          // width    图形宽度8,16可选
 279          //  bmp     图形数据指针
 280          
 281          void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
 282          {
 283   1          uchar x;        
 284   1              uchar address;                  //address表示显存的物理地址
 285   1              uchar p=0;         
 286   1          uchar page=0;
 287   1              uchar window=0;                             //page表示上下两页,window表示左右窗口(0
 288   1      //左,1右)
 289   1          if (layer) page=2;              //左-主窗口,右-从窗口
 290   1          
 291   1          for (x=col; x<col+width; x++)
 292   1          {   
 293   2                  if (x>121)return;           //防止显示乱码
 294   2              if (x>60)                                       //左右窗口定位
 295   2                      {
 296   3                              window=1;               //右-从窗口
 297   3                              address=x%61;
 298   3                      }
 299   2              else
 300   2                          address=x;              //主窗口输出  
 301   2      
 302   2              set_page(page);             //上层数据输出
 303   2              set_address(address);
C51 COMPILER V7.50   12232DRIVERS                                                          09/26/2007 17:19:04 PAGE 6   

 304   2              
 305   2              if (window)                             
 306   2                putchar_r(bmp[p]);        
 307   2              else 
 308   2                putchar_l(bmp[p]);        
 309   2      
 310   2              set_page(page+1);           //下层数据输出
 311   2              set_address(address);       //列保持不变 
 312   2              
 313   2              if (window)                             
 314   2                 putchar_r(bmp[p+width]);     
 315   2                      else 
 316   2                 putchar_l(bmp[p+width]);       
 317   2      
 318   2              p++;
 319   2          }
 320   1      } 
 321          /*
 322          void draw_bmp1(uchar col,uchar width,uchar *bmp)
 323          {
 324              uchar x;        
 325                  uchar address;                  //address表示显存的物理地址
 326                  uchar p=0;         
 327              uchar page=0;
 328                  uchar window=0;                             //page表示上下两页,window表示左右窗口(0
 329          //左,1右)
 330          //    if (layer) page=2;              //左-主窗口,右-从窗口
 331              
 332              for (x=col; x<col+width; x++)
 333              {   
 334                      if (x>121)return;           //防止显示乱码
 335                  if (x>60)                                       //左右窗口定位
 336                          {
 337                                  window=1;               //右-从窗口
 338                                  address=x%61;
 339                          }
 340                  else
 341                              address=x;              //主窗口输出  
 342          
 343                  set_page(page);             //上层数据输出
 344                  set_address(address);
 345          //        set_page(page+2);             //上层数据输出
 346          //        set_address(address);
 347                  
 348                  if (window)                             
 349                    putchar_r(bmp[p]);        
 350                  else 
 351                    putchar_l(bmp[p]);        
 352          
 353                  set_page(page+1);           //下层数据输出
 354                  set_address(address);       //列保持不变 
 355          //        set_page(page+3);           //下层数据输出
 356          //        set_address(address);
 357                  
 358                  if (window)                             
 359                     putchar_r(bmp[p+width]);     
 360                          else 
 361                     putchar_l(bmp[p+width]);  
 362          
 363                      //page=2;
 364                          set_page(page+2);             //上层数据输出
 365                  set_address(address);
C51 COMPILER V7.50   12232DRIVERS                                                          09/26/2007 17:19:04 PAGE 7   

 366          //         set_page(page);             //上层数据输出
 367          //        set_address(address);
 368                  
 369                  if (window)                             
 370                    putchar_r(bmp[p+2*width]);        
 371                  else 
 372                    putchar_l(bmp[p+2*width]);        
 373          
 374                  set_page(page+3);           //下层数据输出
 375                  set_address(address);       //列保持不变 
 376          //        set_page(page+1);           //下层数据输出
 377          //        set_address(address);
 378                  
 379                  if (window)                             
 380                     putchar_r(bmp[p+3*width]);     
 381                          else 
 382                     putchar_l(bmp[p+3*width]);
 383                                   
 384                  p++;
 385              }
 386          
 387          
 388          }       */
 389          
 390          //显示单个ASCII码col-列;layer-上下行:1-上,0-下;ascii_code:所要显示德ASCCII码
 391          
 392          void disp_one_ascii(uchar col,uchar layer,uchar ascii_code,uchar mode)
 393          {
 394   1              uchar i;
 395   1              for(i=0;i<16;i++)                //ASCII码显示占用16个字节
 396   1              {   
 397   2                      if(mode)dot_buffer[i]=~ascii[(ascii_code-0x20)*16 + i];
 398   2                  else    dot_buffer[i]= ascii[(ascii_code-0x20)*16 + i]; 
 399   2              }  
 400   1              draw_bmp(col,layer,8,dot_buffer);
 401   1      }
 402          
 403          //显示小于4个的十进制数字
 404          //修改缓冲区的大小可以扩展显示
 405          #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);
                              col += 8;
                       }
              }
              #endif
 417          
 418          //ASCII(8*16) 和 汉字(16*16)显示函数
 419          
 420          void dprintf(uchar col,uchar layer,uchar *ptr,uchar mode)
 421          {
 422   1              uchar c1,c2;
 423   1              uchar i,j,k;
 424   1              uchar ulen;
 425   1              //uchar ucol,ulayer,umode;
 426   1              uchar ucol,ulayer;
 427   1          ulen = 0; 
C51 COMPILER V7.50   12232DRIVERS                                                          09/26/2007 17:19:04 PAGE 8   

 428   1              ucol = col;   
 429   1              ulayer = layer;
 430   1              
 431   1              while (ptr[ulen]!= 0)ulen++;               //探测字串长度
 432   1          i=0;
 433   1              while(i<ulen)
 434   1              {
 435   2                      c1 = ptr[i];
 436   2                      c2 = ptr[i+1];
 437   2                                               //ASCII字符与汉字内码的区别在于128做
 438   2      //分界;大于128的为汉字码
 439   2                      if(c1 <=128)                                      //ASCII
 440   2                      {   
 441   3                              if(mode)disp_one_ascii(ucol,ulayer,c1,1);
 442   3                                      else    disp_one_ascii(ucol,ulayer,c1,0);
 443   3                                      ucol+=8;
 444   3                                      i++;                      //ASCII码的处理
 445   3                      }
 446   2                      else                                                      //中文
 447   2                      {
 448   3                                  for(j=0;j<sizeof(hz16)/sizeof(hz16[0]);j++)                                                         
 449   3                                  {                         //查找定位当前汉字的点阵区
 450   4                                          if((c1 == hz16[j].index[0]) && (c2 == hz16[j].index[1]))
 451   4                                              break;
 452   4                                  }
 453   3                                  for(k=0;k<32;k++)
 454   3                                      {   if(mode)dot_buffer[k]=~hz16[j].zimo[k];
 455   4                                          else    dot_buffer[k]= hz16[j].zimo[k];
 456   4                                      }       
 457   3                                  draw_bmp(ucol,ulayer,16,dot_buffer);
 458   3                                  ucol+=16;
 459   3                                      i+=2;                     //中文的处理
 460   3                      }
 461   2              }
 462   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1190    ----
   CONSTANT SIZE    =   1020    ----
   XDATA SIZE       =     32      40
   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 + -