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

📄 show.c

📁 采用LPC935控制的一个项目
💻 C
📖 第 1 页 / 共 2 页
字号:

/*********************************************************************************************************
* 函数名称: LcdDrawDot  
*
* 功能描述: 在位置(bx,by)处画点或消点
*
* 入口参数: bx, 行坐标,取值范围为0~239
*			by, 列坐标,取值范围为0~159
*			Attr, 图形显示的属性,"1"-画点; "0"-消点
*
* 出口参数: 无
*
* 全局变量: 无
*
* 调用模块: LcdWriteCmd(),
*           LcdWriteData(),
*			LcdRead()
*
* 作    者: Aoker
* 创建时间: 2004年12月7日
********************************************************************************************************/
/*
void LcdDrawDot(BYTE bx, BYTE by, bit Attr)   	//描点
{
    BYTE tt=0, uu=0;         //ap 修改 P7, 行字符个数
    WORD l=0;

    tt = (BYTE)(bx%8);
    bx  = bx/8;
    l  = by*ap + bx;
    bx  = (BYTE)(l&0xff);
    by  = (BYTE)((l>>8)&0xff);

    LcdWriteCmd(0x4C);             //"光标右移"
    LcdWriteCmd(0x46);             // 光标指针设置
    LcdWriteData(bx);               // 光标地址16位
    LcdWriteData(by);
    LcdWriteCmd(0x43);
    uu = LcdRead();
    if(Attr)
        uu |= 1<<(7-tt);
    else
        uu &= ~(1<<(7-tt));
    LcdWriteCmd(0x4D);
    LcdWriteCmd(0x43);
    LcdRead();
    LcdWriteCmd(0x4C);
    LcdWriteCmd(0x42);     		// 送数据两个
    LcdWriteData(uu);
}
 */
/*********************************************************************************************************
* 函数名称: LcdDrawLine  
*
* 功能描述: 在位置(bx1,by1)处和(bx2,by2)处画直线
*			使用时,必须满足条件: bx1 <= bx2
*
* 入口参数: bx1, 直线起点行坐标,取值范围为0~239
*			by1, 直线起点列坐标,取值范围为0~159
*			bx2, 直线终点行坐标,取值范围为0~239
*			by2, 直线终点列坐标,取值范围为0~159
*			Attr,图形显示的属性,"1"-画线; "0"-消线
*
* 出口参数: 无
*
* 全局变量: 无
*
* 调用模块: LcdWriteCmd(),
*           LcdWriteData(),
*			LcdRead()
*
* 作    者: Aoker
* 创建时间: 2004年12月7日
********************************************************************************************************/
/*
void LcdDrawLine(BYTE bx1, BYTE by1, BYTE bx2, BYTE by2, bit Attr)	//画线必须x1<=x2
{
    BYTE tt=0, uu=0, i, y, t;         //ap 修改 P7, 行字符个数
    WORD l=0, x;
	if(bx1>bx2)
		return;

 	if(bx1 == bx2)  //竖线
	{
	    tt = (BYTE)(bx1%8);
	    x  = bx1/8;
	    l  = by1*ap + x;
	    x  = (BYTE)(l&0xff);
	    y  = (BYTE)((l>>8)&0xff);
	   	LcdWriteCmd(0x4F);             //"光标下移"
	    LcdWriteCmd(0x46);             // 光标指针设置
	    LcdWriteData(x);               // 光标地址16位
	    LcdWriteData(y);
	    LcdWriteCmd(0x43);
	    uu = LcdRead();
	   	LcdWriteCmd(0x4E);             //"光标上移"
		LcdWriteCmd(0x43);
		LcdRead();
		for(i=by1; i<=by2; i++)
		{
		    if(Attr)
		        uu |= 1<<(7-tt);
		    else
		        uu &= ~(1<<(7-tt));
		   	LcdWriteCmd(0x4F);             //"光标下移"
		    LcdWriteCmd(0x42);     		// 送数据两个
			LcdWriteData(uu);

			LcdWriteCmd(0x43);
			uu = LcdRead();
		   	LcdWriteCmd(0x4E);             //"光标上移"
			LcdWriteCmd(0x43);
			LcdRead();
		}
		return;
	}
	else if(by1 == by2)   //横线
	{
		t = bx1/8;
		for(x=bx1; x<(t+1)*8; x++)
		{
			LcdDrawDot(x, by1, Attr);
		}
	    l  = by1*ap + t+1;
	    x  = (BYTE)(l&0xff);
	    y  = (BYTE)((l>>8)&0xff);

	    LcdWriteCmd(0x4C);     		// 右
	    LcdWriteCmd(0x46);             // 光标指针设置
	    LcdWriteData(x);               // 光标地址16位
	    LcdWriteData(y);
	    LcdWriteCmd(0x42);     		// 送数据两个
		for(i=(t+1); i<(bx2-bx2%8)/8; i++)
		{
			if(Attr)
				LcdWriteData(0xFF);
			else
				LcdWriteData(0x00);
		}
		for(x=bx2-bx2%8; x<=bx2; x++)
		{
			LcdDrawDot(x, by1, Attr);
		}
		return;
	}
}
*/

/*********************************************************************************************************
* 函数名称: DispStr  
*
* 功能描述: 在位置(bSx, bSy)处显示一个字符
*
* 入口参数: bSx, 行坐标,取值范围为0~239
*			bSy, 列坐标,取值范围为0~159
*			Attr, 图形显示的属性,"1"-反白显示; "0"-正常显示
*			ptr, 指向图形的字模数据
*
* 出口参数: 无
*
* 全局变量: 无
*
* 调用模块: LcdDraw(),
*
* 作    者: Aoker
* 创建时间: 2004年12月7日
********************************************************************************************************/
void DispStr(BYTE bSx, BYTE bSy, bit Attr, BYTE *ptr)
{
	BYTE i=0;
	do
	{
		LcdDraw(bSx+i*8, bSy, 8, 16, Attr, ASCII[(*ptr++)-0x20]);
		i++;
	}while(*ptr != '\0');
}

/*********************************************************************************************************
* 函数名称: DispNum  
*
* 功能描述: 在位置(bSx, bSy)处显示一个数字
*
* 入口参数: bSx, 行坐标,取值范围为0~239
*			bSy, 列坐标,取值范围为0~159
*			Attr, 图形显示的属性,"1"-反白显示; "0"-正常显示
*			bNumber, 待显示的数字
*
* 出口参数: 无
*
* 全局变量: 无
*
* 调用模块: LcdDraw(),
*
* 作    者: Aoker
* 创建时间: 2004年12月7日
********************************************************************************************************/
void DispNum(BYTE bSx, BYTE bSy, bit Attr, BYTE bNumber)
{
	if( (bNumber<0) || (bNumber>9) ) return;
	LcdDraw(bSx, bSy, 8, 16, Attr, ASCII[bNumber+0x10]);//0x10为数字0~9在ASCII码中的偏移地址
}


/*********************************************************************************************************
* 函数名称: ClearXByte  
*
* 功能描述: 删除从位置(bSx, bSy)起的x个字节
*
* 入口参数: bSx, 行坐标,取值范围为0~239
*			bSy, 列坐标,取值范围为0~159 
*
* 出口参数: 无
*
* 全局变量: 无
*
* 调用模块: DispChar(),
*
* 作    者: Aoker
* 创建时间: 2004年12月7日
********************************************************************************************************/
void ClearXByte(BYTE bSx, BYTE bSy, BYTE x)
{
	BYTE i;
	for(i=0; i<x; i++)
	{
		DispStr(bSx+i*8, bSy, 0, " ");
	}
}


/*********************************************************************************************************
* 函数名称: KLine  
*
* 功能描述: 画粗线
*
* 入口参数: bWidth,线的长度 
*
* 出口参数: 无
*
* 全局变量: 无
*
* 调用模块: 无
*
* 作    者: Aoker
* 创建时间: 2004年12月8日
********************************************************************************************************/
/*
void KLine(BYTE bSx, BYTE bSy, BYTE bWidth)
{
	LcdDrawLine(bSx, bSy, bSx+bWidth, bSy, 1);
	LcdDrawLine(bSx, bSy+1, bSx+bWidth, bSy+1, 1);	
}
*/
/*********************************************************************************************************
* 函数名称: myprintf  
*
* 功能描述: 自编简单printf函数,只限于浮点数处理显示
*
* 入口参数: dotx=0,无小数显示; dotx=1,1位小数显示; =2,2位小数显示; =3,3位小数显示;  
*			Attr, 0-正显; 1-反显
*
* 出口参数: 返回输出数据所占的字节数
*
* 全局变量: 无
*
* 调用模块: 无
*
* 作    者: Aoker
* 创建时间: 2004年12月20日
********************************************************************************************************/
/*
BYTE myprintf(BYTE bSx, bSy, BYTE dotx, bit Attr, float fp)
{
	DWORD mulnum;
	BYTE shiwan,wan,qian,bai,shi,ge;
	BYTE NumByte;
			
	if(dotx == 0)
		mulnum = (DWORD)(floor(fp * 1));
	if(dotx == 1)
		mulnum = (DWORD)(floor(fp * 10));
	if(dotx == 2)
		mulnum = (DWORD)(floor(fp * 100));
	if(dotx == 3)
		mulnum = (DWORD)(floor(fp * 1000));

	if(mulnum > 999999)
	{
	    DispStr(76, 64, 0, "data error!");	
	    DispStr(76, 80, 0, "Please restart!");
		return 0;	
	}
	shiwan = mulnum/100000;		//十万位						           
	wan = mulnum/10000%10;		//万位
	qian = mulnum/1000%10;		//千位
	bai = mulnum/100%10;		//百位
	shi = mulnum/10%10;			//十位
	ge = mulnum%10;				//个位

	if(shiwan != 0)
	{
		DispNum(bSx, bSy, Attr, shiwan);    
		DispNum(bSx+8, bSy, Attr, wan);
		DispNum(bSx+16, bSy, Attr, qian);
		
		if(dotx == 3)
		{
			DispStr(bSx+24, bSy, Attr, ".");    
		    DispNum(bSx+32, bSy, Attr, bai);
			DispNum(bSx+40, bSy, Attr, shi);
			DispNum(bSx+48, bSy, Attr, ge);
			NumByte = 56;
		}
		if(dotx == 2)
		{
			DispNum(bSx+24, bSy, Attr, bai);
			DispStr(bSx+32, bSy, Attr, ".");    
		    DispNum(bSx+40, bSy, Attr, shi);
			DispNum(bSx+48, bSy, Attr, ge);
			NumByte = 56;
		}    
		if(dotx == 1)
		{
			DispNum(bSx+24, bSy, Attr, bai);
		    DispNum(bSx+32, bSy, Attr, shi);
			DispStr(bSx+40, bSy, Attr, ".");    
			DispNum(bSx+48, bSy, Attr, ge);
			NumByte = 56;
		}
		if(dotx == 0)
		{
			DispNum(bSx+24, bSy, Attr, bai);
		    DispNum(bSx+32, bSy, Attr, shi);
			DispNum(bSx+40, bSy, Attr, ge);
			NumByte = 48;
		}
		return(NumByte);
	}			

	if(wan != 0)
	{
		DispNum(bSx, bSy, Attr, wan);
		DispNum(bSx+8, bSy, Attr, qian);

		if(dotx == 3)
		{
			DispStr(bSx+16, bSy, Attr, ".");    
		    DispNum(bSx+24, bSy, Attr, bai);
			DispNum(bSx+32, bSy, Attr, shi);
			DispNum(bSx+40, bSy, Attr, ge);
			NumByte = 48;
		}
		if(dotx == 2)
		{
			DispNum(bSx+16, bSy, Attr, bai);
			DispStr(bSx+24, bSy, Attr, ".");    
		    DispNum(bSx+32, bSy, Attr, shi);
			DispNum(bSx+40, bSy, Attr, ge);
			NumByte = 48;
		}    
		if(dotx == 1)
		{
			DispNum(bSx+16, bSy, Attr, bai);
		    DispNum(bSx+24, bSy, Attr, shi);
			DispStr(bSx+32, bSy, Attr, ".");    
			DispNum(bSx+40, bSy, Attr, ge);
			NumByte = 48;
		}
		if(dotx == 0)
		{
			DispNum(bSx+16, bSy, Attr, bai);
		    DispNum(bSx+24, bSy, Attr, shi);
			DispNum(bSx+32, bSy, Attr, ge);
			NumByte = 40;
		}
		return(NumByte);
	}				

	if(dotx == 3)
	{
		DispNum(bSx, bSy, Attr, qian);
		DispStr(bSx+8, bSy, Attr, ".");    
	    DispNum(bSx+16, bSy, Attr, bai);
		DispNum(bSx+24, bSy, Attr, shi);
		DispNum(bSx+32, bSy, Attr, ge);
		NumByte = 40;
		return(NumByte);
	}

	if(dotx == 2)
	{
		if(qian != 0)
		{
			DispNum(bSx, bSy, Attr, qian);
			DispNum(bSx+8, bSy, Attr, bai);
			DispStr(bSx+16, bSy, Attr, ".");    
		    DispNum(bSx+24, bSy, Attr, shi);
			DispNum(bSx+32, bSy, Attr, ge);
			NumByte = 40;
		}else{
			DispNum(bSx, bSy, Attr, bai);
			DispStr(bSx+8, bSy, Attr, ".");    
		    DispNum(bSx+16, bSy, Attr, shi);
			DispNum(bSx+24, bSy, Attr, ge);
			NumByte = 32;
		}
		return(NumByte);
	}    
	if(dotx == 1)
	{
		if(qian != 0)
		{   
			DispNum(bSx, bSy, Attr, qian);
			DispNum(bSx+8, bSy, Attr, bai);
		    DispNum(bSx+16, bSy, Attr, shi);
			DispStr(bSx+24, bSy, Attr, ".");    
			DispNum(bSx+32, bSy, Attr, ge);
			NumByte = 40;
		}else if(bai != 0)
			  {
				DispNum(bSx, bSy, Attr, bai);
			    DispNum(bSx+8, bSy, Attr, shi);
				DispStr(bSx+16, bSy, Attr, ".");    
				DispNum(bSx+24, bSy, Attr, ge);
				NumByte = 32;
			  }else{
			    DispNum(bSx, bSy, Attr, shi);
				DispStr(bSx+8, bSy, Attr, ".");    
				DispNum(bSx+16, bSy, Attr, ge);
				NumByte = 24;
			  }	
		return(NumByte);
	}
	if(dotx == 0)
	{
		if(qian != 0)
		{
			DispNum(bSx, bSy, Attr, qian);
			DispNum(bSx+8, bSy, Attr, bai);
		    DispNum(bSx+16, bSy, Attr, shi);
			DispNum(bSx+24, bSy, Attr, ge);
			NumByte = 32;
			return(NumByte);
		}
		if(bai != 0)
		{ 
			DispNum(bSx, bSy, Attr, bai);
		    DispNum(bSx+8, bSy, Attr, shi);
			DispNum(bSx+16, bSy, Attr, ge);
			NumByte = 24;
			return(NumByte);
		}
		if(shi != 0)
		{
		    DispNum(bSx, bSy, Attr, shi);
			DispNum(bSx+8, bSy, Attr, ge);
			NumByte = 16;
			return(NumByte);
		}
		DispNum(bSx, bSy, Attr, ge);
		NumByte = 8;
		return(NumByte);
	}			    
}
*/
/*****************************************
创建矩形框
******************************************/
/*
void SetRectangle(BYTE bStartX, BYTE bStartY, BYTE bWidth, BYTE bHeight)	
{
	BYTE i, t;
	if(bHeight>20)
		t = 2;
	else
		t = 1;
	for(i=0; i<t; i++)
	{
		LcdDrawLine(bStartX, bStartY-i, bStartX+bWidth, bStartY-i, 1);
		LcdDrawLine(bStartX, bStartY+bHeight-i, bStartX+bWidth, bStartY+bHeight-i, 1);
		LcdDrawLine(bStartX+i, bStartY, bStartX+i, bStartY+bHeight, 1);
		LcdDrawLine(bStartX+bWidth-i, bStartY, bStartX+bWidth-i, bStartY+bHeight, 1);
	}
	for(i=1; i<bHeight/20; i++)
		LcdDrawLine(bStartX, bStartY+i*20, bStartX+bWidth, bStartY+i*20, 1);
}
*/

⌨️ 快捷键说明

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