免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 814 | 回复: 0
打印 上一主题 下一主题

LCD控制实验—于青林 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-23 03:25 |只看该作者 |倒序浏览

班级:计算机应用技术1班   姓名:于青林   学号:0906041017

一、利用for循环改变像素的值使色带向右移动

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <fcntl.h>      // open() close()

#include <unistd.h>     // 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<row;i++){

                            for(j=p;j<colu+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<row;i++){

                            for(j=p;j<colu+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);

               
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP