#include "include.h"
volatile U32 LCD_BUFFER[LCD_HEIGHT][LCD_WIDTH]; //定义显示缓存区
void delay(U32 t) //延时程序
{
while(t--);
}
void Lcd_Init(void) //LCD初始化
{
//配置LCD相关引脚
rGPCUP = 0xffffffff;
rGPCCON = 0xaaaaaaaa; //配置为LCD接口
rGPDUP = 0xffffffff;
rGPDCON = 0xaaaaaaaa; //配置为LCD接口
rGPGUP = rGPGUP|(1<<4); //GPG4上拉电阻无效
rGPGCON = rGPGCON|(3<<8); //设置GPG4为LCD_PWREN
rGPGDAT = rGPGDAT|(1<<4) ; //GPG4置1
//配置LCD控制器
rLCDCON1=(CLKVAL_TFT<<8)|(MMODE<<7)|(PNRMODE_TFT<<5)|(BPPMODE_TFT<<1)|0;
rLCDCON2=(VBPD<<24)|(LINEVAL<<14)|(VFPD<<6)|(VSPW<<0);
rLCDCON3=(HBPD<<19)|(HOZVAL<<8)|(HFPD<<0);
rLCDCON4=(HSPW<<0); //MMODE=0即MVAL不要配置
rLCDCON5 = (BPP24BL<<12)|(INVVCLK<<10)|(INVVLINE<<9)|(INVVFRAME<<8)|(INVVD<<7)|(INVVDEN<<6)|(INVPWREN<<5)|(PWREN<<3)|(BSWP<<1)|(HWSWP<<0);
//配置LCD缓冲地址
rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);
rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(LCD_WIDTH*LCD_HEIGHT*4))>>1 );
rLCDSADDR3=LCD_WIDTH*32/16;
}
void Lcd_Clear(U32 a) //全屏填充特定颜色或清屏,颜色为a
{
U32 x,y ;
for(y=0;y<LCD_HEIGHT;y++)
{
for(x=0;x<LCD_WIDTH;x++)
{
LCD_BUFFER[y][x] = a ;
}
}
}
//画实心圆,颜色为c。圆心在屏幕中心(160,120),半径为80个像素
void Draw_Circular(U32 c)
{
U32 x,y;
U32 tempX,tempY;
U32 radius = 80;
U32 SquareOfR = radius*radius;
for(y=0;y<LCD_HEIGHT;y++)
{
for(x=0;x<LCD_WIDTH;x++)
{
if(y<=120 && x<=160)
{
tempY=120-y;
tempX=160-x;
}
else if(y<=120&& x>=160)
{
tempY=120-y;
tempX=x-160;
}
else if(y>=120&& x<=160)
{
tempY=y-120;
tempX=160-x;
}
else
{
tempY=y-120;
tempX=x-160;
}
if ((tempY*tempY+tempX*tempX)<=SquareOfR) //X*X+Y*Y<=R*R
LCD_BUFFER[y][x]=c;
}
}
}