LCD控制实验—于青林
班级:计算机应用技术1班 姓名:于青林 学号:0906041017
一、利用for循环改变像素的值使色带向右移动
#include
#include
#include
#include // open() close()
#include // read() write()
#define DEVICE_NAME "/dev/fb0"
#define VERSION "PXA270RP-LCD-V1.00-090101"
void showversion(void)
{
printf("*********************************************\n");
printf("\t %s \t\n", VERSION);
printf("*********************************************\n\n");
}
int main(void)
{
int fd;
int ret;
int i,j,p=0;
int row=480,colu=200;
unsigned short buf[480][800];
showversion();
printf("\nstart test_lcd test\n\n");
fd = open(DEVICE_NAME, O_RDWR);
printf("fd = %d\n",fd);
if (fd == -1)
{
printf("open device %s error\n",DEVICE_NAME);
}
else
{
for(i=0;i<480;i++){
for(j=0;j<800;j++)
buf[i][j]=0x0001;
}
ret=write(fd,buf,sizeof(buf));
usleep(100000);
close(fd);
}
while(1){
fd = open(DEVICE_NAME, O_RDWR);
for(i=0;i
for(j=p;j
buf[i][j%800]=0xf800;
for(j=colu+p;j<2*colu+p;j++)
buf[i][j%800]=0x07ef;
for(j=2*colu+p;j<3*colu+p;j++)
buf[i][j%800]=0x07ff;
for(j=3*colu+p;j<4*colu+p;j++)
buf[i][j%800]=0xffe0;
}
ret=write(fd,buf,sizeof(buf));
close(fd);
usleep(100000);
p=p+20;
}
if(getchar()>0){
system("cat fb >/dev/fb0");
system("cat apl_test/fb >/dev/fb0");
}
return 0;
} // end main
实验结果:显示四个色带,且每次向右移二十个像素,移到最右侧超出屏幕的部分将在最左侧显示,使之成为一个循环显示;
二、每个色带所在像素值固定,每次通过数组改变颜色的值使每个色带变色。
把上面程序中的while(1)用以下的while(1)替换
int c=0;
int color[4]={0x07ef,0xffe0,0xf81f,0x1258}; //存放颜色的数组;
while(1){
fd = open(DEVICE_NAME, O_RDWR);
for(i=0;i<480;i++){
for(j=0;j<800/4;j++)
buf[i][j]=color[c%4];
for(j=800/4;j<800/2;j++)
buf[i][j]=color[(c+1)%4];
for(j=800/2;j<800*3/4;j++)
buf[i][j]=color[(c+2)%4];
for(j=800*3/4;j<800;j++)
buf[i][j]=color[(c+3)%4];
}
c++;
ret=write(fd,buf,sizeof(buf));
close(fd);
usleep(1000000);
}
实验结果:显示四个色带,且其中的颜色按数组所定义的颜色循环改变。
三、根据(一)中的while循环改变,可实现色带沿对角线的方向依次分布。其实是昨天做实验,把p=p+1写到了外层for循环中,结果出现了非预期的沿对角线分布的结果。
fd = open(DEVICE_NAME, O_RDWR);
for(i=0;i
for(j=p;j
buf[i][j%800]=0xf800;
for(j=colu+p;j<2*colu+p;j++)
buf[i][j%800]=0x07ef;
for(j=2*colu+p;j<3*colu+p;j++)
buf[i][j%800]=0x07ff;
for(j=3*colu+p;j<4*colu+p;j++)
buf[i][j%800]=0xffe0;
p=p+1;
}
ret=write(fd,buf,sizeof(buf));
close(fd);
usleep(100000);