📄 main.c
字号:
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 + -