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

📄 drv_lcm12864.c

📁 uCOS2 for 51系列
💻 C
📖 第 1 页 / 共 3 页
字号:
		tdata = -ddata;
	
	tdata = ((INT16U)tdata<<(15-offset))>>(15-offset);
	tmp = 0x0001<<offset;
	
	tdata *= 1000;
	tdata /= tmp;
	
	for(i = 100;i;i /=10)
	{
		tmp = tdata / i;
		tmp %= 10;
		tpdata = (INT8U*)ASCII_CODE[tmp+16];
		LcmLoadData(tx, ty, tpdata , 6);
		tx += 6;
	}	
}

/*********************************************************************************************************
** 函数名称: LcmDispHEX()
** 功能描述: 在LCM指定位置显示一十六进制数
**
** 输 入: 	x : 指定的地址
**		   	y : 指定的行
**         	ddata : 将要写入的数据
**			anti : 反白标记
**		   
** 输 出: 无
** 全局变量: 无
** 调用模块: LcmSendCmd(),LcmSendData()
**
** 作 者: 龚树强
** 日 期: 2005年4月5日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void  LcmDispHEX(INT8U x, INT8U y, INT8U Data,INT8U anti)  	reentrant
{	
	INT8U 	temp;
	INT8U	tx;
	INT8U	ty;
	INT8U* 	tpdata;
	
	tx = x;
	ty = y;

	flag_anti_disp = anti;

	Data &= 0x00FF;
	temp = Data >> 4;

	if(temp >0x09)
		temp = temp + 'A' - '0' - 10;
	 
	tpdata = (INT8U*)ASCII_CODE[temp+16];
	LcmLoadData(tx, ty, tpdata , 6);
				
	temp = Data & 0x0F;

	if(temp >0x09)
		temp = temp + 'A' - '0' - 10;

	tpdata = (INT8U*)ASCII_CODE[temp+16];
	LcmLoadData(tx+6, ty, tpdata , 6);
}


/*********************************************************************************************************
** 函数名称: LcmDispBar()
** 功能描述: 在LCM指定位置显示进度条
**
** 输 入: ddata: 进度条的长度
**		   
** 输 出: 无
** 全局变量: 无
** 调用模块: LcmSendCmd(),LcmSendData()
**
** 作 者: 龚树强
** 日 期: 2005年4月5日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/*        void  LcmDispBar( INT8U ddata)
{
	INT8U x;	
	INT16U temp;

	temp= ddata*124;
	temp>>=8;
	temp+=2;

	LCM_SET_Y1(3);
	LCM_SET_Y0(3);
		
    LCM_SET_Z0(0);
	LCM_SET_Z1(0);
			
	LCM_SET_X0(1);
    LcmSendData0(0X7E);
	for(x=2 ; x < 64 ; x++)                
                                                                
    {
			if(x<temp)
			{
					LCM_SET_X0(x);
              		LcmSendData0(0XFF);                 
           	} 
			else if(x==temp)
			{
					LCM_SET_X0(x);
              		LcmSendData0(0X7E);                 
           	} 
			else
			{
					
					LCM_SET_X0(x);
              		LcmSendData0(0X81); 
			}
    }
	for(x=64 ; x < 126 ; x++)                
                                                                
    {
			if(x<temp)
			{
					LCM_SET_X1(x-64);
              		LcmSendData1(0XFF);                 
           	}
			else if(x==temp)
			{
					LCM_SET_X1(x-64);
              		LcmSendData1(0X7E);                
           	} 
			else
			{
					
					LCM_SET_X1(x-64);
              		LcmSendData1(0X81); 
			}
    }
	LCM_SET_X1(62);
    LcmSendData1(0X7E);   
    
}

*/
/*********************************************************************************************************
** 函数名称: LcmDispChnChar()
** 功能描述: 在LCM指定位置显示一个中文字符
**
** 输 入: 	x : 指定的地址
**		   	y : 指定的行
**         	pData : 将要写入的数据开始地址
**			anti  : 反白标记
** 输 出: 无
** 全局变量: 无
** 调用模块: LcmLoadData()
**
** 作 者: 龚树强
** 日 期: 2005年4月5日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

 /*       void  LcmDispChnChar(INT8U x, INT8U y, INT8U *pData, INT8U anti)  	reentrant
{	
	INT8U	tx;
	INT8U 	ty;
	INT8U* 	tpdata;

	tx = x;
	ty = y;
	tpdata = pData;
	
	LcmLoadData(tx, ty, tpdata , 16);

	ty++;
	tpdata += 16;

	LcmLoadData(tx, ty, tpdata, 16);
}	*/
        void  LcmDispChnChar(INT8U x, INT8U y, INT8U *pData, INT8U anti)  	reentrant
{	
	idata INT8U 	i;
	INT8U	tx;
	INT8U 	ty;
	INT8U	*tpdata;

	idata INT8U	tmp0,tmp1,j;

	tx = x;
	ty = y;
	tpdata = pData;
	
	flag_anti_disp = anti;

	LCM_SET_Y0(ty);
	LCM_SET_Y1(ty);
		
	LCM_SET_Z0(0);
	LCM_SET_Z1(0);
			
	LCM_SET_X0(tx);
	for( ; (tx < x+16)&&(tx<64) ; tx++)
	{        
		for(j=8,tmp1=0,tmp0=*tpdata;tmp0&&(j--);tmp0>>=1)
		{	
			tmp1<<=1;
			tmp1|=(tmp0&0x01);
		}

		LcmSendData0(tmp1<<j); 					/* 显示一个字符 */
		tpdata+=2;
	}   					
    if (tx > 63)                    					/* 有效的列号   */
   	{
		LCM_SET_X1(tx-64);
			
		for( ; (tx < x+16)&&(tx<128) ; tx++)                
		{
			for(j=8,tmp1=0,tmp0=*tpdata;tmp0&&(j--);tmp0>>=1)
			{	
				tmp1<<=1;
				tmp1|=(tmp0&0x01);
			}
	
			LcmSendData1(tmp1<<j); 					/* 显示一个字符 */
			tpdata+=2;
		}
   	}

	tx = x;
	ty = y+1;
	tpdata = pData+1;

	LCM_SET_Y0(ty);
	LCM_SET_Y1(ty);
	LCM_SET_X0(tx);

	for( ; (tx < x+16)&&(tx<64) ; tx++)                
	{        
		for(j=8,tmp1=0,tmp0=*tpdata;tmp0&&(j--);tmp0>>=1)
		{	
			tmp1<<=1;
			tmp1|=(tmp0&0x01);
		}

		LcmSendData0(tmp1<<j); 					/* 显示一个字符 */
		tpdata+=2;
	}   					
    if (tx > 63)                    					/* 有效的列号   */
   	{
		LCM_SET_X1(tx-64);
			
		for( ; (tx < x+16)&&(tx<128) ; tx++)                
		{
			for(j=8,tmp1=0,tmp0=*tpdata;tmp0&&(j--);tmp0>>=1)
			{	
				tmp1<<=1;
				tmp1|=(tmp0&0x01);
			}
	
			LcmSendData1(tmp1<<j); 					/* 显示一个字符 */
			tpdata+=2;
		}
   	}
}	


/*********************************************************************************************************
** 函数名称: LcmClr()
** 功能描述: 清除LCM的指定区域
**
** 输 入: 	x : 指定的地址
**		   	y : 指定的行
**         	dx : 偏置列数
**			dy : 偏置行数
**			anti  : 反白标记
** 输 出: 无
** 
** 输 出: 无
** 全局变量: 无
** 调用模块: LcmDispStr()
**
** 作 者: 龚树强
** 日 期: 2005年4月5日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

        void LcmClr(INT8U x,INT8U y,INT8U dx,INT8U dy,INT8U anti)		reentrant
{
    INT8U 	tx;
    INT8U	ty;
	INT8U 	tdx;
	INT8U	tdy;
	
	tx = x;
	ty = y;
	tdx = x + dx;
	tdy = y + dy;

	flag_anti_disp = anti;
    
    for(;(ty<tdy)&&(ty<8);ty++)
	{
		LCM_SET_Y0(ty);
       	LCM_SET_X0(tx);
		for(;(tx<tdx)&&(tx<64);tx++)
			LcmSendData0(0x00);
		if(tx<tdx)
		{
			LCM_SET_Y1(ty);
        	LCM_SET_X1(tx-64);
			for(;(tx<tdx)&&(tx<128);tx++)
				LcmSendData1(0x00);
		}
		tx=x;
   	}
}


/*********************************************************************************************************
** 函数名称: LcmDispChar()
** 功能描述: 从LCM指定地址处写多个字节数据
**
** 输 入: 	x : 指定的地址
**		   	y : 指定的行
**         	pData : 将要写入的数据开始地址
**			anti  : 反白标记
** 输 出: 无
** 全局变量: 无
** 调用模块: LcmLoadData();
**
** 作 者: 龚树强
** 日 期: 2005年4月5日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

        void  LcmDispChar(INT8U x,INT8U y, INT8U *pData ,INT8U anti)   	reentrant
{	
   	INT8U* 	tpdata;
   	INT8U*	tdata;
	idata 	INT8U 	i;
	INT8U 	tx;
	INT8U	ty;

	tx = x;
	ty = y;
	
	tpdata = pData;

	flag_anti_disp = anti;

	for(i=0;((*tpdata)!='\0')&&(i<22)&&((i*6+tx+6)<128);i++)
	{
		tdata = (INT8U *)(ASCII_CODE + (*tpdata) - 0x20);
		LcmLoadData((tx+i*6), ty, tdata , 6);	
		tpdata++;
	}
}



/**********************end****************************************/

⌨️ 快捷键说明

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