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

📄 lcddrive.c

📁 使用2410实验箱对AD9852进行控制输出指定频率的正弦波
💻 C
📖 第 1 页 / 共 3 页
字号:
**		  color     表示显示字符的颜色
** Output: 无
**-------------------------------------------------------------------------------------------------------
** Modified by:Bisu[Shield]
** Modified Date: 2008-11-17
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  GUI_Disp_Ascii(uint16 x0, uint16 y0, uint8 buffer[], TCOLOR color)
{
    int i;
	uint32 c,temp_c;
	int p = 0;
    
    while(1)
	{
    		c = buffer[p] ;
			
			for(i=0;i<16;i++)
			{
				temp_c = c >> i;
				
				if(temp_c & 0x01)
				{
					GUI_Point(x0+7-i, y0+p, color);
				}
			}
			
			if(p >= 15)break;
				
    		p = p + 1;
    }
}

/********************************************************************************************************
** Function name: GUI_Disp_Char
** Descriptions: 显示给定的ascii字符
**              
** Input: x0,y0  	字符显示的起始点(左上角)
*         a         希望显示的字符
*		  color     希望字符显示成什么颜色
** Output: 无
**-------------------------------------------------------------------------------------------------------
** Modified by:Bisu[Shield]
** Modified Date: 2008-11-17
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  GUI_Disp_Char(uint16 x0, uint16 y0, char a, TCOLOR color)
{
	uint8 i;
	
	uint8 c = a - 32;
	
	for(i = 0; i < 16; i++)
	{
		temp[i] = ascii_table_8X16[c*16+i];
	}
	
	GUI_Disp_Ascii(x0, y0, temp, color);
}

/********************************************************************************************************
** Function name: GUI_DispAscii_string
** Descriptions: 显示给定的ascii字符串
**              
** Input: x0,y0  	字符显示的起始点(左上角)
*         a         希望显示的字符串的首地址
*		  color     希望字符串显示成什么颜色
** Output: 无
--------------------------------------------------------------------------------------------------------
**注意:本程序不会实现自动换行功能,所以需自行控制显示范围
**-------------------------------------------------------------------------------------------------------
** Modified by:Bisu[Shield]
** Modified Date: 2008-11-17
**------------------------------------------------------------------------------------------------------
** 说明: 参考<<ARM Linux入门与实践>> 的8.4.2程序编写,程序作者:阿南
********************************************************************************************************/
void GUI_DispAscii_string(uint16 x0, uint16 y0, char * buf,  TCOLOR color)
{
	char ex;
	
	ex = *buf;
	
	while(ex != 0)
	{
		GUI_Disp_Char(x0,y0,ex,color);
		x0 += 8;//字体宽度为8个像素
		buf++;
		ex = *buf;
	}
}

/********************************************************************************************************
** Function name: GUI_DispCircle
** Descriptions:  在指定位置显示一个指定大小的园
**              
** Input: x,y  	    圆心的位置
*         r         圆的半径大小
*		  color     希望把圆显示成什么颜色
** Output: 无
**-------------------------------------------------------------------------------------------------------
** Modified by:Bisu[Shield]
** Modified Date: 2008-11-17
**------------------------------------------------------------------------------------------------------
** 说明: 参考<<ARM Linux入门与实践>> 的8.4.2程序编写,程序作者:阿南
********************************************************************************************************/
void GUI_DispCircle(uint16 x, uint16 y, uint16 r,  TCOLOR color)
{
	int x0,y0,di,e;
	x0 = 0;
	y0 = r;
	di = 2*(1-r);
	while(y0 >= 0)
	{
		GUI_Point(x+x0,y+y0,color);//1/4象限
		GUI_Point(x-x0,y+y0,color);//2/4
		GUI_Point(x-x0,y-y0,color);//3/4
		GUI_Point(x+x0,y-y0,color);//4/4
		
		if(di<0)
		{
			e = 2*(di+y0)-1;
			if(e<=0)
			{
				x0++;
				di += 2*x0+1;
			}
			else
			{
				x0++;
				y0--;
				di += 2*(x0-y0+1);
			}
		}
		else if(di > 0)
		{
			e =2*(di-x0)-1;
			if(e <= 0)
			{
				x0++;
				y0--;
				di += 2*(x0-y0+1);
			}
			else
			{
				y0--;
				di += (-2*y0+1);
			}
		}
		else
		{
			x0++;
			y0--;
			di += 2*(x0-y0+1);
		}
	}
}

/********************************************************************************************************
** Function name: GUI_DispEllipse
** Descriptions:  在指定位置显示一个指定大小的椭圆
**              
** Input: x1,x2     椭圆在坐标系上的最左和最右的x坐标
*         y1,y2     椭圆在坐标系上的最上和最下的y坐标
*		  color     希望把圆显示成什么颜色
** Output: 无
**-------------------------------------------------------------------------------------------------------
** Modified by:Bisu[Shield]
** Modified Date: 2008-11-17
**------------------------------------------------------------------------------------------------------
** 说明: 参考<<ARM Linux入门与实践>> 的8.4.2程序编写,程序作者:阿南
********************************************************************************************************/
void GUI_DispEllipse(int x1, int y1, int x2, int y2, TCOLOR color)
{
	int x0 = (x1+x2)/2;//椭圆圆心坐标(x0,y0)
	int y0 = (y1+y2)/2;
	
	int a = (x2-x1)/2;//半长轴和半短轴
	int b = (y2-y1)/2;
	
	int x = a+1/2; //初始化(x,y坐标变量)
	
	int y = 0;
	
	int taa = a*a;  //定义临时变量,用于计算决策
	int t2aa = 2*taa;
	int t4aa = 2*t2aa;
	
	int tbb = b*b;
	int t2bb = 2*tbb;
	int t4bb = 2*t2bb;
	
	int t2abb = a*t2bb;
	int t2bbx = t2bb*x;
	
	int tx = x;
	int di = t2bbx*(x-1)+tbb/2+t2aa*(1-tbb);
	
	while(t2bb*tx > t2aa*y)
	{
		GUI_Point(x0+x,y0+y,color);
		GUI_Point(x0-x,y0+y,color);
		GUI_Point(x0-x,y0-y,color);
		GUI_Point(x0+x,y0-y,color);
		
		if(di<0)
		{
			y += 1;
			di += t4aa*y+t2aa;
			tx = x - 1;
		}
		else
		{
			x -= 1;
			y += 1;
			di = di -t4bb*x + t4aa*y + t2aa;
			tx = x;
		}
	}
	
	di = t2bb*(x*x+1)-t4bb*x+t2aa*(y*y+y-tbb)+taa/2;
	while(x>=0)
	{
		GUI_Point(x0+x,y0+y,color);
		GUI_Point(x0-x,y0+y,color);
		GUI_Point(x0-x,y0-y,color);
		GUI_Point(x0+x,y0-y,color);
		
		if(di < 0)
		{
			x -= 1;
			y += 1;
			di = di + t4aa*y-t4bb*x + t2bb;
		}
		else
		{
			x -= 1;
			di = di -t4bb*x + t2bb;
		}
	}		
}

/********************************************************************************************************
** Function name: GUI_DispButton
** Descriptions:  在指定位置显示一个指定大小的按钮图标,同时可以显示其有没有被按下去
**              
** Input: x1,x2     按钮左上角的坐标(x1,y1)
*         y1,y2     按钮右下角的坐标(x2,y2)
*		  color     按钮边框的颜色值
*		  frameWidth 为了实现按钮被按下去的效果而加上的边框阴影的宽度
*		  pressed   按钮有没有被按下,为1表示按下,显示按下的效果
*					为0表示没有按下,显示没有按下的效果
** Output: 无
**-------------------------------------------------------------------------------------------------------
** Modified by:Bisu[Shield]
** Modified Date: 2008-11-17
**------------------------------------------------------------------------------------------------------
** 说明: 参考<<ARM Linux入门与实践>> 的8.4.2程序编写,程序作者:阿南
********************************************************************************************************/
void GUI_DispButton(uint16 x1, uint16 y1, uint16 x2, uint16 y2, TCOLOR color, uint16 frameWidth, uint8 pressed)
{
	uint16 i = 0;
	
	GUI_Rectangle(x1,y1,x2,y2,color);
	
	if(pressed == 0)
	{
		for(i=0;i<frameWidth-1;i++)
		{
			GUI_Line(x1+i+1,y1+i+1,x2-i-1,y1+i+1,WHITE);//上
			GUI_Line(x1+i+1,y1+i+1,x1+i+1,y2-i-1,WHITE);//左
			GUI_Line(x1+i+2,y2-i-1,x2-i-1,y2-i-1,DGRAY);//下
			GUI_Line(x2-i-1,y1+i+1,x2-i-1,y2-i-1,DGRAY);//右
		}
	}
	else
	{
		for(i=0;i<frameWidth-1;i++)
		{
			GUI_Line(x1+i+1,y1+i+1,x2-i-1,y1+i+1,DGRAY);//上
			GUI_Line(x1+i+1,y1+i+1,x1+i+1,y2-i-1,DGRAY);//左
			GUI_Line(x1+i+2,y2-i-1,x2-i-1,y2-i-1,WHITE);//下
			GUI_Line(x2-i-1,y1+i+1,x2-i-1,y2-i-1,WHITE);//右
		}
	}
}

/********************************************************************************************************
** Function name: GUI_DispChinese
** Descriptions:  在指定位置显示一个16*16大小的汉字
**              
** Input: x0,y0     汉字的左上角的其实位置坐标
*		  character 保存该汉字点阵数据的数组
*		  color     按钮边框的颜色值
** Output: 无
-------------------------------------------------------------------------------------------------------
** 注意:需配合字摸软件来使用该函数
**-------------------------------------------------------------------------------------------------------
** Modified by:Bisu[Shield]
** Modified Date: 2008-11-17
**------------------------------------------------------------------------------------------------------
** 说明: 参考<<ARM Linux入门与实践>> 的8.4.2程序编写,程序作者:阿南
********************************************************************************************************/
void GUI_DispChinese(int x0,int y0,unsigned char character[], TCOLOR color)
{
	int i;
	uint32 c,temp_c;
	int p = 0;

	while(1)
	{
    		c = character[p+1] | (character[p]<<8) ;
			
			for(i=0;i<16;i++)
			{
				temp_c = c >> i;
				
				if(temp_c & 0x01)
				{
					GUI_Point(x0+15-i,y0+p/2,color);
				}
			}
			
			if(p >= 30)break;
				
    		p = p + 2;
    }
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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