首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

想学习Linux应用层怎么使用lcd驱动

2013-01-19 
想学习Linux应用层如何使用lcd驱动小弟入门级别,做过几个简单的字符模块驱动,不知道lcd驱动是否类似,想请

想学习Linux应用层如何使用lcd驱动
小弟入门级别,做过几个简单的字符模块驱动,不知道lcd驱动是否类似,想请教lcd驱动在应用层的使用
[解决办法]
我写过对LCD驱动在应用层的调用,并且整理过一些文档,你可以去我CSDN主页去看看,http://blog.csdn.net/weiqing1981127/article/details/8312571另外给你贴个LCD测试代码

#include <unistd.h>

#include <stdlib.h>

#include <stdio.h>

#include <fcntl.h>

#include <linux/fb.h>

#include <sys/mman.h>

int main()

{

       int fbfd=0;

       struct fb_var_screeninfo vinfo;

       unsigned long screensize=0;

       char *fbp=0;

       int x=0,y=0,i=0;

       fbfd=open("/dev/fb0",O_RDWR);  //打开帧缓冲设备

       if(!fbfd){

              printf("error\n");

              exit(1);

       }

       if(ioctl(fbfd,FBIOGET_VSCREENINFO,&vinfo)){  //获取屏幕可变参数

              printf("error\n");

              exit(1);

       }

       //打印屏幕可变参数

       printf("%dx%d,%dbpp\n",vinfo.xres,vinfo.yres,vinfo.bits_per_pixel);

       screensize=vinfo.xres*vinfo.yres*2;  //缓冲区字节大小

       fbp=(char *)mmap(0,screensize,PROT_READ
[解决办法]
PROT_WRITE,MAP_SHARED,fbfd,0);//映射

       if((int)fbp==-1){

              printf("error\n");

              exit(4);

       }     

       for(i=0;i<3;i++){ //画图

              for(y=i*(vinfo.yres/3);y<(i+1)*(vinfo.yres/3);y++){

              for(x=0;x<vinfo.xres;x++){

              long location=x*2+y*vinfo.xres*2;

              int r=0,g=0,b=0;

              unsigned short rgb;

              if (i==0)

                     r=((x*1.0)/vinfo.xres)*32;

              if (i==1)

                     g=((x*1.0)/vinfo.xres)*64;



              if (i==2)

                     b=((x*1.0)/vinfo.xres)*32;

              rgb=(r<<11)
[解决办法]
(g<<5)
[解决办法]
b;

              *((unsigned short *)(fbp+location))=rgb;

       }

       }

    }

       munmap(fbp,screensize);

       close(fbfd);

       return 0; 

}

虚拟机下编译arm-linux-gcc  lcd.c  -o  lcd

在超级终端下运行:./lcd

可以见到:屏幕上有三道颜色

热点排行