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

📄 mst-g240128-052w.#2

📁 基于MST-G240128点阵液晶的 状态机机制 人机界面四级滚屏菜单 源代码 ,带时间片机制模拟操作系统
💻 #2
📖 第 1 页 / 共 2 页
字号:
   LCD_WriteTCommand3(LCD_TXT_WID, 30,   0x00);	 // 设置文本模式的宽度,宽度为N/6或N/8,N为宽度点数,如240
   LCD_WriteTCommand3(LCD_GRH_STP, 0x00, 0x00);	 // 设置图形方式RAM起始地址
   LCD_WriteTCommand3(LCD_GRH_WID, 30,   0x00);	 // 设置图形模式的宽度,宽度为N/6或N/8,N为宽度点数,如240
   LCD_WriteTCommand1(LCD_MOD_OR);				    // 设置显示方式为"或"
   LCD_WriteTCommand1(LCD_DIS_SW|0x08);			 // 设置纯图形显示模式
}

/****************************************************************************
* 名称:LCD_UpdateDate()
* 功能:在指定位置上更新8个点。
* 入口参数:x 指定点所在列的位置
*           y 指定点所在行的位置
* 出口参数:
* 说明:
****************************************************************************/
void LCD_UpdateByte(uint8 x, uint8 y, uint8 ucDATA)
{  
   uint16 addr;    

   addr = (GUI_LCM_XMAX>>3) * y + (x>>3);                /* 找出目标地址 */
   LCD_WriteTCommand3(LCD_ADR_POS, addr&0xFF, addr>>8 ); /* 置地址指针   */   
   LCD_WriteTCommand2(LCD_INC_WR,  ucDATA);              /* 输出数据     */
}

/****************************************************************************
* 名称:LCD_UpdatePoint()
* 功能:在指定位置上画点,刷新某一点。
* 入口参数:x            指定点所在列的位置
*           y            指定点所在行的位置
*           bCOLOR  0/1  显示/不显示   
* 出口参数:
* 说明:
****************************************************************************/
void LCD_UpdatePoint(uint8 x, uint8 y, bit bCOLOR)
{  
   uint16 addr; 
   uint8  ucTMP;
 
   ucTMP = x % 8;
   ucTMP = 7 - ucTMP;

   if( bCOLOR == 1 )
     ucTMP = 0x01 << ucTMP;
   else
     ucTMP = 0x00;

   addr = (GUI_LCM_XMAX>>3) * y + (x>>3);                /* 找出目标地址 */
   LCD_WriteTCommand3(LCD_ADR_POS, addr&0xFF, addr>>8);	/* 置地址指针 */
   LCD_WriteTCommand2(LCD_INC_WR,  ucTMP);               /* 输出数据   */
}


/****************************************************************************
* 名称:LCD_DispAsciiCh16x8()
* 功能:显示ASCII 16×8字符。
* 入口参数:x	指定显示位置,x坐标
*           y	指定显示位置,y坐标
*           ch	要显示的ASCII字符对应的数组的地址。
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
bit LCD_DispAsciiCh16x8(uint8 xx, uint8 yy, uint8 ucASCII)
{  
   uint8  x, y;
   uint8  i;
   uint16 AddrOffSet;

   x = xx;
	y = yy;
   if( x >= (GUI_LCM_XMAX-8) )              /* 参数过滤 */
     return(0);
   if( y >= (GUI_LCM_YMAX-8) )              /* 参数过滤 */
     return(0);

   AddrOffSet = ( ucASCII - 32) * 16;       //     
   for(i=0; i<16; i++)						     // 显示共16行
   {  
      LCD_UpdateByte(x, y, FONT16x8ASII[AddrOffSet + i]);
      y++;									        // 指向下一行
   }   
   return(1);
}


/****************************************************************************
* 名称:LCD_DispAsciiStr16x8()
* 功能:输出显示字符串,16*8字体
* 入口参数:x	   指定显示位置,x坐标
*           y	   指定显示位置,y坐标
*           str	要显示的ASCII码字符串
* 出口参数:无
* 说明:
****************************************************************************/
void LCD_DispAsciiStr16x8(uint8 xx, uint8 yy, const char *str)
{  
   uint8  x, y;

   x = xx;
	y = yy;
   while(*str != '\0')
   {
      LCD_DispAsciiCh16x8(x, y, *str);
      str++;
      x = x + 8;
   } 
}


/****************************************************************************
* 名称:LCD_DispChChar16x16()
* 功能:显示汉字(16*16字体)。
* 入口参数:x	指定显示位置,x坐标
*           y	指定显示位置,y坐标
*           ch	要显示的汉字对应的数组的首地址。
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
bit LCD_DispChChar16x16(uint8 xx, uint8 yy, char *ucCHAR, uint8 FontNo)
{  
   uint8  xdata x, y;
   uint8  xdata i, j, k;
   char   xdata *OffSetCH; 
   uint16 xdata AddrOffSet;
      
   x = xx;
	y = yy;
   if( x >= (GUI_LCM_XMAX-8) )                  /* 参数过滤 */
     return(0);
   if( y >= (GUI_LCM_YMAX-8) )                  /* 参数过滤 */
     return(0);

   OffSetCH   = strstr(HzIndex, ucCHAR);
   if( OffSetCH == 0 )
     return (0);
   AddrOffSet = ( OffSetCH - HzIndex ) << 4;    // = / 2 * 32;
                                             
   k = 0;
   for(i=0; i<16; i++)						         // 显示共16行
   {  
      for(j=0; j<2; j++)				   	      // 每行共16点
      {  
		   if( FontNo == 0 )                      // 宋体
           LCD_UpdateByte(x, y, FONT16x16ChCH1[AddrOffSet + k]);
		   if( FontNo == 1 )                      // 宋体加粗
           LCD_UpdateByte(x, y, FONT16x16ChCH2[AddrOffSet + k]);

		   x = x + 8;
			k++;
      }      
      y++;									            // 指向下一行
      x = x - 16;							            // 恢复x值
   }   
   return(1);
}


/****************************************************************************
* 名称:LCD_DispChStr16x16()
* 功能:输出显示字符串(16*16字体)。
* 入口参数:x	指定显示位置,x坐标
*           y	指定显示位置,y坐标
*           str	要显示的字符串
* 出口参数:无
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
void LCD_DispChStr16x16(uint8 xx, uint8 yy, const char *str, uint8 FontNo)
{  
   uint8  idata x, y;
   char   idata SubStr[3] = {0, 0, 0};

   x = xx;
	y = yy;
   while( *str != 0 )
   {
      strncpy(SubStr, str, 2);
      SubStr[2] = 0;
 
      LCD_DispChChar16x16(x, y, SubStr, FontNo);
      str = str + 2;
      x = x + 16;
   } 
}


/****************************************************************************
* 名称:LCD_DispAsciiChStr()
* 功能:显示ASCII码和汉字混编字符串.
* 入口参数:x	指定显示位置,x坐标
*           y	指定显示位置,y坐标
*           str	要显示的字符串
* 出口参数:无
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
void LCD_DispAsciiChStr(uint8 xx, uint8 yy, const char *str, uint8 FontNo)
{  
   uint8  idata x, y;
   char   idata SubStr[3] = {0, 0, 0};

   x = xx;
	y = yy;
   while( *str != 0 )
   {
      if( (uint8)*str < 0xA0 )
		{
	      LCD_DispAsciiCh16x8(x, y, *str);
         str++;
         x = x + 8;
		}

      if( (uint8)*str >= 0xA0 )
		{
         strncpy(SubStr, str, 2);
         SubStr[2] = 0;
 
         LCD_DispChChar16x16(x, y, SubStr, FontNo);
         str = str + 2;
         x = x + 16;
      } 
   } 
}


/****************************************************************************
* 名称:LCD_DispAsciiChCURS()
* 功能:显示光标
* 入口参数:x	     指定显示位置,x坐标
*           y	     指定显示位置,y坐标
*           bCOLOR  0/1, 不显示/显示.    
*           bCHAR   0/1, ASCII码字符/汉字字符型光标.
* 出口参数:
* 说明:
****************************************************************************/
void LCD_DispAsciiChCURS(uint8 xx, uint8 yy, bit bCOLOR, bit bCHAR)
{                                                   
   uint8  idata x, y;

   x = xx;
	y = yy;

   if( bCHAR == 1 )    // 显示汉字
	{
	   if( bCOLOR == 1 )      // 显示光标
		{
	      LCD_UpdateByte(x,   y+15, 0xff);
	      LCD_UpdateByte(x+8, y+15, 0xff);
      } 
	   else                   // 不显示光标
		{
	      LCD_UpdateByte(x,   y+15, 0x00);
	      LCD_UpdateByte(x+8, y+15, 0x00);
      } 
	}
   else     // 显示ASCII码
	{
	   if( bCOLOR == 1 )      // 显示光标
		{
	      LCD_UpdateByte(x,   y+15, 0xff);
      } 
	   else                   // 不显示光标
		{
	      LCD_UpdateByte(x,   y+15, 0x00);
      } 
	}
}


/****************************************************************************
** 函数名称: LCD_SelfTest()
** 功能描述: LCD测试程序
** 入口参数: 无
** 出口参数: 无
** 全局变量: 无
** 调用模块: 无
** 说明:
****************************************************************************/
void LCD_SelfTest(void)
{   
   LCD_DispAsciiChStr  (16, 96, "苏州LZK-X型电动机", 1);

   LCD_DispAsciiCh16x8 (16, 16, '4' );
   LCD_DispAsciiStr16x8( 0, 32, ">0123456789LZK-xABCDEFG");
   LCD_DispChChar16x16 (16, 48, "科", 1);
	LCD_DispChStr16x16  (32, 48, "科树", 1);

   LCD_DispChStr16x16  (64, 48, "通信", 1);
   LCD_DispChStr16x16  (64+2*16+8, 48, "公科有技限司", 1);
   LCD_DispChStr16x16  (16, 72, "友明科技有限公司", 1);

	LCD_DispAsciiChStr  (16,112, "常滑全", 0);
	LCD_DispAsciiChStr  (64,112, "科树", 1);
}


/****************************************************************************
** 函数名称: LCD_GoToXY()
** 功能描述: 光标定位
** 入口参数: 无
** 出口参数: 无
** 全局变量: 无
** 调用模块: 无
** 说明:
****************************************************************************/
void LCD_GoToXY(uint8 x, uint8 y)
{   
   CURS_X = x;
   CURS_Y = y;
}









⌨️ 快捷键说明

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