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

📄 lcm_drive.lst

📁 * 功能:DP_51PRO实验仪图形液晶显示实验。在屏幕上半部分显示一幅图片 * 在屏幕下半部分显示“重庆科技学院”等
💻 LST
📖 第 1 页 / 共 2 页
字号:
 191                                          0x10, 0xFC, 0x12, 0x02, 0x04,
 192                                          0x18, 0xA4, 0xA4, 0xA4, 0x7C,
 193                                          0xFE, 0x10, 0x08, 0x08, 0xF0,
 194                                          0x00, 0x88, 0xFA, 0x80, 0x00,
 195                                          0x40, 0x80, 0x88, 0x7A, 0x00,
 196                                          0xFE, 0x20, 0x50, 0x88, 0x00,
 197                                          0x00, 0x82, 0xFE, 0x80, 0x00,
 198                                          0xF8, 0x08, 0x30, 0x08, 0xF8,
 199                                          0xF8, 0x10, 0x08, 0x08, 0xF0,
 200                                          0x70, 0x88, 0x88, 0x88, 0x70
 201                                         };
 202          
 203          uint8 code  ASCII_TAB70[80] = { 0xF8, 0x28, 0x28, 0x28, 0x10,
 204                                          0x10, 0x28, 0x28, 0x30, 0xF8,
 205                                          0xF8, 0x10, 0x08, 0x08, 0x10,
 206                                          0x90, 0xA8, 0xA8, 0xA8, 0x40,
 207                                          0x08, 0x7E, 0x88, 0x80, 0x40,
 208                                          0x78, 0x80, 0x80, 0x40, 0xF8,
 209                                          0x38, 0x40, 0x80, 0x40, 0x38,
 210                                          0x78, 0x80, 0x60, 0x80, 0x78,
 211                                          0x88, 0x50, 0x20, 0x50, 0x88,
 212                                          0x18, 0xA0, 0xA0, 0xA0, 0x78,
 213                                          0x88, 0xC8, 0xA8, 0x98, 0x88,
 214                                          0x00, 0x10, 0x6C, 0x82, 0x00,
 215                                          0x00, 0x00, 0xFE, 0x00, 0x00,
 216                                          0x00, 0x82, 0x6C, 0x10, 0x00,
 217                                          0x10, 0x10, 0x54, 0x38, 0x10,
 218                                          0x10, 0x38, 0x54, 0x10, 0x10
 219                                         };
 220          uint8 code word[48]=
 221          {0x00,0x00,0x30,0x04,0xCC,0x07,0x48,0x04,0xF8,0x7F,0x48,0x04,0x48,0x04,0x08,0x04,//"年",0
 222          0x00,0x00,0x00,0x60,0xF8,0x1F,0x48,0x02,0x48,0x02,0x48,0x42,0xF8,0x7F,0x00,0x00, //"月",1
 223          0x00,0x00,0x00,0x00,0xF8,0x7F,0x08,0x11,0x08,0x11,0x08,0x11,0xF8,0x3F,0x00,0x00};/*"日",2*/
 224          /* (8 X 16 , 华文细黑 ) */
 225          void LCM_DispWord(uint8 disp_cy, uint8 disp_cx,char dispdata) 
 226          {  uint8  code  *pchardata;
 227   1         uint8  i;
 228   1          // 参数过滤
 229   1         disp_cy = disp_cy&0x07;      //行    
 230   1         disp_cx = disp_cx&0x0f;      //列
 231   1         
 232   1         pchardata = &word[dispdata];                 
 233   1         
 234   1       
 235   1         if( (disp_cx&0x08) == 0 )                                // 选择液晶控制芯片(即CS1--控制前8个字符,CS2--控制后8个字符)
 236   1         {  i = disp_cx<<3;                                                   // 当前要写8列的首地址(把64列分为8个8列)
 237   2            LCM_Wr1Command(LCM_ADDRSTRX+i);                   // 设置当前列地址,即列0x40(64)+i
 238   2            LCM_Wr1Command(LCM_ADDRSTRY+disp_cy);             // 设置当前页地址,即8行0xb8(8*23=184)+disp_cy
 239   2            
 240   2            for(i=0; i<5; i++);                               //延时
C51 COMPILER V7.50   LCM_DRIVE                                                             08/21/2007 11:05:02 PAGE 5   

 241   2      
 242   2            for(i=0; i<8; i++)                                //发送5列数据
 243   2            {  LCM_Wr1Data(*pchardata);               // 发送数据                                                                     */
 244   3               pchardata++; pchardata++;
 245   3            }
 246   2         }
 247   1         else
 248   1         {  i = (disp_cx&0x07)<<3;                            // 若Y>7,则选取用CS2并且地址值要先减去8,再乘以8
 249   2            LCM_Wr2Command(LCM_ADDRSTRX+i);
 250   2            LCM_Wr2Command(LCM_ADDRSTRY+disp_cy);             // 设置当前页地址,即8行
 251   2            
 252   2            for(i=0; i<5; i++);
 253   2      
 254   2            for(i=0; i<8; i++)
 255   2            {  LCM_Wr2Data(*pchardata);               // 发送数据                                                                     */
 256   3               pchardata++; pchardata++;
 257   3            }
 258   2         }
 259   1      }                                         
 260          
 261                                 
 262          /***********************************************************************
 263          * 名称:LCM_DispChar()
 264          * 功能:指定地址显示字符。
 265          * 入口参数:disp_cy             显示行值(0-7)   
 266          *          disp_cx              显示列值(0-15)
 267          *          dispdata             所要显示的字符(ASCII码)
 268          * 注:支持显示字符0-9、A-Z、a-z及空格,字符显示格式为5*7,模为8*8,所以
 269          *     屏幕显示为8*16(共8行,每行16个字符)。
 270          ***********************************************************************/
 271          void LCM_DispChar(uint8 disp_cy, uint8 disp_cx, char dispdata) 
 272          {  uint8  code  *pchardata;
 273   1         uint8  i;
 274   1          // 参数过滤
 275   1         disp_cy = disp_cy&0x07;      //行    
 276   1         disp_cx = disp_cx&0x0f;      //列
 277   1         
 278   1         /* 先要找出显示数据的类型,并设置相应的点阵数据表,然后设置指针,以取得对应的点阵数据。 */                           
 279   1         switch(dispdata&0xf0)
 280   1         {  case 0x20:
 281   2                 dispdata = (dispdata&0x0f)*5;
 282   2                 pchardata = &ASCII_TAB20[dispdata];
 283   2                 break;
 284   2      
 285   2            case 0x30:
 286   2                 dispdata = (dispdata&0x0f)*5;
 287   2                 pchardata = &ASCII_TAB30[dispdata];
 288   2                 break;
 289   2      
 290   2            case 0x40:
 291   2                 dispdata = (dispdata&0x0f)*5;
 292   2                 pchardata = &ASCII_TAB40[dispdata];
 293   2                 break;
 294   2      
 295   2            case 0x50:
 296   2                 dispdata = (dispdata&0x0f)*5;
 297   2                 pchardata = &ASCII_TAB50[dispdata];
 298   2                 break;
 299   2      
 300   2            case 0x60:
 301   2                 dispdata = (dispdata&0x0f)*5;
 302   2                 pchardata = &ASCII_TAB60[dispdata];
C51 COMPILER V7.50   LCM_DRIVE                                                             08/21/2007 11:05:02 PAGE 6   

 303   2                 break;
 304   2      
 305   2            case 0x70:
 306   2                 dispdata = (dispdata&0x0f)*5;
 307   2                 pchardata = &ASCII_TAB70[dispdata];
 308   2                 break;
 309   2                  
 310   2            default:
 311   2                 pchardata = &ASCII_TAB20[0];
 312   2                 break;
 313   2         } // end of switch(dispdata&0xf0)...
 314   1         
 315   1         
 316   1         if( (disp_cx&0x08) == 0 )                                // 选择液晶控制芯片(即CS1--控制前8个字符,CS2--控制后8个字符)
 317   1         {  i = disp_cx<<3;                                                   // 当前要写8列的首地址(把64列分为8个8列)
 318   2            LCM_Wr1Command(LCM_ADDRSTRX+i);                   // 设置当前列地址,即列0x40(64)+i
 319   2            LCM_Wr1Command(LCM_ADDRSTRY+disp_cy);             // 设置当前页地址,即8行0xb8(8*23=184)+disp_cy
 320   2            
 321   2            for(i=0; i<5; i++);                               //延时
 322   2            LCM_Wr1Data(0x00);                                // 显示一列空格
 323   2            for(i=0; i<5; i++)                                //发送5列数据
 324   2            {  LCM_Wr1Data(*pchardata);               // 发送数据                                                                     */
 325   3               pchardata++;
 326   3            }
 327   2            LCM_Wr1Data(0x00);                                // 显示一列空格
 328   2            for(i=0; i<5; i++);               //延时
 329   2            LCM_Wr1Data(0x00);                                // 显示一列空格
 330   2         }
 331   1         else
 332   1         {  i = (disp_cx&0x07)<<3;                            // 若Y>7,则选取用CS2并且地址值要先减去8,再乘以8
 333   2            LCM_Wr2Command(LCM_ADDRSTRX+i);
 334   2            LCM_Wr2Command(LCM_ADDRSTRY+disp_cy);             // 设置当前页地址,即8行
 335   2            
 336   2            for(i=0; i<5; i++);
 337   2            LCM_Wr2Data(0x00);                                // 显示一列空格
 338   2            for(i=0; i<5; i++)
 339   2            {  LCM_Wr2Data(*pchardata);               // 发送数据                                                                     */
 340   3               pchardata++;
 341   3            }
 342   2            LCM_Wr2Data(0x00);        
 343   2            for(i=0; i<5; i++);
 344   2            LCM_Wr2Data(0x00);        
 345   2         }
 346   1      }                                         
 347          
 348          
 349          /***********************************************************************
 350          * 名称:LCM_DispStr()
 351          * 功能:字符串显示输出。
 352          * 入口参数:disp_cy     显示起始行(0-7)
 353          *          disp_cx      显示起始列(0-15)
 354          *          disp_str     字串指针
 355          * 出口参数:无
 356          * 注:支持显示字符0-9、A-Z、a-z及空格,字符显示格式为5*7,模为8*8,所以屏幕显示
 357          *     为8*16(共8行,每行16个字符)。
 358          ***********************************************************************/
 359          void  LCM_DispStr(uint8 disp_cy, uint8 disp_cx, char *disp_str) 
 360          {  while( *disp_str != '\0')
 361   1         {    // 参数过滤
 362   2            disp_cy = disp_cy&0x07;   //行            
 363   2            disp_cx = disp_cx&0x0f;   //列
 364   2            LCM_DispChar(disp_cy, disp_cx, *disp_str);        // 显示字符
C51 COMPILER V7.50   LCM_DRIVE                                                             08/21/2007 11:05:02 PAGE 7   

 365   2              
 366   2            disp_str++;                                       // 指向下一字符数据
 367   2            disp_cx++;
 368   2            if(disp_cx>15) disp_cy++;                         // 指向下一显示行
 369   2         }
 370   1      }
 371             
 372          
 373          
 374          
 375          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1057    ----
   CONSTANT SIZE    =    528    ----
   XDATA SIZE       =   1024    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      22
   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 + -