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

📄 sed1335.c

📁 采用单片机控制液晶
💻 C
📖 第 1 页 / 共 2 页
字号:
{
   unsigned int i;
   unsigned char status;
   xdata unsigned char rev[1000];
   LCD_WriteCommand(LCD_MEM_RD);
   for(i=0;i<LEN;i++)
   LCD_ReadData(rev[i]);
   LCD_ReadState(status);
   return (rev);
}
/******************************************************************************************
* 名称:LCD_PutPix(unsigned int X,unsigned int Y)
* 功能:在指定的位置上显示点
* 入口参数:
* 出口参数:
*******************************************************************************************/
void LCD_PutPix(unsigned int X,unsigned int Y)	  //X,Y都是从0开始
{
	unsigned int addr;
	unsigned char temp;
	addr = Disp_Base_Addr + Y*(GUI_LCD_XMAX>>3) + (X>>3);
	SED1335_CsRw(addr);
	LCD_WriteCommand(LCD_MEM_RD);
	LCD_ReadData(temp);
	temp = temp|(unsigned char)(1<<(7-(X%8)));						 //
	SED1335_CsRw(addr);
	LCD_WriteCommand(LCD_MEM_WR);
	LCD_WriteData(temp);

}
/******************************************************************************************
* 名称:LCD_PutChar(unsigned int X,unsigned int Y,unsigned char pchar)
* 功能:在指定的位置上显示字符
* 入口参数:
* 出口参数:
*******************************************************************************************/
void LCD_PutChar(unsigned int X,unsigned int Y,unsigned char pchar)
{
   unsigned int addr;
   addr = Disp_Base_Addr + Y*(GUI_LCD_XMAX>>3) + (X>>3);
   SED1335_CsRw(addr);
   LCD_WriteData(pchar);

}
/*****************************************************************************************
* 名称:LCD_PutHZ(unsigned int X,unsigned int Y,unsigned int p_code)
* 功能:在指定的位置上显示汉字
* 入口参数:
* 出口参数:
******************************************************************************************/
void LCD_PutHZ(unsigned int X,unsigned int Y,unsigned int p_code)
{
   unsigned int addr;
   addr = Disp_Base_Addr + Y*(GUI_LCD_XMAX>>3) + (X>>3);
   SED1335_CsRw(addr);

}
/******************************************************************************************
* 名称:void LCD_CLS(unsigned int addr_begin,unsigned int len)
* 功能:清除指定位置的指定长度的区域的空间
* 入口参数:
* 出口参数:
******************************************************************************************/
void LCD_CLS(unsigned int addr_begin,unsigned int len)
{
  unsigned int i;
  LCD_WriteCommand(LCD_CSR_DIR);
  LCD_WriteCommand(LCD_CSR_WR);
  LCD_WriteData(GET_LOW_BYTE(addr_begin));
  LCD_WriteData(GET_HIG_BYTE(addr_begin));
  LCD_WriteCommand(LCD_MEM_WR);

  for(i=0;i<len;i++)
  {
  	LCD_WriteData(0x00);
    
  }

}
/******************************************************************************
* 名称:LCD_Wr_Area(unsigned char X,unsigned char Y,unsigned char Height,unsigned char Length,unsigned char *ptr,unsigned char form)
* 功能:在指定的空间写入新的数据块 其中 X<40;Y<240 Length<40, Height<240
* 入口参数:
* 出口参数:
*******************************************************************************/
void LCD_Wr_Area(unsigned char X,unsigned char Y,unsigned char Height,unsigned char Length,unsigned char *ptr,unsigned char form)
{
	unsigned int addr;
    int k=0;
	unsigned char temp; 
	switch (form&0x01)
	{
		case 0:		 					//点的排列顺序为从上到下 从左到右的方式
		{
			for( k=0;k<Length;k++) 
    		{

   				addr = Disp_Base_Addr + Y*(GUI_LCD_XMAX>>3) + X;
   				SED1335_CsRw(addr);
				SED1335_CspDir(down);
				SED1335_WMrite(&ptr[k*Height],Height);
				X=X+1; 
				if(X==((GUI_LCD_XMAX>>3)+1)) 
				{X=0;Y=Y+Height;}					//如果超出屏幕的右边界,会另起一行
			}
		break;
		}
		case 1:							 //点的排列顺序为从左到右 从上到下的方式
		{
			if((X+Length)>(GUI_LCD_XMAX>>3))
   			{
		   	for( k=0;k<Height;k++) 
    		{
				temp = 	(GUI_LCD_XMAX>>3)-X;
				addr = Disp_Base_Addr + Y*(GUI_LCD_XMAX>>3) + X;
   				SED1335_CsRw(addr);
				SED1335_CspDir(right);
				SED1335_WMrite(&ptr[k*Length],temp);
				addr = Disp_Base_Addr + (Y+Height)*(GUI_LCD_XMAX>>3);
   				SED1335_CsRw(addr);
				SED1335_CspDir(right);
				SED1335_WMrite(&ptr[k*Length+temp],X-temp);
				Y=Y+1;

			} 
			}
			else
			{
			
			  	for( k=0;k<Height;k++) 
    		{
				addr = Disp_Base_Addr + Y*(GUI_LCD_XMAX>>3) + X;
   				SED1335_CsRw(addr);
				SED1335_CspDir(right);
				SED1335_WMrite(&ptr[k*Length],Length);
				Y=Y+1;

			} 
			
			
			
			}
		
		
		}
 }
}
/******************************************************************************
* 名称:DelayMs(unsigned int Time)
* 功能:延时程序
* 入口参数:
* 出口参数:
*******************************************************************************/
void DelayMs(unsigned int Time)
{
   unsigned int i;
   while(Time--)
   for(i=1000*SYS_TIME;i>0;i--);



}
/******************************************************************************** 
滚动演示程序段 
使用SED1335 等的屏幕滚动功能, 可以实现逐点滚动的显示效果. 这个效果的实现, 在 
水平方向是依赖于指令HDOT SET的支持. 我们可以在下面的演示程序中看到HDOT SET指 
令的使用方法. 
*********************************************************************************/ 
// 第一显示区向左滚动 
void RollLeft( void ) { 

unsigned char tempI,jj=25; 
unsigned int iTemp=0; 

while(jj--) { 

for(tempI=0;tempI<8;tempI++) { 
LCD_WriteCommand(LCD_DOT_DIR); 							// 写入HDOT SET 指令 
LCD_WriteData( tempI ); 								// 写入参数 
DelayMs(4); 											// 调延时子程序 
} 

iTemp ++; 
LCD_WriteCommand( LCD_SCR_OLL ); 						// 设定显示区域起始地址 
LCD_WriteData( (unsigned char)(iTemp & 0xff) ); 		// 写入参数 
LCD_WriteData( (unsigned char)(iTemp /256) ); 			// 写入参数 
} 
} 


// 第一显示区向右滚动 
void Rollright( void ) { 

unsigned char tempI,jj=25; 
unsigned int iTemp=24; 
														// return; 
														// WriteCommand( DispOn ); // 写入指令DISP ON/OFF代码,后续参数: 
														// WriteData( 0x44 ); // 00 00 01 00显示1区开显示,其余层关闭 

while(jj--) { 
tempI = 8; 
LCD_WriteCommand( LCD_SCR_OLL ); 						// 显示区域(起点)设置 
LCD_WriteData( (unsigned char)(iTemp & 0xff) ); 		// 写入参数 
LCD_WriteData( (unsigned char)(iTemp /256) ); 			// 写入参数 
while( tempI-- ) { 
LCD_WriteCommand( LCD_DOT_DIR ); 						// 写入HDOT SET 指令 
LCD_WriteData( tempI ); 								// 写入参数 
DelayMs(4); 											// 调延时子程序 
} 

iTemp--; 
} 
} 

// 第一显示区向下滚动 
void RollDown( void ) { 

unsigned char jj = 50; 									// 演示32次 
unsigned int iTemp=paraP9*50; 

														// WriteCommand( DispOn ); // 写入指令DISP ON/OFF代码,后续参数: 
														// WriteData( 0x44 ); // 00 00 01 00显示1区开显示,其余层关闭 

while(jj--) { 
iTemp -= paraP9; 
LCD_WriteCommand( LCD_SCR_OLL ); 						// 设定显示区域起始地址 
LCD_WriteData( (unsigned char)(iTemp & 0xff) ); 		// 写入参数 
LCD_WriteData( (unsigned char)(iTemp /256) ); 			// 写入参数 
DelayMs(4); 											// 调延时子程序 
} 
LCD_WriteCommand( LCD_SCR_OLL ); 						// 设定显示区域起始地址 
LCD_WriteData( 0 ); 									// 写入参数 
LCD_WriteData( 0 ); 									// 写入参数 
DelayMs(30); 
} 

// 第一显示区向上滚动 
void RollUp( void ) { 

unsigned int iTemp=0; 
unsigned char jj = 50; 								// 演示30次 

// WriteCommand( DispOn ); // 写入指令DISP ON/OFF代码,后续参数: 
// WriteData( 0x44 ); // 00 00 01 00显示1区开显示,其余层关闭 

while(jj--) { 

iTemp += paraP9; 

LCD_WriteCommand( LCD_SCR_OLL ); 						// 设定显示区域起始地址 
LCD_WriteData( (unsigned char)(iTemp & 0xff) ); 		// 写入参数 
LCD_WriteData( (unsigned char)(iTemp /256) ); 			// 写入参数 

DelayMs(3); // 调延时子程序 
} 
}

⌨️ 快捷键说明

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