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

📄 lcd.c

📁 str71arm平台下的sed1335驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
	}
}

/**************************************************************************
函数名称: void DispEnter(u8 x, u8 y)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.12.25       
函数功能说明:显示回车键图标
输入参数:x,y为显示位置
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void DispEnter(u8 x, u8 y)
{
	u8 ii,m;
	u16 Sch1,Sch2;
	u8 enter_temp[32];
	
	ReadFontData(enter_temp,EnterKey,32);
	
	for(m=0;m<2;m++)				//每行共为两页
	{
		Sch1 = x+(15-2*y-m)*160;	//更新显示数据地址
		Sch2 = 16*m;				//共32个字节的点阵数据
		for(ii=0;ii<16;ii++)		//每个汉字为16列
		{
			Temp_LcdBuffer[Sch1+ii] =  enter_temp[Sch2+ii];	//点阵数据取反放入缓冲区
		}
	}
}

/**************************************************************************
函数名称: void DispBack(u8 x, u8 y)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.12.25       
函数功能说明:显示退回键图标
输入参数:x,y为显示位置
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void DispBack(u8 x, u8 y)
{
	u8 ii,m;
	u16 Sch1,Sch2;
	u8 backtemp[32];
	
	ReadFontData(backtemp,BackKey,32);
	
	for(m=0;m<2;m++)				//每行共为两页
	{
		Sch1 = x+(15-2*y-m)*160;	//更新显示数据地址
		Sch2 = 16*m;				//共32个字节的点阵数据
		for(ii=0;ii<16;ii++)		//每个汉字为16列
		{
		
			Temp_LcdBuffer[Sch1+ii] =  backtemp[Sch2+ii];	//点阵数据取反放入缓冲区

		}
	}
}

/**************************************************************************
函数名称: void FlushRec(y1,y2)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.11.11       
函数功能说明:刷新部分区域内的显示,从行y1到y2(包括y2)的数据刷新,列方向从0-159  
输入参数:y1,y2,取值在0-7之间,并保证y1<=y2
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void FlushRec(u8 y1,u8 y2)
{
	u8 ii,jj,m;
	u16 Sch1;
	
	for(ii=y1;ii<=y2;ii++)	         //在Y方向,从Y1开始到Y2结束,共Y2-Y1行
	{
		for(m=0;m<2;m++)	         //每行共为两页
		{
			Sch1 = 160*(15-2*ii-m);	 //更新数据的地址
			LcdGotoxy(0,15-2*ii-m);
			S1D15E05_Command(DISPDATAWRITE);
			for(jj=0;jj<160;jj++)
			{
				S1D15E05_Data(Temp_LcdBuffer[Sch1+jj]);//更新待显示数据
			}
		}
	}	
}

/**************************************************************************
函数名称: void LcdClreol(u8 x,u8 y)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.10.25       
函数功能说明:清除LCD当前行中从x,y开始到行尾的显示内容  
输入参数:x,y为起始坐标
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void LcdClreol(u8 x,u8 y)
{
	u8 ii,jj;
	u16 Sch1;
	
	for(ii=0;ii<2;ii++)					//每行共为两页
	{
		Sch1 = 160*(15-2*y-ii);			//更新数据的地址
		LcdGotoxy(x,15-2*y-ii);
		S1D15E05_Command(DISPDATAWRITE);
		for(jj=x;jj<160;jj++)
		{
			S1D15E05_Data(0x0);			//显示清零
			Temp_LcdBuffer[Sch1+jj] = 0x0;
		}
	}
}

/**************************************************************************
函数名称: void LcdClreol(u8 x,u8 y)
函数版本: 1.00  
作者:     ysh
创建日期: 2007.4.13      
函数功能说明:清除LCD当前行的显示内容(黑底白字)  
输入参数:y为行坐标
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void LcdSeteol(u8  y)
{
	u8  ii,jj;
    u16 Sch1;
        
    for(ii=0;ii<2;ii++)                //每行共为两页
    {
    	Sch1 = 160*(15-2*y-ii);        //更新数据的地址
        LcdGotoxy(16,15-2*y-ii);
        S1D15E05_Command(DISPDATAWRITE);
        for(jj=16;jj<128;jj++)
        {
        	S1D15E05_Data(0xff);       //显示清零
            Temp_LcdBuffer[Sch1+jj] = 0xff;
        }
    }
}


/**************************************************************************
函数名称: void LcdClrBlock(u8 x1,u8 x2,u8 y)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.10.25       
函数功能说明:清除LCD当前行中从x,y开始到y行尾的显示内容  
输入参数:x1,y1为起始坐标,y为终止行坐标
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void LcdClrBlock(u8 x1,u8 x2,u8 y)
{
	u8 ii,jj;
	u16 Sch1;
	
	for(ii=0;ii<2;ii++)					//每行共为两页
	{
		Sch1 = 160*(15-2*y-ii);			//更新数据的地址
		LcdGotoxy(x1,15-2*y-ii);
		S1D15E05_Command(DISPDATAWRITE);
		for(jj=x1;jj<x2;jj++)
		{
			S1D15E05_Data(0x0);			//显示清零
			Temp_LcdBuffer[Sch1+jj] = 0x0;
		}
	}
}

/**************************************************************************
函数名称: void LcdClreRow(u8 y1,u8 y2)
函数版本: 1.00  
作者:     ysh
创建日期: 2004.6.25       
函数功能说明:清除LCD行中从y1,y2开始到行尾的显示内容,  
输入参数:y1,y2为起始坐标
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void LcdClreRow(u8 y1,u8 y2)
{
	u8 ii,jj,m;
	u16 Sch1;
	
	for(ii=y1;ii<=y2;ii++)	         //在Y方向,从Y1开始到Y2结束,共Y2-Y1行
	{
		for(m=0;m<2;m++)	         //每行共为两页
		{
			Sch1 = 160*(15-2*ii-m);	 //更新数据的地址
			LcdGotoxy(0,15-2*ii-m);
			S1D15E05_Command(DISPDATAWRITE);
			for(jj=0;jj<160;jj++)
			{
				S1D15E05_Data(0x0);  //更新待显示数据
				Temp_LcdBuffer[Sch1+jj] = 0x0;
			}
		}
	}	
}

/**************************************************************************
函数名称: void fDispHZ16(QM,WM,x,y,attr)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.10.25       
函数功能说明:用于取汉字的16*16字库及显示汉字字符    
输入参数:QM,WM为汉字的区位码,x,y为显示起点坐标,x在0-159,y在0-7
	      attr为显示属性,决定是正写还是反写
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
**************************************************************************/
void fDispHZ16(u8 QM,u8 WM,u8 x,u8 y,u8 attr)
{
	u8 ii,m,Sch2;
	u16 Sch1;
	u32 FValue,tempL;
	u8 temp[32];

	if(QM==0xAC && WM==0x42)       //珺
	{
		ReadFontData(temp,jun,32);
		for(ii=0;ii<32;ii++)
		{
		    
		    DispDotBuf[ii]=temp[ii];	

		}	
	}
	else if(QM==0xFC && WM==0x87)  //鼑
	{
		ReadFontData(temp,ding,32);
		for(ii=0;ii<32;ii++)
		{
		    
		    DispDotBuf[ii]=temp[ii];	
		}	
	}
	else
	{
		tempL = 96*16+OFFSETFONT;		    //前面有96个AscII码,占96*16个字节,且据要求偏移0x10000
		FValue=(QM-161)*94+(WM-161);
		
#if 0	
		FValue=FValue*32+tempL;			   //汉字内码在字库中的偏移量
#else
		FValue <<= 5;
		FValue += tempL;
#endif

		ReadFontData(DispDotBuf,FValue,32);//汉字点阵数据32个字节读取到DispDotBuf缓冲内	//need added
		
	}
	for(m=0;m<2;m++)					//每行共为两页
	{
		Sch1 = x+(15-2*y-m)*160;		//更新显示数据地址
		Sch2 = 16*m;					//共32个字节的点阵数据
		for(ii=0;ii<16;ii++)			//每个汉字为16列
		{
			if(attr==NORVIEW)			//正常显示汉字
			{
				Temp_LcdBuffer[Sch1+ii] = DispDotBuf[Sch2+ii];	//点阵数据取反放入缓冲区
			}
			else if(attr==REVVIEW)		//反向显示汉字
			{
				Temp_LcdBuffer[Sch1+ii] =  ~DispDotBuf[Sch2+ii];
			}
		}
	}
}


/**************************************************************************
函数名称: void fDispAsc16(ascCode,x,y,attr)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.10.25       
函数功能说明:用于取ASCII码的8*16字库及显示ASCII码字符    
输入参数:ascCode为ASCII码的内码,x,y为显示起点坐标,attr为显示属性
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void fDispAsc16(u8 ascCode,u8 x,u8 y,u8 attr)
{
	u8 ii,m,Sch2;
	u16 Sch1;
	u32 FValue; 
	
	FValue = (ascCode-32)*16+OFFSETFONT;	//前面32个AscII码已删除了,且据要求偏移0x10000
	ReadFontData(DispDotBuf,FValue,16);	    //AscII点阵数据在DataFlash的前几页内  //need added
	for(m=0;m<2;m++)			            //每行共为两页
	{
		Sch1 = x+(15-2*y-m)*160;			//更新显示数据地址
		Sch2 = 8*m;							//共16个字节的点阵数据
		for(ii=0;ii<8;ii++)			        //每个ASCII码为8列
		{
			if(attr==NORVIEW)				//正常显示汉字
			{
				Temp_LcdBuffer[Sch1+ii] =  DispDotBuf[ii+Sch2];	    //点阵数据放入缓冲区
			}
			else if(attr==REVVIEW)  		//反向显示汉字
			{
				Temp_LcdBuffer[Sch1+ii] =  ~DispDotBuf[ii+Sch2];	//点阵数据取反放入缓冲区
			}
		}
	}
}

/**************************************************************************
函数名称: void LcdPrintf(str,x,y,attr)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.10.25       
函数功能说明:用于显示Str指向的字符串中所有的字符,包括中文和ASCII码
输入参数:Str为指向字符串的指针,x,y为显示起点坐标,attr为显示属性
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void LcdPrintf(char *str,u8 x,u8 y,u8 attr)
{
	u8 i;
	i = 0;
		
	while(str[i]!=0)			//当没有到字符串的结束标志0时
	{
		if((str[i] & 0x80) !=0)	//该字符为汉字时
		{
			if(x>144)			//在X方向上,超过144列就自动下移一行
			{
				y+=1;
				x=0;
			}
			if(y>7)				//超出范围就退出
			{
				break;
			}
			fDispHZ16(str[i],str[i+1],x,y,attr);//调用显示汉字函数
			i+=2;                        
			x+=16;  							//汉字占16列
		}
		else					//是ASCII码时
		{
			if(x>152)			//在X方向上,超过144列就自动下移一行	
			{
				y+=1;
				x=0;
			}
			if(y>7)				//超出范围就退出
			{
				break;
			}
			fDispAsc16(str[i],x,y,attr);	   //调用显示ASCII码函数
			i++;
			x+=8;				//ASCII码占8列
		}
	}   
	PositionX = x;				//记录显示完字符串后的坐标值
	PositionY = y; 
}

/**************************************************************************
函数名称: void LeftDisplay(char *str,u8 attr,u8 choice,u8 CDMA)
函数版本: 1.00  
作者:     yht
创建日期: 2007.4.19       
函数功能说明:在左角固定的位置写入汉字或CDMA信号量
输入参数:*str为汉字
		  attr为汉字正反显示属性,可为 NORVIEW(正常显示字符)REVVIEW(反向显示字符)
		  choice为汉字(HANZI)和CDMA信号量选择(SIGNAL)
          CDMA为信号量强弱选择参数 
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void LeftDisplay(char *str,u8 attr,u8 choice,u8 CDMA)
{
	u8 ii,jj;
	u16 Sch1;

	for(ii=14;ii<16;ii++)                  //在Y方向共16行
	{
		Sch1 = 160*ii;	                  //在X方向共160列,变化一行就偏移160。
		for(jj=0;jj<32;jj++)
		{
			Temp_LcdBuffer[Sch1+jj] = 0x0;//缓冲区清零	
		}
	}
	if(choice)
	{
		LcdPrintf(str,0,0,attr);
	}
	else
	{
		DispCDMA(0,0,CDMA);
	
	}

}


/**************************************************************************
函数名称: void RightDisplay( char *str,u8 attr)
函数版本: 1.00  
作者:     yht
创建日期: 2007.4.19       
函数功能说明:在右角固定的位置写入汉字
输入参数:*str为汉字
		  attr为汉字正反显示属性,可为 NORVIEW(正常显示字符)REVVIEW(反向显示字符)
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void RightDisplay( char *str,u8 attr)
{
	u8 ii,jj;
	u16 Sch1;

	for(ii=14;ii<16;ii++)                  //在Y方向共16行
	{
		Sch1 = 160*ii;	                  //在X方向共160列,变化一行就偏移160。
		for(jj=128;jj<160;jj++)
		{
			Temp_LcdBuffer[Sch1+jj] = 0x0;//缓冲区清零	
		}
	}
	LcdPrintf(str,128,0,attr);
	
}

/**************************************************************************
函数名称: void MenuDisplay(char *str ,u8 attr, u8 choice, u8 CDMA)
函数版本: 1.00  
作者:     yht
创建日期: 2007.4.19       
函数功能说明:在左右角固定的四个位置写入汉字或CDMA信号量
输入参数:
		  *str为汉字
		  attr为汉字正反显示属性,可为 NORVIEW(正常显示字符)REVVIEW(反向显示字符)
		  choice为汉字(HANZI)和CDMA信号量选择(SIGNAL)
          CDMA为信号量强弱选择参数 
          没有用到的参数可写为NULL
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void MenuDisplay( char *str ,u8 attr, u8 choice, u8 CDMA)
{
	LeftDisplay(str,attr,choice,CDMA);
	FlushRec(0,0);
}

/**************************************************************************
函数名称: void DispCursor(void)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.11.10       
函数功能说明:待输入数据的光标提示
输入参数:无
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空

⌨️ 快捷键说明

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