?? tuxing.h
字號:
#include <stdio.h>
#include "710defs.h"
#include "HB_it.h"
#include "main.h"
#include "lcd_pattern.h"
double sinc[128]={
0.000000,0.098017,0.195090,0.290285,0.382683,
0.471397,0.555570,0.634393,0.707107,0.773010,
0.831470,0.881921,0.923880,0.956940,0.980785,
0.995185,1.00000,0.995185,0.980785,0.956940,
0.923880,0.881921,0.831470,0.773010,0.707107,
0.634393,0.555570,0.471397,0.382683,0.290285,
0.195090,0.098017,0.000000,-0.098017,-0.195090,
-0.290285,-0.382683,-0.471397,-0.555570,-0.634393,
-0.707107,-0.773010,-0.831470,-0.881921,-0.923880,
-0.956940,-0.980785,-0.995185,-1.00000,-0.995185,
-0.980785,-0.956940,-0.923880,-0.881921,-0.831470,
-0.773011,-0.707107,-0.634393,-0.555570,-0.471397,
-0.382684,-0.290285,-0.195090,-0.098017,-0.000000,
0.098017,0.195090,0.290285,0.382683,0.471397,
0.555570,0.634393,0.707107,0.773010,0.831470,
0.881921,0.923879,0.956940,0.980785,0.995185,
1.00000,0.995185,0.980785,0.956940,0.923880,
0.881921,0.831470,0.773011,0.707107,0.634393,
0.555570,0.471397,0.382684,0.290285,0.195090,
0.098017,0.000000,-0.098017,-0.195090,-0.290285,
-0.382683,-0.471397,-0.555570,-0.634393,-0.707107,
-0.773010,-0.831470,-0.881921,-0.923879,-0.956940,
-0.980785,-0.995185,-1.00000,-0.995185,-0.980785,
-0.956940,-0.923880,-0.881921,-0.831470,-0.773011,
-0.707107,-0.634393,-0.555570,-0.471397,-0.382684,
-0.290285,-0.195091,-0.098017,
};
int main(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);
while(1)
{
//顯示LOGO
LCDFIFOBufferSet(ImageNEU);
LCDDisplayOn();
Delay(20000000);
LCDDisplayOff();
//測試各種畫圖函數
LCDFIFOBufferSet(BlackBoard);
LCDDisplayOn();
while(1){
if(j>56)
j=0;
Loop = 0;
do
{
LCDLine(400 - Loop<<1,sinb[(Loop+j)%128],399 - Loop<<1,sinb[(Loop+j+1)%128],0xff,BlackBoard);
//LCDDotOne(400 - Loop,sinb[(Loop+j)%256],0xff,BlackBoard);
Loop++;
}while(Loop<127);
Delay(200000);
Loop=0;
do
{
LCDLine(400 - Loop<<1,sinb[(Loop+j)%128],399 - Loop<<1,sinb[(Loop+j+1)%128],0x5,BlackBoard);
//LCDDotOne(400 - Loop,sinb[(Loop+j)%256],0x5,BlackBoard);
Loop++;
}while(Loop<127);
j++;
}
//畫20個點
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;
}
}
return 0;
}
/*******************************************************************************
* Function Name : LCDInit
* Description : LCD初始化
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void LCDInit(void)
{
REG_GPIO_CFG6 = 0x555555;
REG_LCD_LCDCON = 0x30c05;
REG_LCD_FIFO1PRM = 0xa;
REG_LCD_F1DREQCNT = 0x1e000f0;
REG_LCD_FIFO1RELACOLCNT = 0x1e0;
//LCD CLK
REG_LCD_LCDTCON1 = 0x3b166;
REG_LCD_LCDTCON2 = 0x3bf00f1;
REG_LCD_LCDTCON3 = 0x105401;
REG_LCD_LCDTCON4 = 0x20101;
REG_LCD_LCDTCON5 = 0xe;
}
/*******************************************************************************
* Function Name : LCDShow
* Description : 設置LCD顯示位置
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void LCDShow(LCD_IMAGE_T Size, LCD_LOCATION_T Location)
{
REG_LCD_F1DREQCNT = (Size.width <<15 ) + Size.height;
REG_LCD_FIFO1RELACOLCNT = (Size.width >> 1);
REG_LCD_DISPWINS = (Location.StartY << 16) + Location.StartX;
REG_LCD_DISPWINE = (Location.EndY << 16) + Location.EndX;
}
/*******************************************************************************
* Function Name : LCDShow
* Description : 設置LCD顯示位置
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void LCDFIFOBufferSet(PUINT8 Buffer)
{
REG_LCD_F1SADDR = (U32) Buffer;
}
/*******************************************************************************
* Function Name : LCDDisplayOn
* Description : 打開LCD
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void LCDDisplayOn(void)
{
lcdIoctl(1, 1, 0);
}
/*******************************************************************************
* Function Name : LCDDisplayOff
* Description : 關閉LCD
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void LCDDisplayOff(void)
{
lcdIoctl(1, 2, 0);
// REG_LCD_LCDCON &= 0xfeffffff;
}
/*******************************************************************************
* Function Name : Delay
* Description : 用于不精確延時
* Input : 延時時間
* Output : None
* Return : None
*******************************************************************************/
void Delay(U32 t)
{
do
{
t--;
}while(t);
}
/*******************************************************************************
* Function Name : LCDDotOne
* Description : 畫任意點函數
* Input : x:橫坐標(0-480)
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--;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -