天嵌 ARM开发社区

 找回密码
 注册
查看: 1657|回复: 3

【求助,关于LCD】

[复制链接]
spkk 发表于 2011-11-10 04:22:07 | 显示全部楼层 |阅读模式
我想通过framebuffer来控制LCD的显示,板子是TQ2440,屏幕是4.3寸板子自带屏,烧的是原厂2.6.30镜像和文件系统,删除了/bin中的qt程序,目前遇到的问题是,可以正常初始化LCD,可以控制像素点变黑,但是在做划线函数时遇到了问题,例如我想的到从屏幕顶端到屏幕底端一条垂直的直线,我的想法是通过控制直线上每一个像素点的颜色来实现划线,但是画出来的线却被分为若干个部分,水平直线也如此……
初始化函数:
int init_LCD()
{
/*打开设备文件*/
fbfd = open("/dev/fb0", O_RDWR);
if(fbfd<=0)
{
        printf("open dev error");
}
/*屏幕相关参数*/
if(ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo))printf("get finfo error");
if(ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo))printf(
"get vinfo error");

printf("xres v is %d \n",vinfo.xres_virtual);
printf("yres v is %d \n",vinfo.yres_virtual);
printf("xres is %d \n",vinfo.xres);
printf("yres is %d \n",vinfo.yres);
printf("offset X,Y %d,%d\n",vinfo.xoffset,vinfo.yoffset);
printf("pixel is %d",vinfo.bits_per_pixel);

vinfo.xoffset=0;
vinfo.yoffset=0;
/*屏幕缓冲区大小*/
screensize = vinfo.xres*vinfo.yres*vinfo.bits_per_pixel/8;
printf("2\n");
/*映射屏幕缓冲区到用户地址空间*/
printf("3\n");
fbp=(char*)mmap(0,screensize,PROT_READ|PROT_WRITE,MAP_SHARED,fbfd,0);
printf("fbp is %d\n",(int)fbp);
if((int)fbp==-1){printf("mmap error\n");}
}

填充像素点函数:
void fill_pixel(int x,int y,unsigned short color)
{
        unsigned short offset;
        offset=((y*vinfo.xres*2)+(x*2));
        *(unsigned short*)(fbp+offset)=color;
        offset=0;
}

划线函数:
void fill_line(int x1,int y1,int x2,int y2,int color)
{
        int xlen,ylen,y_tmp,i;
        xlen=x2-x1;ylen=y2-y1;
        if(x1==x2)
        {
                for(i=0;i<abs(ylen);i++)
                {
                        fill_pixel(x1,y1+i,color);
                }
        }
        if(y1==y2)
        {
                for(i=0;i<abs(xlen);i++)
                {
                        fill_pixel(x1+i,y1,color);
                }
        }
        if(x1!=x2&&y1!=y2)
        {
                for(i=0;i<xlen;i++)
                {
                        y_tmp=(ylen/xlen)*i+y1-(ylen/xlen);//y=kx+b
                        fill_pixel(x1+i,y_tmp,color);
                }
        }
}
已经熬了两个通宵了……仍然没有什么进展…望版主及各位大侠指教……
TQ_guoxixiao 发表于 2011-11-10 09:56:15 | 显示全部楼层
你贴出来的代码,看不出明显的错误。
建议你的程序的功能,从简单的逐步开始添加。
开始程序只画一条固定线。
 楼主| spkk 发表于 2011-11-10 13:35:53 | 显示全部楼层
额……我就是想先画点,后划线,再画面……版主,是不是这个LCD的坐标分布有什么讲究啊…
亚瑟王 发表于 2011-11-14 16:18:27 | 显示全部楼层
LCD的坐标就是从0.0到480.272的。你的代码里面画点的函数好像弄错了,我们的驱动是16位色的,应该是x×y×2,你的弄成了x×y×2×2,所以只能控制四分之一。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-9-28 05:35 , Processed in 1.024348 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表