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

📄 c_lcd19264_driver.c

📁 交流异步电机直接转矩控制程序
💻 C
📖 第 1 页 / 共 4 页
字号:
*   .       --      .
*   D7      --      P0.16       // DB7
***********************************************************************/
void LCD19264_16BNumber(uint8 x,uint8 y,uint16 integral,uint8 effect)
{
	uint8 nx,i,j,k,flage;
	k = x;
	//Lcd19264_8X16_Cls (x, y, effect)	;							//擦除原来的
	flage = 0;
	//if(integral==0) Lcd19264_8X16(x,y,(ynumber),1);
	for(i=effect;i>0;i--)
	{
		nx = (integral >>(4*(i-1)))&0x0f;
		
		if(nx == 0 && flage==0) j++; 
		else flage = 1;
		if(flage == 1)
		{	
			Lcd19264_8X16(x,y,(ynumber16b+nx*16),1);
			x += 8;
		}
	}
	Lcd19264_8X16_Cls ((k+(effect-j)*8), y,j);
	if(integral==0) Lcd19264_8X16(x,y,(ynumber),1);
	
	
}
/***********************************************************************
* 名    称:uint8 LCD19264_Number(uint8 x,uint8 y,uint16 integral)
* 功    能:将4位的16进制数输出
* 入口参数:输入,x,y坐标,整数部分,有效数字个数
* 出口参数: 
* 说明    :
*   R/S     --      P0.3        // RS
*	R/W     --      P0.4        // RW
*	E       --		P0.5        // E
*   CS1		--		P0.6		//CS1
* 	CS2		--		P0.7		//CS2
*  	CS3		--		P0.8		//CS3
*   D0      --      P0.9       // DB0
*   .       --      .
*   .       --      .
*   .       --      .
*   D7      --      P0.16       // DB7
***********************************************************************/
void LCD19264_Number(uint8 x,uint8 y,uint16 integral,uint8 effect,uint8 turn_over)
{
	uint32 nx,i,j,k,l,m,flage;
	
	flage = 0;
	k = x;
	l = effect;
	m = integral;
	
	for(i=(effect+1);i>0;i--)
	{	
		
		nx = integral/SQURE10[l];
		integral = integral%SQURE10[l];
		l--;
		
		if(nx == 0 && flage==0) j++; 
		else flage = 1;
		if(flage == 1)
		{	
			Lcd19264_8X16COVE(x,y,(ynumber16b+nx*16),1,turn_over);
			x += 8;
		}
	}
	
	Lcd19264_8X16_Cls ((k+(effect-j+1)*8), y,j);
	if(m==0) Lcd19264_8X16COVE(x,y,(ynumber),1,turn_over);
	

}

/***********************************************************************
* 名    称:
* 功    能:
* 原    理:	自动识别位数(最大6位),整数部分,小数部分输出完后,将剩余位置清零
* 入口参数:输入,x,y坐标,数据(支持浮点),输出小数最大位数,turnover为1时反色输出,有效位数
* 出口参数:不成功输出0XFF,成功0x01
* 说明    :,
*   R/S     --      P0.3        // RS
*	R/W     --      P0.4        // RW
*	E       --		P0.5        // E
*   CS1		--		P0.6		//CS1
* 	CS2		--		P0.7		//CS2
*  	CS3		--		P0.8		//CS3
*   D0      --      P0.9       // DB0
*   .       --      .
*   .       --      .
*   .       --      .
*   D7      --      P0.16       // DB7
***********************************************************************/

uint8 LCD19264_FNum(uint8 x,uint8 y,fp32 float_num,uint8 outbit ,uint8 turnover,uint8 effect)	
{
	uint8 i,j,k,ox;					//循环用变量,中转变量,ox为保留x的原来值
	uint32 integral,ni,k32;
	fp32 floatt;
	
	ox = x;												//保留原值
	
	if(float_num ==0)  
	{
		Lcd19264_8X16COVE(x,y,ynumber,1,turnover);
		x+=8;
		Lcd19264_8X16COVE(x,y,NONE,(effect-1),turnover);
		return(0x44);
	}
	integral = (uint32)float_num;				//获取整数部分

/***********************************************************************
* 						输出整数部分
***********************************************************************/	
	if(integral>999999 ) return(0x44);	 		//过滤参数,最大999999
		else 
		{
			if(integral>99999) i = 6;
				else if(integral>9999) i = 5;
					else if(integral>999) i = 4;
						else if(integral>99) i = 3;
							else if(integral>9) i =2;
								else i = 1;
		}
	
	k32 = integral;
	k = i;
	for(;i>0;)
	{	
		i--;
		
		ni = integral/SQURE10[i];							//取剩下的最高位
		Lcd19264_8X16COVE(x,y,(ynumber+ni*16),1,turnover);
		integral %= SQURE10[i];						//取下一个位
		x += 8;									//移向下一位
	}
	integral = k32;
	i = k;
	
/***********************************************************************
* 						输出小部分
***********************************************************************/	
	floatt = (float_num*SQURE10[outbit] - integral*SQURE10[outbit])/SQURE10[outbit] ;//取出小数,这样搞的目的是消除浮点运算错误
	
	if(floatt == 0)
	{
		Lcd19264_8X16COVE(x,y,NONE,(effect-k+1),turnover);		//擦除剩下的
		return(0x01);											//无小数部分输出完毕
	}
	integral = (uint32)(floatt*SQURE10[outbit]);				//将小数变整
	if(integral==0)												//防止浮点舍入错误
	{
		Lcd19264_8X16COVE(x,y,NONE,(effect-k+1),turnover);		//擦除剩下的
		return(0x01);	
	}
	Lcd19264_8X16COVE( x,y,dot,1,turnover);						//写小数点
	x+=8;													//刷新位置
	
	k32 = integral;
	
	for(i=0;;)									//获取真正需要显示的位数
	{
		ni = integral%10;
		
		if(ni !=0 )								//探测最高位
		{
			//i = outbit - i;						//获得真正需要显示的位数
			break;
		}
		i++;						
		integral /= 10;
	} 
	 k=i;
	integral = k32;
	
												//以下输出为0的位
	//k32 =SQURE10[outbit-1];
	for(j=0;;j++)
	{	
		floatt *= 10;
		if(floatt >0.99999999) break;					//出现整数即可退出
		Lcd19264_8X16COVE( x,y,ynumber,1,turnover);//输出0
		x+=8;									
	}
	
	integral /= SQURE10[i];							//获得输出非0部分
	i = outbit - j-i;
	for(;i>0;i--)									//输出剩下的非0值
	{	
		ni = integral;
		ni /= SQURE10[i-1]	;						//取剩下的最高位
		Lcd19264_8X16COVE(x,y,(ynumber+ni*16),1,turnover);
		integral %= SQURE10[i-1]	;				//取下一个位
		x += 8;										//移向下一位
		
	}
	
	
		
		Lcd19264_8X16COVE(x,y,NONE,k,turnover);		//擦除剩下的
		
		
	return(0x01);
}

/***********************************************************************
* 名    称:uint8 LCD19264_NEW_FNum(uint8 x,uint8 y,fp32 float_num,uint8 Qpoint ,uint8 turnover)	
* 功    能:输出一个带小数点的浮点数
* 入口参数:输入,x,y坐标,数据(支持浮点),输出小数位数,最多可显示数字位数,turnover为1时反色输出
* 出口参数:不成功输出0X00,成功0x01
* 说明    :占用位置为有效位数+1,注意小数位不能太大,5以下,否则会造成溢出错误
			注意显示显示数字位数应大于(小数位数+加预想的整数位数+1),为占液晶显示的数字个数
*   R/S     --      P0.3        // RS
*	R/W     --      P0.4        // RW
*	E       --		P0.5        // E
*   CS1		--		P0.6		//CS1
* 	CS2		--		P0.7		//CS2
*  	CS3		--		P0.8		//CS3
*   D0      --      P0.9       // DB0
*   .       --      .
*   .       --      .
*   .       --      .
*   D7      --      P0.16       // DB7
***********************************************************************/

uint8 LCD19264_NEW_FNum(uint8 x,uint8 y,fp32 float_num,int8 Qpoint ,int8 effect,uint8 turnover)	
{
	uint32 m_sbuf;
	int32 i,j,point_flage=0;
	uint8 sbuf[12];									//数据缓冲
	fp32 mf;
	
	if(float_num<0) float_num = 0;
	i=0;
	if(float_num == 0)								//数字为0
	{
		i = Qpoint+1;
		Stack_Push8_7_11(sbuf,0,12);
	}
	if(float_num<1&&float_num>0) 					//为显示小于一的那个数的0做准备
	{
		mf = float_num;
		while(mf < 0.9999999)						//不为1是为了解决浮点运算错误
		{
			mf = mf*10;
			point_flage++;
		}
	}
	float_num *=SQURE10[Qpoint];
	if(float_num > 1000000000)	return(0);			//超出所能处理的范围
	m_sbuf = (uint32) float_num;
	if(m_sbuf>SQURE10[effect]) m_sbuf =SQURE10[effect]-1;//超出设定的可显视范围
	if(m_sbuf%SQURE10[Qpoint] == 0) point_flage=-1;
	sbuf[0] = 1;									//按要求初始化堆栈用数组
	
	while(m_sbuf!=0)								//将数字入盏
	{
		i++;										//输入计数
		j =	m_sbuf%10;	
		Stack_Push8_7_11(sbuf,j,12);
		m_sbuf/=10;
	}
	
	if(point_flage>0)								//输入数字小于1 
	{
		i = Qpoint+1;										//输出一个0
		for(;point_flage>0;point_flage--)
		{
			Stack_Push8_7_11(sbuf,0,12);
		}
	}
	
	i = i - Qpoint;									//获取整数个数
	for(;i>0;i--)
	{
		j = Stack_Pop8_7_11(sbuf);
		Lcd19264_8X16COVE( x,y,(ynumber+j*16),1,turnover);//输出
		x+=8;
		effect--;
	}
	
	if(point_flage <0 ) 
	{
		Qpoint=0;
		effect +=Qpoint+1;
	}
	if(Qpoint!=0)
	{
		Lcd19264_8X16COVE( x,y,dot,1,turnover);			//写小数点
		x+=8;
	
		for(;Qpoint>0;Qpoint--)
		{
			j = Stack_Pop8_7_11(sbuf);
			Lcd19264_8X16COVE( x,y,(ynumber+j*16),1,turnover);//输出
			x+=8;
			effect--;
		}
	}
	if(effect <0)								//超出显示有的效位数,将超出部分删除 
	{
		effect *= -1;
		x -= (effect<<3);
	}	
	Lcd19264_8X16_Cls (x, y,effect);			//擦除多余的

	return(1);

}
/***********************************************************************
* 名    称:LCD19264_Navigate(uint8 x,uint8 y,uint16 along, uint16 Total,uint16 value )
* 功    能:导航条 
* 原    理:	
* 入口参数:导航条坐标,总长along,代表总量Total,当前量value,复位reset
* 出口参数:
* 说明    :使用前必须先复位,非可重入函数
*   R/S     --      P0.3        // RS
*	R/W     --      P0.4        // RW
*	E       --		P0.5        // E
*   CS1		--		P0.6		//CS1
* 	CS2		--		P0.7		//CS2
*  	CS3		--		P0.8		//CS3
*   D0      --      P0.9       // DB0
*   .       --      .
*   .       --      .
*   .       --      .
*   D7      --      P0.16       // DB7
***********************************************************************/

void LCD19264_Navigate(uint8 x,uint8 y,uint16 along , uint16 Total,uint16 value ,uint8 reset)	
{
	uint8 i;
	static hl,hy,ovalue=1;
	
	if(reset ==1 )								//复位
	{
		ovalue =0;
		/***********************************************************************
		* 				画方条
		***********************************************************************/	
	
		LCD19264_Linehv(x,y,x,(y+along));
		LCD19264_Linehv((x+5),y,(x+5),(y+along));
		LCD19264_Linehv(x,y,(x+5),y);
		LCD19264_Linehv(x,(y+along),(x+5),(y+along));
	
		/***********************************************************************
		* 				画划块
		***********************************************************************/
		hl = along / Total;				//计算划块长度
		if ( hl==0 ) hl = 1;			//倘若小于1
		
	}

	if(ovalue != value || reset ==1)			//现在的value出现变化
	{
		hy = (value*hl)+1;						//计算划块的位置
		if(hy>(y+along)) hy = y+along-1;		//超过复位
		
		for(i=1;i<5;i++)
		{
			LCD19264_Cls_Linehv((x+i),(y+1),(x+i),(y+along-1));	//以下为清除原来的划快
		}

		
		for(i=0;i<hl;i++)		//画滑块
		{
			if(y+hy+i < y+along)
			{
				LCD19264_Linehv((x+1),(y+hy+i),(x+4),(y+hy+i));
			}
		}
		ovalue = value;					//给旧值付新值
	}
	
}
#endif
/***********************************************************************
* 名    称:LCD19264_picture (uint8 x,uint8 y,uint8 width,uint8 hight,uint8 const  *str)
* 功    能:画任意大小的图
* 原    理:	
* 入口参数://输入坐标,数组指针,字符个数
* 出口参数:
* 说明    :
*   R/S     --      P0.3        // RS
*	R/W     --      P0.4        // RW
*	E       --		P0.5        // E
*   CS1		--		P0.6		//CS1
* 	CS2		--		P0.7		//CS2
*  	CS3		--		P0.8		//CS3
*   D0      --      P0.9       // DB0
*   .       --      .
*   .       --      .
*   .       --      .
*   D7      --      P0.16       // DB7
***********************************************************************/
void LCD19264_picture (uint8 x,uint8 y,uint8 width,uint8 hight,uint8 const  *str)		//输入坐标,数组指针,字符个数
{	uint8 i,j;	

	
	 	for ( i = 0; i < hight; i ++)								//写上下两个半部分
			for (j = 0; j < width; j ++ )  						//整行16个
			LCD19264_Writedata(x + j,y + i,*(str ++));			//遇到‘/0’不写

			//y += 2;
	 	
	
}	






















⌨️ 快捷键说明

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