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

📄 11-5.5.lst

📁 C51实用程序(45个) I/O、定时器、中断、看门狗、计数器、软件AD、VB串口、93c06驱动、24c02系列驱动、7219、20045、软件陷阱、串口中断、码值转换、AVR通讯、IIC、D
💻 LST
📖 第 1 页 / 共 3 页
字号:
 356          {
 357   1          send_mi(address&0x7F);  //&0x7F,考虑到防止越限
 358   1          send_si(address&0x7F);
 359   1      }
 360          
 361          ////////////////////////////////////////////////////////////////////////////////
 362          //调用方式:void putchar_l(uchar c)
 363          //函数说明:在右页(从窗口)当前地址画一个字节(8点)
 364          ////////////////////////////////////////////////////////////////////////////////
 365          void putchar_l(uchar c)
C51 COMPILER V7.09   11_5_5                                                                06/18/2004 09:33:22 PAGE 7   

 366          {
 367   1          send_md(c);
 368   1      }
 369          
 370          ////////////////////////////////////////////////////////////////////////////////
 371          //调用方式:void putchar_r(uchar c)
 372          //函数说明:在左页(主窗口)当前地址画一个字节(8点)
 373          ////////////////////////////////////////////////////////////////////////////////
 374          void putchar_r(uchar c)
 375          {
 376   1          send_sd(c);
 377   1      }    
 378          
 379          ////////////////////////////////////////////////////////////////////////////////
 380          //调用方式:void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
 381          //函数说明:画一个图,横坐标是col,layer表示上下层,width是图形的宽,高固定16
 382          //          bmp是图形指针
 383          //          使用zimo21软件,采用纵向取模下高位得到bmp数据。
 384          //  col     图型的起始位置0~121
 385          // layer    图形的位置(Y坐标)0-下半部分 非0-上半部分
 386          // width    图形宽度8,16可选
 387          //  bmp     图形数据指针
 388          ////////////////////////////////////////////////////////////////////////////////
 389          void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
 390          {
 391   1          uchar x;        
 392   1              uchar address;                  //address表示显存的物理地址
 393   1              uchar p=0;         
 394   1          uchar page=0;
 395   1              uchar window=0;                             //page表示上下两页,window表示左右窗口(0左,1右)
 396   1          if (layer) page=2;              //左-主窗口,右-从窗口
 397   1          
 398   1          for (x=col; x<col+width; x++)
 399   1          {   
 400   2                  if (x>121)return;           //防止显示乱码
 401   2              if (x>60)                                       //左右窗口定位
 402   2                      {
 403   3                              window=1;               //右-从窗口
 404   3                              address=x%61;
 405   3                      }
 406   2              else
 407   2                          address=x;              //主窗口输出  
 408   2      
 409   2              set_page(page);             //上层数据输出
 410   2              set_address(address);
 411   2              
 412   2              if (window)                             
 413   2                putchar_r(bmp[p]);        
 414   2              else 
 415   2                putchar_l(bmp[p]);        
 416   2      
 417   2              set_page(page+1);           //下层数据输出
 418   2              set_address(address);       //列保持不变 
 419   2              
 420   2              if (window)                             
 421   2                 putchar_r(bmp[p+width]);     
 422   2                      else 
 423   2                 putchar_l(bmp[p+width]);       
 424   2      
 425   2              p++;
 426   2          }
 427   1      }
C51 COMPILER V7.09   11_5_5                                                                06/18/2004 09:33:22 PAGE 8   

 428          
 429          ////////////////////////////////////////////////////////////////////////////////
 430          //函数:void disp_one_ascii(uchar col,uchar layer,uchar ascii_code)
 431          //说明:显示单个ASCII码col-列;layer-上下行:1-上,0-下;ascii_code:所要显示德ASCCII码
 432          ////////////////////////////////////////////////////////////////////////////////
 433          void disp_one_ascii(uchar col,uchar layer,uchar ascii_code,uchar mode)
 434          {
 435   1              uchar i;
 436   1              for(i=0;i<16;i++)                //ASCII码显示占用16个字节
 437   1              {   
 438   2                      if(mode)dot_buffer[i]=~ascii[(ascii_code-0x20)*16 + i];
 439   2                  else    dot_buffer[i]= ascii[(ascii_code-0x20)*16 + i]; 
 440   2              }  
 441   1              draw_bmp(col,layer,8,dot_buffer);
 442   1      }
 443          
 444          ////////////////////////////////////////////////////////////////////////////////
 445          //函数:void disp_ram_data(uchar col,uchar layer,uchar n,uchar mode)
 446          //说明:显示小于4个的十进制数字//修改缓冲区的大小可以扩展显示
 447          ////////////////////////////////////////////////////////////////////////////////
 448          void disp_ram_data(uchar col,uchar layer,uchar n,uchar mode)
 449          {
 450   1           while(n--)
 451   1               {
 452   2                      if(mode)disp_one_ascii(col,layer,disp_buffer[n]+0x30,1);
 453   2                      else    disp_one_ascii(col,layer,disp_buffer[n]+0x30,0);
 454   2                      col += 8;
 455   2               }
 456   1      }
 457          
 458          ////////////////////////////////////////////////////////////////////////////////
 459          //函数:void dprintf(uchar col,uchar layer,uchar *ptr,uchar mode)
 460          //说明:ASCII(8*16) 和 汉字(16*16)显示函数
 461          ////////////////////////////////////////////////////////////////////////////////
 462          void dprintf(uchar col,uchar layer,uchar *ptr,uchar mode)
 463          {
 464   1              uchar c1,c2;
 465   1              uchar i,j,k;
 466   1              uchar ulen;
 467   1              //uchar ucol,ulayer,umode;
 468   1              uchar ucol,ulayer;
 469   1          ulen = 0; 
 470   1              ucol = col;   
 471   1              ulayer = layer;
 472   1              
 473   1              while (ptr[ulen]!= 0)ulen++;               //探测字串长度
 474   1          i=0;
 475   1              while(i<ulen)
 476   1              {
 477   2                      c1 = ptr[i];
 478   2                      c2 = ptr[i+1];
 479   2              //ASCII字符与汉字内码的区别在于128做分界;大于128的为汉字码
 480   2                      if(c1 <=128)                                      //ASCII
 481   2                      {   
 482   3                              if(mode)disp_one_ascii(ucol,ulayer,c1,1);
 483   3                                      else    disp_one_ascii(ucol,ulayer,c1,0);
 484   3                                      ucol+=8;
 485   3                                      i++;                      //ASCII码的处理
 486   3                      }
 487   2                      else                                                      //中文
 488   2                      {
 489   3                                  for(j=0;j<sizeof(hz16)/sizeof(hz16[0]);j++)                                                         
C51 COMPILER V7.09   11_5_5                                                                06/18/2004 09:33:22 PAGE 9   

 490   3                                  {                         //查找定位当前汉字的点阵区
 491   4                                          if((c1 == hz16[j].index[0]) && (c2 == hz16[j].index[1]))
 492   4                                              break;
 493   4                                  }
 494   3                                  for(k=0;k<32;k++)
 495   3                                      {   if(mode)dot_buffer[k]=~hz16[j].zimo[k];
 496   4                                          else    dot_buffer[k]= hz16[j].zimo[k];
 497   4                                      }       
 498   3                                  draw_bmp(ucol,ulayer,16,dot_buffer);
 499   3                                  ucol+=16;
 500   3                                      i+=2;                     //中文的处理
 501   3                      }
 502   2              }
 503   1      }       
 504          
 505          ////////////////////////////////////////////////////////////////////////////////
 506          ////////////////////////////////////////////////////////////////////////////////
 507          void main(void)
 508          {       
 509   1         uchar i;
 510   1         uint  j;
 511   1      //   DDRC=0xF0;                           //C口高四位为输出控制端口
 512   1      //   DDRA=0xFF;                           //A口为数据线(一般为输出,仅在读LCD状态时为输入)
 513   1         for(i=0;i<10;i++)for(j=1;j;j++);       //开机延时
 514   1         lcd_init(); 
 515   1         lcd_clr();                                 
 516   1         dprintf(10,1,"I AM CHINESE!",0);       //说明/在up  行从第10列开始显示/正常显示
 517   1         disp_ram_data(10,0,2,1);               //说明/在dowm行从第10列开始显示/反白显示
 518   1         while(1); 
 519   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    946    ----
   CONSTANT SIZE    =   1042    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     36      39
   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 + -