读书人

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

发布时间: 2013-01-19 11:41:36 作者: rapoo

想学习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

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

读书人网 >驱动开发

热点推荐