基于am3358的lcd输出


/*#include<stdio.h>

*/
#include <unistd.h>   
#include <stdio.h>   
#include <stdlib.h>   
#include <fcntl.h>   
#include <string.h>   
#include <linux/fb.h>   
#include <sys/mman.h>   
#include <sys/ioctl.h>   
#include <arpa/inet.h>   
  
  
//14byteÎÄŒþÍ·   
typedef struct  
{  
    char cfType[2];//ÎÄŒþÀàÐÍ£¬"BM"(0x4D42)   
    long cfSize;//ÎÄŒþŽóС£š×֜ڣ©   
    long cfReserved;//±£Áô£¬ÖµÎª0   
    long cfoffBits;//ÊýŸÝÇøÏà¶ÔÓÚÎÄŒþÍ·µÄÆ«ÒÆÁ¿£š×֜ڣ©   
}__attribute__((packed)) BITMAPFILEHEADER;  
//__attribute__((packed))µÄ×÷ÓÃÊÇžæËß±àÒëÆ÷È¡Ïûœá¹¹ÔÚ±àÒë¹ý³ÌÖеÄÓÅ»¯¶ÔÆë   
  
//40byteÐÅϢͷ   
typedef struct  
{  
    char ciSize[4];//BITMAPFILEHEADERËùÕŒµÄ×ÖœÚÊý   
    long ciWidth;//¿í¶È   
    long ciHeight;//žß¶È   
    char ciPlanes[2];//Ä¿±êÉ豞µÄλƜÃæÊý£¬ÖµÎª1   
    int ciBitCount;//ÿžöÏñËصÄλÊý   
    char ciCompress[4];//ѹËõ˵Ã÷   
    char ciSizeImage[4];//ÓÃ×֜ڱíÊŸµÄÍŒÏñŽóС£¬žÃÊýŸÝ±ØÐëÊÇ4µÄ±¶Êý   
    char ciXPelsPerMeter[4];//Ä¿±êÉ豞µÄˮƜÏñËØÊý/Ã×   
    char ciYPelsPerMeter[4];//Ä¿±êÉ豞µÄŽ¹Ö±ÏñËØÊý/Ã×   
    char ciClrUsed[4]; //λ͌ʹÓõ÷É«°åµÄÑÕÉ«Êý   
    char ciClrImportant[4]; //Öž¶šÖØÒªµÄÑÕÉ«Êý£¬µ±žÃÓòµÄÖµµÈÓÚÑÕÉ«Êýʱ£š»òÕßµÈÓÚ0ʱ£©£¬±íÊŸËùÓÐÑÕÉ«¶ŒÒ»ÑùÖØÒª   
}__attribute__((packed)) BITMAPINFOHEADER;  
  
typedef struct  
{  
    unsigned short blue;  
    unsigned short green;  
    unsigned short red;  
    unsigned short reserved;  
}__attribute__((packed)) PIXEL;//ÑÕɫģʜRGB   
  
BITMAPFILEHEADER FileHead;  
BITMAPINFOHEADER InfoHead;  
  
static char *fbp = 0;  
static int xres = 0;  
static int yres = 0;  
static int bits_per_pixel = 0;  
  
int  showbmp2();


int main ( int argc, char *argv[] )  
{  
    int fbfd = 0; 
    int index=0; 
    struct fb_var_screeninfo vinfo;  
    struct fb_fix_screeninfo finfo;  
    long int screensize = 0;  
    struct fb_bitfield red;  
    struct fb_bitfield green;  
    struct fb_bitfield blue;  
  
    //open the showdeviece
    fbfd = open("/dev/fb0", O_RDWR);  
    if (!fbfd)  
    {  
        printf("Error: cannot open framebuffer device.\n");  
        exit(1);  
    }  
  
    if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo))  
    {  
        printf("Error£ºreading fixed information.\n");  
        exit(2);  
    }  
  
    if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo))  
    {  
        printf("Error: reading variable information.\n");  
        exit(3);  
    }  
  
    printf("R:%d,G:%d,B:%d \n", vinfo.red, vinfo.green, vinfo.blue );  
  
    printf("%dx%d, %dbpp,%d clock\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel,vinfo.pixclock );  
    xres = vinfo.xres;  
    yres = vinfo.yres;  
    bits_per_pixel = vinfo.bits_per_pixel;  
  
    //ŒÆËãÆÁÄ»µÄ×ÜŽóС£š×֜ڣ©   
    screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;  
    printf("screensize=%d byte\n",screensize);  
  
    //¶ÔÏóÓ³Éä   
    fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0);  
    if ((int)fbp == -1)  
    {  
        printf("Error: failed to map framebuffer device to memory.\n");  
        exit(4);  
    }  
  
    printf("sizeof file header=%d\n", sizeof(BITMAPFILEHEADER));  
  
    printf("into show_bmp function\n");  
  
    showbmp2();

    //ÉŸ³ý¶ÔÏóÓ³Éä   
    munmap(fbp, screensize);  


//
    close(fbfd);  

    return 0;  
}  
///*  
  unsigned char buf[3][1680*1050*4];
  unsigned char data[640*480*3];
int  showbmp2()
{
    int x,y;

    int index=0;
    unsigned char *p;
    FILE *fp[3];

        fp[0] = fopen("./000.bmp","rb+");
        fp[1] = fopen("./111.bmp","rb+");
        fp[2] = fopen("./222.bmp","rb+");

    fread(data,54,1,fp[0]);
    fread(data,640*480*3,1,fp[0]);
    for(y=0;y<480;y++)
    {
	for(x=0;x<800;x++)
	{
            if(x<640)
            {
            	buf[0][((479-y)*800+x)*4 + 0] = data[((y*640) + x)*3 + 0];
                buf[0][((479-y)*800+x)*4 + 1] = data[((y*640) + x)*3 + 1];
                buf[0][((479-y)*800+x)*4 + 2] = data[((y*640) + x)*3 + 2];
                //buf[1][(479-y)*1680+x)*4 + 3] = data[((y*640) + x)*3 + 0];
            }
	}
    }
//
    fread(data,54,1,fp[1]);
    fread(data,640*480*3,1,fp[1]);
    for(y=0;y<480;y++)
    {
	for(x=0;x<1680;x++)
	{
            if(x<640)
            {
            	buf[1][((479-y)*800+x)*4 + 0] = data[((y*640) + x)*3 + 0];
                buf[1][((479-y)*800+x)*4 + 1] = data[((y*640) + x)*3 + 1];
                buf[1][((479-y)*800+x)*4 + 2] = data[((y*640) + x)*3 + 2];
                //buf[1][(479-y)*1680+x)*4 + 3] = data[((y*640) + x)*3 + 0];
            }
	}
    }
//
    fread(data,54,1,fp[2]);
    fread(data,640*480*3,1,fp[2]);
    for(y=0;y<480;y++)
    {
	for(x=0;x<1680;x++)
	{
            if(x<640)
             {
            	buf[2][((479-y)*800+x)*4 + 0] = data[((y*640) + x)*3 + 0];
                buf[2][((479-y)*800+x)*4 + 1] = data[((y*640) + x)*3 + 1];
                buf[2][((479-y)*800+x)*4 + 2] = data[((y*640) + x)*3 + 2];
                //buf[1][(479-y)*1680+x)*4 + 3] = data[((y*640) + x)*3 + 0];
            }
	}
    }
    fclose(fp[0]); fclose(fp[1]); fclose(fp[2]);
    //
    while(1)
    { 

            memcpy(fbp,buf[index%3],800*480*4);
	    sleep(1);
           if(index++>100)
               break;
    }    
    printf("/nover!/n");
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值