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

📄 drv_lcm12864.c

📁 uCOS2 for 51系列
💻 C
📖 第 1 页 / 共 3 页
字号:

		INT8U LcmReadData3(void)  	reentrant               
{												  
	idata INT8U	buf;											  
//    LcmDelay();                                
	INPUT(LCM_DATA_3,buf);
}                                                 


/*********************************************************************************************************
** 函数名称: LcmBL_ON/OFF
** 功能描述: LCM背光开/关
**
** 输 入: 
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 龚树强
** 日 期: 2005年4月5日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

		void	LcmBL0_Off(void)
{
	LCM_BL_state &= 0xFFFE;
	OUTPUT(LCM_BL_CNTL,LCM_BL_state);
}

		void	LcmBL0_On(void)
{
	LCM_BL_state |= 0x0001;
	OUTPUT(LCM_BL_CNTL,LCM_BL_state);
}
		void	LcmBL1_Off(void)
{
	LCM_BL_state &= 0xFFFD;
	OUTPUT(LCM_BL_CNTL,LCM_BL_state);
}

		void	LcmBL1_On(void)
{
	LCM_BL_state |= 0x0002;
	OUTPUT(LCM_BL_CNTL,LCM_BL_state);
}

/*********************************************************************************************************
** 函数名称: LcmLoadData()
** 功能描述: 在LCM指定位置显示一个字符
**
** 输 入: 	x : 指定的地址
**		   	y : 指定的行
**         	pData : 将要写入的数据开始地址
**			len  : 连续写入长度
** 输 出: 无
** 全局变量: 无
** 调用模块: LcmSendCmd(),LcmSendData()
**
** 作 者: 龚树强
** 日 期: 2005年4月5日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void  LcmLoadData(INT8U x,INT8U y,INT8U * ppdata,INT8U len)	 	reentrant
{	
	INT8U 	temp;
	INT8U 	tx;
	INT8U 	ty;
	INT8U*	tpdata;
	
	tx = x;
	ty = y;
	tpdata = ppdata;
	temp = len;

	temp += tx;

	LCM_SET_Y0(ty);
	LCM_SET_Y1(ty);
		
	LCM_SET_Z0(0);
	LCM_SET_Z1(0);
			
	LCM_SET_X0(tx);
	for( ; (tx < temp)&&(tx<64) ; tx++)                
		LcmSendData0(*(tpdata++));    					/* 显示一个字符 */
    if (tx > 63)                    					/* 有效的列号   */
   	{
		LCM_SET_X1(tx-64);
			
		for( ; (tx < temp)&&(tx<128) ; tx++)                
            LcmSendData1(*(tpdata++));         			/* 显示一个字符 */
   	}
}

/*********************************************************************************************************
** 函数名称: LcmGetData()
** 功能描述: 在LCM指定位置读取一个字符
**
** 输 入: 	x : 指定的地址
**		   	y : 指定的行
**         	pData : 将要写入的数据开始地址
**			len  : 连续写入长度
** 输 出: 无
** 全局变量: 无
** 调用模块: LcmSendCmd(),LcmSendData()
**
** 作 者: 龚树强
** 日 期: 2005年4月5日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void  LcmGetData(INT8U x,INT8U y,INT8U * ppdata,INT8U len)	 	reentrant
{	
	INT8U 	temp;
	INT8U 	tx;
	INT8U 	ty;
	INT8U*	tpdata;
	
	tx = x;
	ty = y;
	tpdata = ppdata;
	temp = len;

	temp += tx;

	LCM_SET_Y0(ty);
	LCM_SET_Y1(ty);
		
	LCM_SET_Z0(0);
	LCM_SET_Z1(0);
			
	LCM_SET_X0(tx);
	for( ; (tx < temp)&&(tx<64) ; tx++)                
		*(tpdata++) = LcmReadData0();    					/* 显示一个字符 */
    if (tx > 63)                    						/* 有效的列号   */
   	{
		LCM_SET_X1(tx-64);
			
		for( ; (tx < temp)&&(tx<128) ; tx++)                
            *(tpdata++) = LcmReadData1();         			/* 显示一个字符 */
   	}
}

/*********************************************************************************************************
** 函数名称: Lcm_Init()
** 功能描述: LCM初始化
**
** 输 入: 无
** 
** 输 出: 无
** 全局变量: 无
** 调用模块: LcmSendCmd(),LcmClr()
**
** 作 者: 龚树强
** 日 期: 2005年4月5日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

        void  Lcm_Init(void) 	reentrant
{
	
	LcmSendCmd0(0x3F);            		// 开始显示
	LcmSendCmd1(0x3F);            		// 开始显示
	
	LCM_SET_Z1(0);
    LCM_SET_Z0(0);
    
	LcmClr(0,0,128,8,LCM_NORMAL_DISP);                       // 清屏 

	DispSem = OSSemCreate(1);

}

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

	INT8U 	tx;
	INT8U 	ty;
	INT16S 	tdata;

	INT8U	bflag;
	INT8U	b0;

	tx = x ;
	ty = y ;
	tdata = ddata;

	bflag = 0;
	i = 10000;

	flag_anti_disp = anti;

	LcmClr(tx,ty,36,1,flag_anti_disp);

	if(tdata < 0)
	{
		b0 = 1;
		tdata = -tdata;
	}
	else
		b0 = 0;

	tx += 6;

	for(;i;)
	{
		temp = tdata / i;
		temp %= 10;

		if(temp || bflag)
		{
			if(!bflag)
			{
				bflag = 1;
				if(b0)
				{
					tx -= 6;
					tpdata = (INT8U*)ASCII_CODE[13];

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

			LcmLoadData(tx, ty, tpdata , 6);
			
		}
		tx += 6;
				
		i /=10;	
	}
	if(!bflag)
	{
		tx -= 6;
		tpdata = (INT8U*)ASCII_CODE[16];

		LcmLoadData(tx, ty, tpdata , 6);
	}
}

/*********************************************************************************************************
** 函数名称: LcmDispFixP()
** 功能描述: 在LCM指定位置显示一串数字
**
** 输 入: 	x : 指定的地址
**		   	y : 指定的行
**         	ddata : 将要写入的数据
**			offset:定点偏移位数
**			anti : 反白标记
**		   
** 输 出: 无
** 全局变量: 无
** 调用模块: LcmSendCmd(),LcmSendData()
**
** 作 者: 龚树强
** 日 期: 2005年4月5日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void  LcmDispFixP(INT8U x, INT8U y, INT16S ddata,INT8U offset,INT8U anti) 	reentrant
{
	INT16U 	tmp;
	INT16U 	i;
	INT8U*	tpdata;

	INT8U 	tx;
	INT8U 	ty;
	INT32S 	tdata;

	INT8U	bflag;
	INT8U	b0;

	tx = x ;
	ty = y ;
	tdata = ddata;

	bflag = 0;
	flag_anti_disp = anti;
	LcmClr(tx,ty,42,1,flag_anti_disp);

	if(tdata < 0)
	{
		b0 = 1;
		tdata = -tdata;
	}
	else
		b0 = 0;
	tdata >>= offset;

	tx += 6;

	for(i = 10000;i;i /=10)
	{
		tmp = tdata / i;
		tmp %= 10;
		if(tmp || bflag)
		{
			if(!bflag)
			{
				bflag = 1;
				if(b0)
				{
					tx -= 6;
					tpdata = (INT8U*)ASCII_CODE[13];
					LcmLoadData(tx, ty, tpdata , 6);
					tx += 6;
				}
			}				
			tpdata = (INT8U*)ASCII_CODE[tmp+16];
			LcmLoadData(tx, ty, tpdata , 6);
			tx += 6;
		}
//		tx += 6;
	}
	if(!bflag)
	{
		if(b0)
		{
			if(ddata != 0)
			{
				tx -= 6;
				tpdata = (INT8U*)ASCII_CODE[13];
				LcmLoadData(tx, ty, tpdata , 6);
				tx += 6;
			}
		}	
		tpdata = (INT8U*)ASCII_CODE[16];
		LcmLoadData(tx, ty, tpdata , 6);	
		tx += 6;
	}
	
	tpdata = (INT8U*)ASCII_CODE[14];
	LcmLoadData(tx, ty, tpdata , 6);
	
	tx += 6;
	
	tdata = ddata;
	if(b0)

⌨️ 快捷键说明

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