OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3251|回复: 3

ALPHA 开发板屏幕显示红绿蓝 颜色的问题

[复制链接]

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
发表于 2022-8-25 15:00:11 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 wang12zhe 于 2022-8-25 15:05 编辑

用出厂自带的程序
想用LCD屏幕做一个显示红绿蓝三原色的例子,但我得的屏幕上显示的颜色明显不正确,还请帮忙查找问题,非常感谢

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/mman.h>
#include<sys/ioctl.h>
#include<linux/fb.h>

typedef struct {
    int fd;
    long size;
    unsigned char *fbp;
    struct fb_var_screeninfo vinfo;
    struct fb_fix_screeninfo finfo;
}fbdev;


//画点函数
void draw_dot2(fbdev dev, int x, int y,unsigned int dwColor){
    int xres=dev.vinfo.xres;
    int yres=dev.vinfo.yres;
    int bpp=dev.vinfo.bits_per_pixel;
    long offset=(y*xres+x);
    int color = 0;
    int iRed;
    int iGreen;
    int iBlue;

    unsigned short wColor16bpp; /* 565 */
    iRed   = (dwColor >> (16+3)) & 0x1f;
    iGreen = (dwColor >> (8+2)) & 0x3f;
    iBlue  = (dwColor >> 3) & 0x1f;
    wColor16bpp = (iRed << 11) | (iGreen << 5) | iBlue;
    //wColor16bpp = 0X8010;
    *(dev.fbp+offset)=wColor16bpp | 0xFF; //设置颜色,默认为白色
    *(dev.fbp+offset + 1 )=wColor16bpp >> 8; //设置颜色,默认为白色

}

int main(){
    fbdev dev;
    dev.fd=open("/dev/fb0",O_RDWR);
    unsigned int x=0;
    unsigned int y=0;
    ioctl(dev.fd,FBIOGET_VSCREENINFO,&dev.vinfo);
    ioctl(dev.fd,FBIOGET_FSCREENINFO, &dev.finfo);

    printf("vinfo.xres=%d\n",dev.vinfo.xres);
    printf("vinfo.yres=%d\n",dev.vinfo.yres);
    printf("vinfo.bits_per_bits=%d\n",dev.vinfo.bits_per_pixel);
    printf("vinfo.xoffset=%d\n",dev.vinfo.xoffset);
    printf("vinfo.yoffset=%d\n",dev.vinfo.yoffset);
    printf("finfo.line_length=%d\n",dev.finfo.line_length);

    dev.size=dev.vinfo.xres*dev.vinfo.yres*dev.vinfo.bits_per_pixel/8;

    dev.fbp=(unsigned char*)mmap(0,dev.size,PROT_READ|PROT_WRITE,MAP_SHARED,dev.fd,0);
    memset(dev.fbp,0,dev.size);
   //红色
    for(y=0;y<160;y ++){
        for(x=0;x<800;x++)
        draw_dot2(dev, x,y,0XFF0000);
    }
    //蓝色
    for(;y<320;y ++){
        for(x=0;x<800;x++)
        draw_dot2(dev, x,y,0X00FF00);
    }
    //绿色
    for(;y<480;y ++){
        for(x=0;x<800;x++)
        draw_dot2(dev, x,y,0X0000FF);
    }

    munmap(dev.fbp,dev.size);
    close(dev.fd);
    return 0;
}


最佳答案

查看完整内容[请看2#楼]

&lcdif { pinctrl-names = "default"; pinctrl-0 = ; display = ; status = "okay"; display0: display { bits-per-pixel = ; bus-width = ; display-timings { native-mode = ; timing0: timing0 { clock-frequency = ; hactive = ; ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2022-8-25 15:00:12 | 显示全部楼层
routedhust 发表于 2022-8-26 09:33
确定是565吗?我看设备树里怎么是24bit

&lcdif {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_lcdif_dat
                     &pinctrl_lcdif_ctrl>;
        display = <&display0>;
        status = "okay";

        display0: display {
                bits-per-pixel = <16>;
                bus-width = <24>;

                display-timings {
                        native-mode = <&timing0>;
                        timing0: timing0 {
                        clock-frequency = <35500000>;
                        hactive = <800>;
                        vactive = <480>;
                        hfront-porch = <210>;
                        hback-porch = <46>;
                        hsync-len = <20>;
                        vback-porch = <23>;
                        vfront-porch = <22>;
                        vsync-len = <3>;

                        hsync-active = <0>;
                        vsync-active = <0>;
                        de-active = <1>;
                        /* rgb to hdmi: pixelclk-ative should be set to 1 */
                        pixelclk-active = <0>;
                        };
                };
        };
};
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2022-8-26 00:38:26 | 显示全部楼层
帮顶
回复

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2020-10-19
在线时间
17 小时
发表于 2022-8-26 09:33:37 | 显示全部楼层
确定是565吗?我看设备树里怎么是24bit
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 09:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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