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

📄 main.c

📁 在ARM中实现图片、文字的转换
💻 C
📖 第 1 页 / 共 2 页
字号:
				   y:纵坐标(0-240) 
				   Buffer:LCD缓冲区首地址
* Output         : None
* Return         : None
*******************************************************************************/
void LCDDotOne(U32 x, U32 y,U32 color,PUINT8 Buffer)
{
	PUINT8 temp = Buffer;
	* (temp + ((480 * y + x) << 1)) = color;
	* (temp + (((480 * y + x) << 1) + 1)) = color;
}

/*******************************************************************************
* Function Name  : LCDLine
* Description    : 输入两点坐标,用Bresenham算法绘制直线
* Input          : x1,x2:横坐标(0-480)
				   y1,y2:纵坐标(0-240)
				   Buffer:LCD缓冲区首地址
* Output         : None
* Return         : None
*******************************************************************************/
void LCDLine(U32 x1, U32 y1, U32 x2, U32 y2,U32 color, PUINT8 LBuffer)
{
    U32 xa, ya, xb, yb;
	S32 i, dx, dy, pk, towdx, towdy, towdydx;
	if(x1 > x2)
    {
        xa = x2;
        ya = y2;
        xb = x1;
        yb = y1;
    }
    else
    {
        xa = x1;
        ya = y1;
        xb = x2;
        yb = y2;
    }
    dx = xb - xa;
    dy = yb - ya;
    
    if(dy >= 0)
    {
        towdy = dy<<1;
        towdx = dx<<1;
        towdydx = (dy-dx) << 1;
		LCDDotOne(xa, ya,color, LBuffer);
        if(abs(dx) >= abs(dy))
        {
            pk = (dy << 1) - dx;
            for(i = 0; i < abs(dx); i++)
            {
                xa++;
                if(pk > 0)
                {
                    ya++;
                    pk += towdydx;
                }
                else
                {
                    pk += towdy;
                }
                LCDDotOne(xa, ya,color, LBuffer);
            }
        }
        else
        {
            pk=((dx+dy)<<1)-1;
			LCDDotOne(xa, ya,color, LBuffer);
            for(i=0;i<abs(dy);i++)
            {
                ya++;
                if(pk>0)
                {
                    xa++;
                    pk-=towdydx;
                }
                else
                {
                    pk+=towdx;
                }
                LCDDotOne(xa, ya,color, LBuffer);
            }
        }
    }
    else
    {
        towdy=(-1) * (dy << 1);
        towdx=(-1) * (dx << 1);
        towdydx=(-1) * ((dx + dy) << 1);
		LCDDotOne(xa, ya,color, LBuffer);
		if(abs(dx) >= abs(dy))
        {
            pk=(-1) * dx;
            for(i = 0; i < abs(dx); i++)
            {
                xa++;
                if(pk > 0)
                {
                    ya--;
                    pk += towdydx;
                }
                else
                {
                    pk += towdy;
                }
                LCDDotOne(xa, ya,color, LBuffer);
            }
        }
        else
        {
            pk=((dx + dy) << 1) + 1;
            LCDDotOne(xa, ya,color, LBuffer);
            for(i = 0; i < abs(dy); i++)
            {
                ya--;
                if(pk > 0)
                {
                    xa++;
                    pk -= towdydx;
                }
                else
                {
                    pk -= towdx;
                }
                LCDDotOne(xa, ya,color, LBuffer);
            }
        }
    }
}

/*******************************************************************************
* Function Name  : LCDCircle
* Description    : 输入圆心坐标和半径,用图形学中的一种算法画出圆
* Input          : x_center:横坐标(0-480)
				   y_center:纵坐标(0-240) 
				   radius:半径
				   Buffer:LCD缓冲区首地址
* Output         : None
* Return         : None
*******************************************************************************/
void LCDCircle(U32 x_center, U32 y_center, U32 radius,U32 color, PUINT8 CBuffer)
{
    S32 x;
    S32 y, delta;
    y = radius;

    delta = 3 - (radius << 1);

    for (x = 0; x <= y; x++)
    {
        LCDDotOne(x+x_center, y+y_center,color, CBuffer);
        LCDDotOne(x+x_center, -y+y_center,color, CBuffer);
        LCDDotOne(-x+x_center, -y+y_center,color, CBuffer);
        LCDDotOne(-x+x_center, y+y_center,color, CBuffer);
        LCDDotOne(y+x_center, x+y_center,color, CBuffer);
        LCDDotOne(y+x_center, -x+y_center,color, CBuffer);
        LCDDotOne(-y+x_center, -x+y_center,color, CBuffer);
        LCDDotOne(-y+x_center, x+y_center,color, CBuffer);
        if (delta < 0)
        {
            delta += (x << 2) + 6;
        }
        else
        {
            delta += ((x - y) << 2) + 10;
            y--;
        }
    }
}







void show1(void)
{   
    PUINT8 LcdBuffer;
	LCD_IMAGE_T LCD_Size;
	LCD_LOCATION_T LCD_Location;
	
	U32 Loop,j=0;
	U32 ClearLoop;
	U32 i,sinb[256];
	
	for(i=0;i<256;i++)
	  {
	     sinb[i] = sinc[i]*100+100;
	  }   
	
	for(ClearLoop = 0; ClearLoop < 230400; ClearLoop++)
    	{
    		BlackBoard[ClearLoop] =0x5;
    	}
	LCD_Size.width = 480;
	LCD_Size.height = 240;
	
	LCD_Location.StartX = 0;
	LCD_Location.StartY = 0;
	LCD_Location.EndX = 960;
	LCD_Location.EndY = 240;
	
	LCDInit();
	LCDShow(LCD_Size, LCD_Location);	

	if(key==1)
	{
		
		
		//测试各种画图函数
	
        	    
		LCDFIFOBufferSet(BlackBoard);
		LCDDisplayOn();
	   
	  
		Loop = 20;
		do
    	{
    		LCDDotOne(40 + 20 * Loop, 220,0xff, BlackBoard);
    		Delay(1000000);
        	Loop--;
    	}while(Loop);
    	
    	//画15条线
    	Loop = 15;
		do
    	{
    		LCDLine(440, 125 + 1 * Loop, 40, 125 + 5 * Loop,0xff, BlackBoard);
    		Delay(1000000);
       		Loop--;
    	}while(Loop);
    	
    	//画5个椭圆
    	Loop = 5;
		do
    	{
    		LCDCircle(80 * Loop, 65, 30,0xff, BlackBoard);
    		Delay(1000000);
       		Loop--;
    	}while(Loop);
    	
    	Delay(10000000);
    	    	
    	LCDDisplayOff();
    	for(ClearLoop = 0; ClearLoop < 230400; ClearLoop++)
    	{
    		BlackBoard[ClearLoop] =0;
    	}
	}
	
}

void show2(void)
{ 
LCDFIFOBufferSet(image_NEU);		
	temp = (U32)image_NEU;   
	 
}
void show3(void)
{
    U8 wchar[]= "东北大学"; 
	U8 war[]=   "电子信息工程";
	U8 word[]=  "刘强"; 

    LCD_IMAGE_T LCD_Size;
    LCD_LOCATION_T LCD_Location;
    LCDShowParameter LSP;
    LCDShowParameter LP;
    LCDShowParameter LS;

        	
    LCD_Size.width = 480;
    LCD_Size.height = 240;
    
    LCD_Location.StartX = 0;
    LCD_Location.StartY = 0;
    LCD_Location.EndX = 960;
    LCD_Location.EndY = 240;
    
    
    /***********图片显示*************/
    LCDInit();
    LCDShow(LCD_Size, LCD_Location);
    LCDFIFOBufferSet(BlackBoard);
    LCDDisplayOn();
    LP.StartX = 8;
    LP.StartY = 5;
    LP.LibPlace = 0x400000;
    LP.Color = 0x07ff;
    LP.LetterChar = wchar;
    LP.LCDBuffer = BlackBoard;
    /***********图形显示**************/
    LCDInit();
    LCDShow(LCD_Size, LCD_Location);
    LCDFIFOBufferSet(BlackBoard);
    LCDDisplayOn();
    
    LSP.StartX = 8;
    LSP.StartY = 7;
    LSP.LibPlace = 0x400000;
    LSP.Color = 0x07ff;
    LSP.LetterChar = war;
    LSP.LCDBuffer = BlackBoard; 
    /*************文字显示************/
    LCDInit();
    LCDShow(LCD_Size, LCD_Location);
    LCDFIFOBufferSet(BlackBoard);
    LCDDisplayOn();
    
    LS.StartX = 8;
    LS.StartY = 9;
    LS.LibPlace = 0x400000;
    LS.Color = 0x07ff;
    LS.LetterChar = word;
    LS.LCDBuffer = BlackBoard; 
    
    LCDOutputShow(LP,4);
    LCDOutputShow(LSP,6);
    LCDOutputShow(LS,2);
    
  }

⌨️ 快捷键说明

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