📄 main.c
字号:
#include <stdio.h>
#include "710defs.h"
#include "HB_it.h"
#include "main.h"
#include "lcd_pattern.h"
int main(void)
{
U8 LBuffer[512]={0};
U32 ClearLoop;
LCD_IMAGE_T LCD_Size;
LCD_LOCATION_T LCD_Location;
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();
for(ClearLoop = 0; ClearLoop < 115200; ClearLoop++)
{
BlackBoard[ClearLoop*2] =0x07;
BlackBoard[ClearLoop*2+1] =0xff;
}
LetterConvert(NI, LBuffer);
LetterShow(224, 52, LBuffer, BlackBoard);
Delay(3000000);
LetterConvert(Ying, LBuffer);
LetterShow(352, 52, LBuffer, BlackBoard);
Delay(3000000);
LetterConvert(Shi, LBuffer);
LetterShow(480, 52, LBuffer, BlackBoard);
Delay(3000000);
LetterConvert(Yong, LBuffer);
LetterShow(608, 52, LBuffer, BlackBoard);
Delay(3000000);
LetterConvert(Hua, LBuffer);
LetterShow(96, 122, LBuffer, BlackBoard);
Delay(3000000);
LetterConvert(Bang, LBuffer);
LetterShow(224, 122, LBuffer, BlackBoard);
Delay(3000000);
LetterConvert(Sshi, LBuffer);
LetterShow(352, 122, LBuffer, BlackBoard);
Delay(3000000);
LetterConvert(Yan, LBuffer);
LetterShow(480, 122, LBuffer, BlackBoard);
Delay(3000000);
LetterConvert(Xi, LBuffer);
LetterShow(608, 122, LBuffer, BlackBoard);
Delay(3000000);
LetterConvert(Tong, LBuffer);
LetterShow(736, 122, LBuffer, BlackBoard);
Delay(3000000);
while(1)
{
}
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, PUINT8 Buffer)
{
PUINT8 temp = Buffer;
* (temp + ((480 * y + x) << 1)) = 0xff;
* (temp + (((480 * y + x) << 1) + 1)) = 0xff;
}
/*******************************************************************************
* 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, 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, 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, LBuffer);
}
}
else
{
pk=((dx+dy)<<1)-1;
LCDDotOne(xa, ya, LBuffer);
for(i=0;i<abs(dy);i++)
{
ya++;
if(pk>0)
{
xa++;
pk-=towdydx;
}
else
{
pk+=towdx;
}
LCDDotOne(xa, ya, LBuffer);
}
}
}
else
{
towdy=(-1) * (dy << 1);
towdx=(-1) * (dx << 1);
towdydx=(-1) * ((dx + dy) << 1);
LCDDotOne(xa, ya, 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, LBuffer);
}
}
else
{
pk=((dx + dy) << 1) + 1;
LCDDotOne(xa, ya, LBuffer);
for(i = 0; i < abs(dy); i++)
{
ya--;
if(pk > 0)
{
xa++;
pk -= towdydx;
}
else
{
pk -= towdx;
}
LCDDotOne(xa, ya, 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, 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, CBuffer);
LCDDotOne(x+x_center, -y+y_center, CBuffer);
LCDDotOne(-x+x_center, -y+y_center, CBuffer);
LCDDotOne(-x+x_center, y+y_center, CBuffer);
LCDDotOne(y+x_center, x+y_center, CBuffer);
LCDDotOne(y+x_center, -x+y_center, CBuffer);
LCDDotOne(-y+x_center, -x+y_center, CBuffer);
LCDDotOne(-y+x_center, x+y_center, CBuffer);
if (delta < 0)
{
delta += (x << 2) + 6;
}
else
{
delta += ((x - y) << 2) + 10;
y--;
}
}
}
void LetterConvert(PUINT8 LetterMode, PUINT8 LetterBuffer)
{
U32 BitCounter = 8; //8
U32 ByteCounter = 0; //32
U32 temp;
for(ByteCounter = 0; ByteCounter < 512; ByteCounter++)
{
BitCounter = 8;
temp = LetterMode[ByteCounter];
for(BitCounter = 0; BitCounter < 8; BitCounter++)
{
if((temp & 0x80) == 0x80)
{
LetterBuffer[(ByteCounter << 4) + (BitCounter << 1)] = 0x07;
LetterBuffer[(ByteCounter << 4) + (BitCounter << 1) + 1] = 0xe0;
}
else
{
LetterBuffer[(ByteCounter << 4) + (BitCounter << 1)] = 0x07;
LetterBuffer[(ByteCounter << 4) + (BitCounter << 1) + 1] = 0xff;
}
temp <<= 1;
}
}
}
/*void LetterShow(U32 LetterX, U32 LetterY, PUINT8 LetterBuffer, PUINT8 LCDBuffer) //30*15
{
U32 DotX = 0, DotY = 0, Line = 0, Row = 0;
for(Row = 0; Row < 16; Row++)
{
for(Line = 0; Line < 16; Line++)
{
DotX = 16 * LetterX + Line;
DotY = 16 * LetterY + Row;
LCDDotOne(DotX, DotY, LCDBuffer);
}
}
}*/
void LetterShow(U32 LetterX, U32 LetterY, PUINT8 LetterBuffer, PUINT8 LCDBuffer)
{
U32 DotX = 0, DotY = 0, Line = 0, Row = 0;
for(Row = 0; Row < 64; Row++)
{
for(Line = 0; Line < 128; Line++)
{
DotX = LetterX + Line;
DotY = LetterY + Row;
LCDBuffer[DotX+960*DotY] = LetterBuffer[Line+128*Row];
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -