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

📄 lcm.lst

📁 基于MST-G240128点阵液晶的 状态机机制 人机界面四级滚屏菜单 源代码 ,带时间片机制模拟操作系统
💻 LST
📖 第 1 页 / 共 4 页
字号:
 420          ****************************************************************************/
 421          void LCD_UpdatePoint(uint8 x, uint8 y, bit bCOLOR)
 422          {  
 423   1         LCD_CS();                         /* ExSRAM Page 16 */
 424   1      
 425   1         LCD_WriteCommand(0xB0 + y>>3);    
 426   1         LCD_WriteCommand(0x10 + x>>4);
 427   1         LCD_WriteCommand(   x % 16);
C51 COMPILER V7.06   LCM                                                                   09/04/2006 09:56:02 PAGE 8   

 428   1      
 429   1         if(bCOLOR)
 430   1           LCD_WriteData(0x01<<y % 8);
 431   1         else
 432   1           LCD_WriteData(0x00);
 433   1      
 434   1         ExInSRAM_Select(0);       //  
 435   1      }
 436          
 437          
 438          /****************************************************************************
 439          * 名称:LCD_DispAsciiCh16x8()
 440          * 功能:显示ASCII 16×8字符。
 441          * 入口参数:x   指定显示位置,x坐标
 442          *           y   指定显示位置,y坐标
 443          *           ch  要显示的ASCII字符对应的数组的地址。
 444          * 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
 445          * 说明:操作失败原因是指定地址超出有效范围。
 446          ****************************************************************************/
 447          bit LCD_DispAsciiCh16x8(uint8 xx, uint8 yy, uint8 ucASCII)
 448          {  
 449   1         uint8  x, y;
 450   1         uint8  i;
 451   1         uint16 AddrOffSet;
 452   1      
 453   1         x = xx;
 454   1              y = yy;
 455   1         if( x >= (GUI_LCM_XMAX-8) )              /* 参数过滤 */
 456   1           return(0);
 457   1         if( y >= (GUI_LCM_YMAX-8) )              /* 参数过滤 */
 458   1           return(0);
 459   1      
 460   1         AddrOffSet = ( ucASCII - 32) * 16;       //     
 461   1         for(i=0; i<16; i++)                                               // 显示共16行
 462   1         {  
 463   2            LCD_UpdateByte(x, y, FONT16x8ASII[AddrOffSet + i]);
 464   2            y++;                                                                              // 指向下一行
 465   2         }   
 466   1         return(1);
 467   1      }
 468          
 469          
 470          /****************************************************************************
 471          * 名称:LCD_DispAsciiStr16x8()
 472          * 功能:输出显示字符串,16*8字体
 473          * 入口参数:x      指定显示位置,x坐标
 474          *           y      指定显示位置,y坐标
 475          *           str 要显示的ASCII码字符串
 476          * 出口参数:无
 477          * 说明:
 478          ****************************************************************************/
 479          void LCD_DispAsciiStr16x8(uint8 x, uint8 y, uint8 *str, bit bReve)
 480          {  
*** WARNING C236 IN LINE 480 OF LCM.C: '_LCD_DispAsciiStr16x8': different length of parameter lists
 481   1         uint8  *OffSet;
 482   1         uint8  i;
 483   1         uint16 AddOffSet;
 484   1      
 485   1         OffSet    = strstr(Index_FONT16x8ASII, str);
 486   1         AddOffSet = (OffSet-Index_FONT16x8ASII) << 4;
 487   1      
 488   1         if( !bReve )
C51 COMPILER V7.06   LCM                                                                   09/04/2006 09:56:02 PAGE 9   

 489   1         {
 490   2            for(i=0;i<8;i++)
 491   2              LCD_UpdateByte(x+i, y,   FONT16x8ASII[AddOffSet++]);
 492   2            for(i=0;i<8;i++)
 493   2              LCD_UpdateByte(x+i, y+8, FONT16x8ASII[AddOffSet++]);
 494   2         }
 495   1         else
 496   1         {
 497   2            for(i=0;i<8;i++)
 498   2              LCD_UpdateByte(x+i, y,   ~FONT16x8ASII[AddOffSet++]);
 499   2            for(i=0;i<8;i++)
 500   2              LCD_UpdateByte(x+i, y+8, ~FONT16x8ASII[AddOffSet++]);
 501   2         }
 502   1      }
 503          
 504          
 505          /****************************************************************************
 506          * 名称:LCD_DispChChar16x16()
 507          * 功能:显示汉字(16*16字体)。
 508          * 入口参数:x   指定显示位置,x坐标
 509          *           y   指定显示位置,y坐标
 510          *           ch  要显示的汉字对应的数组的首地址。
 511          * 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
 512          * 说明:操作失败原因是指定地址超出有效范围。
 513          ****************************************************************************/
 514          bit LCD_DispChChar16x16(uint8 xx, uint8 yy, char *ucCHAR, uint8 FontNo)
 515          {  
 516   1         uint8  xdata x, y;
 517   1         uint8  xdata i, j, k;
 518   1         char   xdata *OffSetCH; 
 519   1         uint16 xdata AddrOffSet;
 520   1            
 521   1         x = xx;
 522   1              y = yy;
 523   1         if( x >= (GUI_LCM_XMAX-8) )                  /* 参数过滤 */
 524   1           return(0);
 525   1         if( y >= (GUI_LCM_YMAX-8) )                  /* 参数过滤 */
 526   1           return(0);
 527   1      
 528   1         OffSetCH   = strstr(Index_FONT16x16ChCH, ucCHAR);
 529   1         if( OffSetCH == 0 )
 530   1           return (0);
 531   1         AddrOffSet = ( OffSetCH - Index_FONT16x16ChCH ) << 4;    // = / 2 * 32;
 532   1                                                   
 533   1         k = 0;
 534   1         for(i=0; i<16; i++)                                                   // 显示共16行
 535   1         {  
 536   2            for(j=0; j<2; j++)                                              // 每行共16点
 537   2            {  
 538   3                         if( FontNo == 0 )                      // 宋体
 539   3                 LCD_UpdateByte(x, y, FONT16x16ChCH1[AddrOffSet + k]);
 540   3                         if( FontNo == 1 )                      // 宋体加粗
 541   3                 LCD_UpdateByte(x, y, FONT16x16ChCH2[AddrOffSet + k]);
 542   3      
 543   3                         x = x + 8;
 544   3                              k++;
 545   3            }      
 546   2            y++;                                                                                  // 指向下一行
 547   2            x = x - 16;                                                                   // 恢复x值
 548   2         }   
 549   1         return(1);
 550   1      }
C51 COMPILER V7.06   LCM                                                                   09/04/2006 09:56:02 PAGE 10  

 551          
 552          
 553          /****************************************************************************
 554          * 名称:LCD_DispChStr16x16()
 555          * 功能:输出显示字符串(16*16字体)。
 556          * 入口参数:x   指定显示位置,x坐标
 557          *           y   指定显示位置,y坐标
 558          *           str 要显示的字符串
 559          * 出口参数:无
 560          * 说明:操作失败原因是指定地址超出有效范围。
 561          ****************************************************************************/
 562          void LCD_DispChStr16x16(uint8 x, uint8 y, uint8 *str, bit bReve, bit FontNo)
 563          {  
 564   1         uint8  *OffSet;
 565   1         uint8  i;
 566   1         uint16 AddOffSet;
 567   1      
 568   1         OffSet    = strstr(Index_FONT16x16ChCH, str);
 569   1         AddOffSet =(OffSet - Index_FONT16x16ChCH) << 5;
 570   1      
 571   1         if( !FontNo )
 572   1         {
 573   2            if( !bReve )
 574   2            {
 575   3                    for(i=0;i<16;i++)
 576   3                      LCD_UpdateByte(x+i, y,   FONT16x16ChCH1[AddOffSet++]);
 577   3                    for(i=0;i<16;i++)
 578   3                      LCD_UpdateByte(x+i, y+8, FONT16x16ChCH1[AddOffSet++]);
 579   3                 }
 580   2            else
 581   2            {
 582   3               for(i=0;i<16;i++)
 583   3                 LCD_UpdateByte(x+i, y,   ~FONT16x16ChCH1[AddOffSet++]);
 584   3               for(i=0;i<16;i++)
 585   3                 LCD_UpdateByte(x+i, y+8, ~FONT16x16ChCH1[AddOffSet++]);
 586   3            }
 587   2         }
 588   1         else
 589   1         {
 590   2            if( !bReve )
 591   2            {
 592   3                    for(i=0;i<16;i++)
 593   3                      LCD_UpdateByte(x+i, y,   FONT16x16ChCH2[AddOffSet++]);
 594   3                    for(i=0;i<16;i++)
 595   3                      LCD_UpdateByte(x+i, y+8, FONT16x16ChCH2[AddOffSet++]);
 596   3            }
 597   2                 else
 598   2                 {
 599   3               for(i=0;i<16;i++)
 600   3                 LCD_UpdateByte(x+i, y,   ~FONT16x16ChCH2[AddOffSet++]);
 601   3               for(i=0;i<16;i++)
 602   3                 LCD_UpdateByte(x+i, y+8, ~FONT16x16ChCH2[AddOffSet++]);
 603   3            }
 604   2         }    
 605   1      }
 606          
 607          
 608          /****************************************************************************
 609          * 名称:LCD_DispAsciiChStr()
 610          * 功能:显示ASCII码和汉字混编字符串.
 611          * 入口参数:x   指定显示位置,x坐标
 612          *           y   指定显示位置,y坐标
C51 COMPILER V7.06   LCM                                                                   09/04/2006 09:56:02 PAGE 11  

 613          *           str 要显示的字符串
 614          * 出口参数:无
 615          * 说明:操作失败原因是指定地址超出有效范围。
 616          ****************************************************************************/
 617          void LCD_DispAsciiChStr(uint8 x, uint8 y, uint8 *str, bit bReve, bit FontNo)
 618          {  
 619   1         uint8 idata rega[2];
 620   1         uint8 idata regc[3];
 621   1      
 622   1         while( *str != 0 )
 623   1         {
 624   2            if( (uint8)*str < 0xA0 )
 625   2            {
 626   3                    strncpy(rega, str, 1);
 627   3                    rega[1]=0;
 628   3                    LCD_DispAsciiStr16x8(x, y, rega, bReve);
 629   3               str = str + 1;
 630   3                    x = x + 8;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -