📄 e0720f93319f001d1d70866674efd667
字号:
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <sys/alt_cache.h>
#include "system.h"
#include "anywhere_avalon_lcd_regs.h"
int main()
{
alt_u32 nBGOffset;
alt_u32 nFG1Offset;
alt_u16 nBGWidth;
alt_u16 nBGHeight;
alt_u16 nFG1Width;
alt_u16 nFG1Height;
alt_u16 nFG1PosX;
alt_u16 nFG1PosY;
alt_u8 nFG1Alpha;
alt_u16 nFG1TransColor;
alt_16 nStepX;
alt_16 nStepY;
nBGOffset=EXT_SSRAM_BASE;
nBGWidth=640;
nBGHeight=480;
nFG1Offset=nBGOffset+nBGWidth*nBGHeight*2;
nFG1Width=20;
nFG1Height=20;
nFG1PosX=100;
nFG1PosY=100;
nFG1Alpha=128;
nFG1TransColor=0x1234;
nStepX=2;
nStepY=2;
//initialize LCD Controller
//Enable 2 layers
IOWR_ANYWHERE_AVALON_LCD_LAYER_EN(CONTROLLER_BASE,0x03);
//Set read mode
IOWR_ANYWHERE_AVALON_LCD_READ_MODE(CONTROLLER_BASE,0x03);
//Enalbe transparency
IOWR_ANYWHERE_AVALON_LCD_TRANS_EN(CONTROLLER_BASE,0x02);
//Set layer start address
IOWR_ANYWHERE_AVALON_LCD_BG_STARTADDR(CONTROLLER_BASE,nBGOffset);
IOWR_ANYWHERE_AVALON_LCD_FG1_STARTADDR(CONTROLLER_BASE,nFG1Offset);
//Set foreground layer 1
IOWR_ANYWHERE_AVALON_LCD_FG1_WIDTH(CONTROLLER_BASE,nFG1Width);
IOWR_ANYWHERE_AVALON_LCD_FG1_HEIGHT(CONTROLLER_BASE,nFG1Height);
IOWR_ANYWHERE_AVALON_LCD_FG1_X(CONTROLLER_BASE,nFG1PosX);
IOWR_ANYWHERE_AVALON_LCD_FG1_Y(CONTROLLER_BASE,nFG1PosY);
IOWR_ANYWHERE_AVALON_LCD_FG1_ALPHA(CONTROLLER_BASE,nFG1Alpha);
IOWR_ANYWHERE_AVALON_LCD_FG1_TRANSCOLOR(CONTROLLER_BASE,nFG1TransColor);
//Enable LCD Controller
IOWR_ANYWHERE_AVALON_LCD_CTRL(CONTROLLER_BASE,0x01);
//Draw
alt_u16 *pPixel;
for(pPixel=(alt_u16 *)nBGOffset;pPixel<(alt_u16 *)(nBGOffset+nBGWidth*nBGHeight*2);pPixel++)
{
alt_u8 x;
alt_u8 y;
x=((((alt_u32)pPixel-nBGOffset)/2)%nBGWidth/40)%2;
y=((((alt_u32)pPixel-nBGOffset)/2)/nBGWidth/40)%2;
if(x==y)
{
*pPixel=0xf800;
}
else
{
*pPixel=0x001f;
}
/*
alt_u16 x;
alt_u16 y;
alt_u32 d;
x=(((alt_u32)pPixel-nBGOffset)/2)%nBGWidth;
y=(((alt_u32)pPixel-nBGOffset)/2)/nBGWidth;
d=(x-320)*(x-320)+(y-240)*(y-240);
if(d<200*200)
{
*pPixel=0x07e0;
}
else
{
*pPixel=0xffff;
}
*/
}
for(pPixel=(alt_u16 *)nFG1Offset;pPixel<(alt_u16 *)(nFG1Offset+nFG1Width*nFG1Height*2);pPixel++)
{
alt_u16 x;
alt_u16 y;
alt_u32 d;
x=(((alt_u32)pPixel-nFG1Offset)/2)%nFG1Width;
y=(((alt_u32)pPixel-nFG1Offset)/2)/nFG1Width;
d=(x-nFG1Width/2)*(x-nFG1Width/2)+(y-nFG1Height/2)*(y-nFG1Height/2);
if(d<10*10)
{
*pPixel=0x07e0;
}
else
{
*pPixel=nFG1TransColor;
}
//*pPixel=0x07e0;
}
alt_dcache_flush_all();
while(1)
{
alt_u32 nCount;
nCount=200000;
while(nCount--);
nFG1PosX+=nStepX;
if(nFG1PosX==0 || nFG1PosX+nFG1Width==nBGWidth)
{
nStepX=-nStepX;
}
nFG1PosY+=nStepY;
if(nFG1PosY==0 || nFG1PosY+nFG1Height==nBGHeight)
{
nStepY=-nStepY;
}
IOWR_ANYWHERE_AVALON_LCD_FG1_X(CONTROLLER_BASE,nFG1PosX);
IOWR_ANYWHERE_AVALON_LCD_FG1_Y(CONTROLLER_BASE,nFG1PosY);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -