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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通