1.开发环境 ubuntu arm-linux-gcc
2.开发板 粤嵌开发板 通过文件的操作改变屏幕(lcd)
代码:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>
int main()
{
int fd;
fd = open("/dev/fb0",O_RDWR);
if(fd<0)
{
printf("open icd fail");
return -1;
}
//lcd映射(效率高)
int *addr;
addr = mmap(NULL,
800*480*4, //长度
PROT_READ|PROT_WRITE, //权限
MAP_SHARED, //标志量
fd, //文件描述符
0 //偏移量
);
int red=0x00ff0000;
int green=0x0000ff00;
int blue=0x000000ff;
int black=0x00000000;
int white=0x00ffffff;
int gold=0x00FFD700;
int fen = 0x00ff80c0;
int color[]={green,red,blue,fen,black,gold};
int c1=1,c2=0;
int x,y;
int a=400,b=240,r=50;
int m=3,n=6; //移动速度
int a1 = 600,b1 = 300,r1 = 50;
int m1=3,n1=6;
while(1)
{
for(y=0;y<480;y++)
{
for(x=0;x<800;x++)
{
//背景色
*(addr+y*800+x)=white;
//圆1
if((x-a)*(x-a)+(y-b)*(y-b)<=r*r)
*(addr+y*800+x)=color[c1];
//圆2
if((x-a1)*(x-a1)+(y-b1)*(y-b1)<=r1*r1)
*(addr+y*800+x)=color[c2];
}
}
//颜色循环
if(c1>5)c1=0;
if(c2>5)c2=0;
//圆1反弹
a+=m,b+=n;
if(a>800-r || a<r)
{
m=0-m;
c1++;
}
if(b>480-r || b<r)
{
n=0-n;
c1++;
}
//圆2反弹
a1+=m1,b1+=n1;
if(a1>800-r1 || a1<r1)
{
m1=0-m1;
c2++;
}
if(b1>480-r1 || b1<r1)
{
n1=0-n1;
c2++;
}
if((a1-a)*(a1-a)+(b1-b)*(b1-b)<=(r1+r)*(r1+r))
{
//两球相碰反弹
m=0-m;n=0-n;
m1=0-m1;n1=0-n1;
c1++;
c2++;
}
}
close(fd);
return 0;
}
效果截图: