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

📄 lcm_drive.c

📁 在凌阳spce061A的开发环境ide2.0.0下
💻 C
📖 第 1 页 / 共 2 页
字号:
* 功能:指定地址显示字符。
* 入口参数:disp_cy		显示行值(0-7)	
*	   disp_cx		显示列值(0-15)
*	   dispdata		所要显示的字符(ASCII码)
* 注:支持显示字符0-9、A-Z、a-z及空格,字符显示格式为5*7,模为8*8,所以
*     屏幕显示为8*16(共8行,每行16个字符)。
***********************************************************************/
void LCM_DispChar(uint8 disp_cy, uint8 disp_cx, char dispdata) 
{  uint8  code  *pchardata;
   uint8  i;

   disp_cy = disp_cy&0x07;		// 参数过滤
   disp_cx = disp_cx&0x0f;
   
   /* 先要找出显示数据的类型,并设置相应的点阵数据表,然后设置指针,以取得对应的点阵数据。 */      			
   switch(dispdata&0xf0)
   {  case 0x20:
  	   dispdata = (dispdata&0x0f)*5;
           pchardata = &ASCII_TAB20[dispdata];
           break;

      case 0x30:
  	   dispdata = (dispdata&0x0f)*5;
           pchardata = &ASCII_TAB30[dispdata];
           break;

      case 0x40:
	   dispdata = (dispdata&0x0f)*5;
           pchardata = &ASCII_TAB40[dispdata];
           break;

      case 0x50:
	   dispdata = (dispdata&0x0f)*5;
           pchardata = &ASCII_TAB50[dispdata];
           break;

      case 0x60:
	   dispdata = (dispdata&0x0f)*5;
           pchardata = &ASCII_TAB60[dispdata];
           break;

      case 0x70:
	   dispdata = (dispdata&0x0f)*5;
           pchardata = &ASCII_TAB70[dispdata];
           break;
	    
      default:
	   pchardata = &ASCII_TAB20[0];
	   break;
   } // end of switch(dispdata&0xf0)...
   
   
   if( (disp_cx&0x08) == 0 )				// 选择液晶控制芯片(即CS1--控制前8个字符,CS2--控制后8个字符)
   {  i = disp_cx<<3;
      LCM_Wr1Command(LCM_ADDRSTRX+i);			// 设置当前列地址,即列
      LCM_Wr1Command(LCM_ADDRSTRY+disp_cy);		// 设置当前页地址,即行
      
      for(i=0; i<5; i++);
      LCM_Wr1Data(0x00);				// 显示一列空格
      for(i=0; i<5; i++)
      {  LCM_Wr1Data(*pchardata);			// 发送数据									*/
         pchardata++;
      }
      LCM_Wr1Data(0x00);	
      for(i=0; i<5; i++);
      LCM_Wr1Data(0x00);	
   }
   else
   {  i = (disp_cx&0x07)<<3;				// 若Y>7,则选取用CS2并且地址值要先减去8,再乘以8
      LCM_Wr2Command(LCM_ADDRSTRX+i);
      LCM_Wr2Command(LCM_ADDRSTRY+disp_cy);		// 设置当前页地址,即行
      
      for(i=0; i<5; i++);
      LCM_Wr2Data(0x00);				// 显示一列空格
      for(i=0; i<5; i++)
      {  LCM_Wr2Data(*pchardata);			// 发送数据									*/
         pchardata++;
      }
      LCM_Wr2Data(0x00);	
      for(i=0; i<5; i++);
      LCM_Wr2Data(0x00);	
   }
}      	  

/***********************************************************************
* 名称:LCM_DispStr()
* 功能:字符串显示输出。
* 入口参数:disp_cy 	显示起始行(0-7)
*	   disp_cx      显示起始列(0-15)
*	   disp_str	字串指针
* 出口参数:无
* 注:支持显示字符0-9、A-Z、a-z及空格,字符显示格式为5*7,模为8*8,所以屏幕显示
*     为8*16(共8行,每行16个字符)。
***********************************************************************/
void  LCM_DispStr(uint8 disp_cy, uint8 disp_cx, char *disp_str) 
{  while( *disp_str != '\0')
   {  disp_cy = disp_cy&0x07;				// 参数过滤
      disp_cx = disp_cx&0x0f;	
      LCM_DispChar(disp_cy, disp_cx, *disp_str); 	// 显示字符
   	
      disp_str++;					// 指向下一字符数据
      disp_cx++;
      if(disp_cx>15) disp_cy++;				// 指向下一显示行
   }
}

/***********************************************************************
* 名称:LCM_DispWord()
* 功能:汉字显示输出。
* 入口参数:disp_cy 	显示起始行(0-7)
*	   disp_cx      显示起始列(0-15)
* 出口参数:无
* 注:支持显示字符0-9、A-Z、a-z及空格,字符显示格式为5*7,模为8*8,所以屏幕显示
*     为8*16(共8行,每行16个字符)。
***********************************************************************/
uint8 code  WORD_TAB1[256] ={ //--	文字: 上--
		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,
		0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
		0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,
		0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00,

//uint8 code  WORD_TAB20[32] ={ //--	文字: 大--
	0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,
	0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
	0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,
	0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00,

//uint8 code  WORD_TAB30[32] ={ //--	文字: 机--
	0x08,0x08,0xC8,0xFF,0x48,0x88,0x08,0x00,
	0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,
	0x04,0x03,0x00,0xFF,0x00,0x41,0x30,0x0C,
	0x03,0x00,0x00,0x00,0x3F,0x40,0x78,0x00,

//uint8 code  WORD_TAB40[32] ={ //--	文字:自--
	0x00,0x00,0x00,0xF8,0x48,0x48,0x4C,0x4B,
	0x4A,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
	0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,
	0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00,

//uint8 code  WORD_TAB50[32] ={ //--	文字: 学--
	0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,
	0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
	0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,
	0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,


///uint8 code  WORD_TAB60[32] ={ //--	文字: 院--
	0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,
	0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00,
	0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,
	0x01,0x01,0x7E,0x81,0x81,0x81,0xF1,0x00
	};

uint8 code  WORD_TAB2[64] ={ //--  文字:  电  --
  0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,
  0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
  0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,
  0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00,

//uint8 code  WORD_TAB80[32] ={ //--  文字:  压  --
  0x00,0x00,0xFE,0x02,0x42,0x42,0x42,0x42,
  0xFA,0x42,0x42,0x42,0x62,0x42,0x02,0x00,
  0x20,0x18,0x27,0x20,0x20,0x20,0x20,0x20,
  0x3F,0x20,0x21,0x2E,0x24,0x20,0x20,0x00,
};


void  LCM_DispWord(uint8 disp_cy, uint8 disp_cx,uint8 code *pchardata)
{	unsigned char i,j;
	uint8  code  *pchartempdata;	
  	unsigned char temp_cx,temp_cy;
	disp_cy = disp_cy&0x07;				// 参数过滤
    disp_cx = disp_cx&0x0f;	
	
	for(j=0;j<4;j++)
	{	
		pchartempdata = pchardata + j*8;
	    temp_cx = disp_cx+j%2;
		temp_cy = disp_cy+j/2;
 		if( (temp_cx&0x08) == 0 )				// 选择液晶控制芯片(即CS1--控制前8个字符,CS2--控制后8个字符)
	   {
   		  i = temp_cx<<3;
	      LCM_Wr1Command(LCM_ADDRSTRX+i);			// 设置当前列地址,即列
    	  LCM_Wr1Command(LCM_ADDRSTRY+temp_cy);		// 设置当前页地址,即行
	      
    	  for(i=0; i<5; i++);
	   	  for(i=0; i<8; i++)
	      {  LCM_Wr1Data(*pchartempdata);			// 发送数据									*/
    	     pchartempdata++;
	      }
          for(i=0; i<5; i++);
       }
	   else
	   {  i = (temp_cx&0x07)<<3;				// 若Y>7,则选取用CS2并且地址值要先减去8,再乘以8
    	  LCM_Wr2Command(LCM_ADDRSTRX+i);
	      LCM_Wr2Command(LCM_ADDRSTRY+temp_cy);		// 设置当前页地址,即行
      
    	  for(i=0; i<5; i++);
		  for(i=0; i< 8; i++)
	      {  LCM_Wr2Data(*pchartempdata);			// 发送数据									*/
    	     pchartempdata++;
	      }
          for(i=0; i<5; i++);
    	}
   }
}

void  LCM_DispWords(uint8 disp_cy, uint8 disp_cx)
{
      uint8 i,temp_cx,temp_cy;
	  uint8  code *pchardata;
	  pchardata = &WORD_TAB1[0];
	  temp_cx = disp_cx;
	  temp_cy = disp_cy;
	  for(i = 0;i<8;i++)
	  {	
	  	temp_cx = disp_cx + 2*(i%8);
	  	temp_cy = temp_cy&0x07;				// 参数过滤
	    temp_cx = temp_cx&0x0f;	
    	LCM_DispWord(temp_cy, temp_cx, pchardata); 	// 显示字符
		pchardata = pchardata + 32;   	    					// 指向下一字符数据
  	   }
	   temp_cx = 0;
	   pchardata = &WORD_TAB2;
	   for(i = 0; i<2;i++)
	   {
	   	temp_cx = 2*i;
	   	temp_cy = disp_cy + 2;
		temp_cy = temp_cy&0x07;				// 参数过滤
	    temp_cx = temp_cx&0x0f;	
    	LCM_DispWord(temp_cy, temp_cx, pchardata);
		pchardata = pchardata + 32;
		}
}
   



⌨️ 快捷键说明

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