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

📄 lcd.c

📁 ucos_ii在mini2440上的移植KEIL编译环境
💻 C
📖 第 1 页 / 共 2 页
字号:
			}
			nCol++;
			nBit++;	
		}
		nRow++;	
		nCol = nX;
	}
	

}


/********************************************************************** 

  *  函数名称: LCD_DrawText 
  
	*  功能描述: 
	*		  在LCD上显示文本
	*  参数说明: 
	*     x			 汉字要在LCD上像素的起始横座标
	*	  y			 汉字要在LCD上像素的起始纵座标
	*	  pcText 	 显示文本内容
	*	  nTxtLen 	 显示的文本长度
	*	  frontColor 前景色
	*	  backColor	 背景色
	*  返回值 
	*     无	  
******************************************************************/
void LCD_DrawText(int y, int x, char * pcText, int nTxtLen,	RGB_COLOR backColor, RGB_COLOR frontColor)
{
	int nIndex = 0;

	if(pcText == 0 || x < 0 || x >= SCR_XSIZE || y < 0 || y >= SCR_YSIZE)
	{		
		return;
	}

	while(nIndex < nTxtLen)
	{
		if(pcText[nIndex] > 0xA0 && pcText[nIndex + 1] > 0xA0)
		{
			LCD_DispCN(&pcText[nIndex], y, x, frontColor, backColor);
			x += 16;
			nIndex += 2;	
		}
		else
		{
			LCD_DispEN(pcText[nIndex], y, x, frontColor, backColor);
			x += 8;
			nIndex++;
		}
	}
}

/********************************************************************** 

  *  函数名称: LCD_draw 
  
	*  功能描述: 
	*		显示图片
	*  参数说明: 
	*	  y_pos x_pos 起始坐标 
	*     h l 高度和宽度
	*     bmp 图片的颜色数组  
	*  返回值 
	*     无	  
******************************************************************/
void LCD_draw(unsigned int y_pos, unsigned int x_pos, 
		unsigned int h, unsigned int l, const unsigned char *bmp)
{
	int y, x;
	int pos = 0;
	int mskstate = INTMSK;
	INTMSK |= ((1 << 10) | (1 << 31));//关掉定时器0

	for(y = 0; y < h; y++)
	{
		for(x = 0; x < l; x++)
		{	
			if( ((y + y_pos) < SCR_YSIZE) && ((x + x_pos) < SCR_XSIZE) )
			{
				gsnLCD_BUFFER[y + y_pos][x + x_pos] = (bmp[pos] << 8) | bmp[pos + 1];
			}
			pos += 2;		
		}
	}
	INTMSK = mskstate;
}

//=============================================================
//语法格式:	void LCD_ShowCircle(unsigned x,unsigned y,unsigned r,RGB_COLOR color,unsigned Mode)
//实现功能:	在屏幕中画圆
//参数:		
//				x - 圆心的x坐标
//				y - 圆心的y坐标
//				r - 圆的半径
//              color - 圆的颜色
//				Mode -	0(PAINT_HOLLOW)	空心圆
//						1(PAINT_SOLID)	实心圆
//返回值:		无
//=============================================================
void LCD_ShowCircle(unsigned x,unsigned y,unsigned r,RGB_COLOR color,unsigned Mode)
{
	int dx,dy,ref;
	int Temp;
	
	if(r == 0)
		return;
	dx = r;
	dy = 1;
	ref = 707 * r / 1000;					// 参考值为0.707r

	if(Mode == PAINT_SOLID)					// 实心圆
	{
		while(dy <= dx)
		{
			if(dx > ref)
				LCD_Line(x + ref + 1, y + dy, x + dx, y + dy, color);

			if(x >= ref + 1 && dx > ref)
			{
				if(x < dx)
					Temp = 0;
				else
					Temp = x - dx;
				LCD_Line(Temp, y + dy, x - ref - 1, y + dy, color);
			}
			
			if(y >= dy && dx > ref)
				LCD_Line(x + ref + 1, y - dy, x + dx, y - dy, color);
			if(x >= ref + 1 && y >= dy && dx > ref)
			{
				if(x < dx)
					Temp = 0;
				else
					Temp = x - dx;
				LCD_Line(Temp, y - dy, x - ref - 1, y - dy, color);
			}

			if(dy != dx || dx == ref)
			{
				if(y < dx)
					Temp = 0;
				else
					Temp = y - dx;
				LCD_Line(x + dy, Temp, x + dy, y + dx, color);
			}

			if(x >= dy && (dy != dx || dy == ref))
			{
				if(y < dx)
					Temp = 0;
				else
					Temp = y - dx;
				LCD_Line(x - dy, Temp, x - dy, y + dx, color);
			}			
			dy++;
			if((r*r-dy*dy)<=(dx-1)*dx)
				dx--;
		}

		LCD_Line(x + ref + 1, y, x + r, y, color);

		if(x >= ref + 1)
		{
			if(x < r)
				Temp = 0;
			else
				Temp = x - r;
			LCD_Line(Temp, y, x - ref - 1, y, color);
		}

		if(y < r)
			Temp = 0;
		else
			Temp = y - r;
		LCD_Line(x, Temp, x, y + r, color);
	}
	else													// 空心圆
	{
		while(dy <= dx)
		{
			LCD_PutPixel(x + dx, y + dy, color);
			LCD_PutPixel(x - dx, y + dy, color);
			LCD_PutPixel(x + dx, y - dy, color);
			LCD_PutPixel(x - dx, y - dy, color);
			if(dx != dy)
			{
				LCD_PutPixel(x + dy, y + dx, color);
				LCD_PutPixel(x + dy, y - dx, color);
				LCD_PutPixel(x - dy, y + dx, color);
				LCD_PutPixel(x - dy, y - dx, color);
			}
			dy++;
			if((r*r-dy*dy)<=(dx-1)*dx)
				dx--;
		}
		LCD_PutPixel(x + r, y, color);
		LCD_PutPixel(x - r, y, color);
		LCD_PutPixel(x, y + r, color);
		LCD_PutPixel(x, y - r, color);
	}	
}

 //=============================================================
//语法格式:	void LCD_Line(short x1, short y1, short x2, short y2, RGB_COLOR color)
//实现功能:	在屏幕中画直线
//参数:
//				x1 - 起始点的x坐标
//				y1 - 起始点的y坐标
//				x2 - 结束点的x坐标
//				y2 - 结束点的y坐标
//              color - 直线颜色
//返回值:		无
//=============================================================
void LCD_Line(short x1, short y1, short x2, short y2, RGB_COLOR color)
{
	short dx, dy, e;
	dx = x2 - x1; 
	dy = y2 - y1;
    
	if(dx >= 0)
	{
		if(dy >= 0) // dy>=0
		{
			if(dx >= dy) // 1/8 octant
			{
				e = dy-dx/2;
				while(x1 <= x2)
				{
					LCD_PutPixel(x1,y1,color);
					
					if(e > 0)
					{
						y1 += 1;
						e -= dx;
					}
						
					x1 += 1;
					e += dy;
				}
			}
			
			else		// 2/8 octant
			{
				e = dx-dy/2;
				
				while(y1 <= y2)
				{
					LCD_PutPixel(x1, y1, color);
					if(e > 0)
					{
						x1 += 1;
						e -= dy;
					}	
					y1 += 1;
					e += dx;
				}
			}
		}
		
		else		   // dy<0
		{
			dy = -dy;   // dy=abs(dy)

			if(dx >= dy) // 8/8 octant
			{
				e = dy-dx/2;
				
				while(x1 <= x2)
				{
					LCD_PutPixel(x1,y1,color);
					if(e > 0)
					{
						y1 -= 1;
						e -= dx;
					}	
					x1 += 1;
					e += dy;
				}
			}
			
			else		// 7/8 octant
			{
				e = dx-dy/2;
				while(y1 >= y2)
				{
					LCD_PutPixel(x1, y1, color);
					if(e > 0)
					{
						x1 += 1;
						e -= dy;
					}	
					y1 -= 1;
					e += dx;
				}
			}
		}	
	}
	
	else //dx<0
	{
		dx = -dx;		//dx=abs(dx)
		if(dy >= 0) // dy>=0
		{
			if(dx >= dy) // 4/8 octant
			{
				e = dy-dx/2;
				while(x1 >= x2)
				{
					LCD_PutPixel(x1, y1, color);
					if(e > 0)
					{
						y1 += 1;
						e -= dx;
					}	
					x1 -= 1;
					e += dy;
				}
			}
			
			else		// 3/8 octant
			{
				e = dx-dy/2;
				while(y1 <= y2)
				{
					LCD_PutPixel(x1, y1, color);
					if(e > 0)
					{
						x1 -= 1;
						e -= dy;
					}	
					y1 += 1;
					e += dx;
				}
			}
		}
		
		else		   // dy<0
		{
			dy = -dy;   // dy=abs(dy)

			if(dx >= dy) // 5/8 octant
			{
				e = dy-dx/2;
				while(x1 >= x2)
				{
					LCD_PutPixel(x1, y1, color);
					if(e > 0)
					{
						y1 -= 1;
						e -= dx;
					}	
					x1 -= 1;
					e += dy;
				}
			}
			else		// 6/8 octant
			{
				e = dx-dy/2;
				while(y1 >= y2)
				{
					LCD_PutPixel(x1, y1 ,color);
					if(e > 0)
					{
						x1 -= 1;
						e -= dy;
					}	
					y1 -= 1;
					e += dx;
				}
			}
		}	
	}	
}
void LCD_DispCN_DIY(int Area,int Index, int nY, int nX, RGB_COLOR backColor, RGB_COLOR frontColor)
{
	int nRow = nY;
	int nCol = nX;
	int cArea = Area;
	int cIndex = Index ;
	char *pcCharPos = (char *)(HZK16_BASE + ((cArea - 1) * 94 + (cIndex - 1)) * 32);
	int nBit = 0;
	char cCh1;
	char cCh2;	

	while(nRow < nY + 16)
	{
		cCh1 = *pcCharPos;
		cCh2 = *(pcCharPos	+ 1);
		pcCharPos += 2;

  	 	while(nBit < 8)
		{
			if(cCh1 & (1 << (7 - nBit)))
			{
				if(nCol < SCR_XSIZE && nRow < SCR_YSIZE)
				{
					gsnLCD_BUFFER[nRow][nCol] = backColor;
				}
			}
			else
			{
				if(nCol < SCR_XSIZE && nRow < SCR_YSIZE)
				{
					gsnLCD_BUFFER[nRow][nCol] = frontColor;
				}
			}
			nCol++;
			nBit++;
		}
		nBit = 0;

		while(nBit < 8)
		{
			if(cCh2 & (1 << (7 - nBit)))
			{
				gsnLCD_BUFFER[nRow][nCol] = backColor;
			}
			else
			{
				gsnLCD_BUFFER[nRow][nCol] = frontColor;
			}
			nCol++;
			nBit++;			
		}
		nBit = 0;

		nRow++;
		nCol = nX;
	}
}

/**************************************************************
在LCD屏幕上画一个矩形
**************************************************************/
void LCD_ShowRectangle(int x1,int y1,int x2,int y2,int color)
{
    LCD_Line(x1,y1,x2,y1,color);
    LCD_Line(x2,y1,x2,y2,color);
    LCD_Line(x1,y2,x2,y2,color);
    LCD_Line(x1,y1,x1,y2,color);
}

⌨️ 快捷键说明

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