基于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???tí·
typedef struct
{
    char cfType[2];//???tààDí£?"BM"(0x4D42)
    long cfSize;//???t?óD?£?×??ú£?
    long cfReserved;//±£á?£??μ?a0
    long cfoffBits;//êy?Y???à??óú???tí·μ???ò?á?£?×??ú£?
}__attribute__((packed)) BITMAPFILEHEADER;
//__attribute__((packed))μ?×÷ó?ê?????±àò??÷è????á11?ú±àò?1y3ì?Dμ?ó??ˉ????   

//40byteD??¢í·
typedef struct
{
    char ciSize[4];//BITMAPFILEHEADER?ù??μ?×??úêy
    long ciWidth;//?í?è
    long ciHeight;//???è
    char ciPlanes[2];//??±êéè±?μ???????êy£??μ?a1
    int ciBitCount;//????????μ???êy
    char ciCompress[4];//?1???μ?÷
    char ciSizeImage[4];//ó?×??ú±íê?μ?í????óD?£???êy?Y±?D?ê?4μ?±?êy
    char ciXPelsPerMeter[4];//??±êéè±?μ?????????êy/?×
    char ciYPelsPerMeter[4];//??±êéè±?μ??1?±????êy/?×
    char ciClrUsed[4]; //??í?ê1ó?μ÷é?°?μ???é?êy
    char ciClrImportant[4]; //??????òaμ???é?êy£?μ±??óòμ??μμèóú??é?êyê±£??ò??μèóú0ê±£?£?±íê??ùóD??é???ò??ù??òa
}__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£oreading 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;  

    //?????á??μ?×ü?óD?£?×??ú£?
    screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
    printf("screensize=%d byte\n",screensize);  

    //???óó3é?
    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();

    //é?3y???óó3é?
    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;
}
时间: 2024-12-30 02:46:32

基于am3358的lcd输出的相关文章

[zz] 基于国家标准的 EndNote 输出样式模板

基于国家标准的 EndNote 输出样式模板 https://cnzhx.net/blog/endnote-output-style-cnzhx/ 发表于 2013-05-26 作者 Haoxian Zeng 更新于 2015-01-13 47 EndNote 相当于一个数据库,将添加/导入的文献存档.需要引用文献的时候就从中选择一个插入到文档中,EndNote 会自动给你编号.在文档末尾建立相应的参考文献列表.但是各种杂志.单位要求的文献著录格式是不一样的,所以在插入文献到文档之前,我们应该选

基于FPGA的LCD+CMOS视频采集显示使用小结

基于FPGA的LCD+CMOS视频采集显示 液晶显示器采用扫描模式,RGB888 电源采用:+5V供电 usb供电有时候会出现供电不足的问题 显示器接口有两种选择:16bit或24bit  分别对应 24p和40p座子,任选一种即可. 和开发板对应 底板与lcd管脚需要对应分配 接下来就可以测试lcd显示图案 lcd显示 7725图像 因为显示器分辨率和摄像头视频不对应,所以需要简单的缩放处理,即有效像素显示区域 lcd显示mt9v034视频

[转]基于国家标准的 EndNote 输出样式模板 ----直接用endnote导入到word,不用自己一个个改参考文献了

EndNote 相当于一个数据库,将添加/导入的文献存档.需要引用文献的时候就从中选择一个插入到文档中,EndNote 会自动给你编号.在文档末尾建立相应的参考文献列表.但是各种杂志.单位要求的文献著录格式是不一样的,所以在插入文献到文档之前,我们应该选择合适的文 献著录格式.这里提供我的基于国家标准 GB/T 7714-2005 <文后参考文献著录规则>编制的 EndNote 输出样式模板. 目前国内的中文期刊,以及各学校的毕业论文,采用的基本上都是中华人民共和国国家标准GB/T 7714-

RT-Thread 学习笔记(十三)--- 开启基于RTGUI的LCD显示功能(3)&lt;触屏屏驱动移植和测试&gt;

软件环境:Win7,Keil MDK 4.72a, IAR EWARM 7.2, GCC 4.2,Python 2.7 ,SCons 2.3.2 硬件环境:Armfly STM32F103ZE-EK v3.0开发板 参考文章:RT-Thread编程指南 RT-Thread_1.2.0+lwip+rtgui0.8.0 移植心得 RT-Thread RTOS组件:RTGUI教程 Hello World 前面基本解决了显示驱动问题,接下来将要解决触摸屏的驱动问题. [1]加入触屏屏的驱动文件 (1)重

AM3358--Uboot支持LCD输出1024*768

1. uboot/include/lcd/tq3358_fb.h #define TFT240320 1 #define TFT320240 2 #define TFT480272 3//T43(天嵌4.3寸屏) #define TFT800480_H50 4//H50(5寸高清屏) #define TFT800480 5//A70(群创7.0寸屏) #define TFT800600 6//A104(友达10.4寸屏) #define TFT1024600_H70 7//H70(7寸高清屏)

RT-Thread 学习笔记(十二)--- 开启基于RTGUI的LCD显示功能(2)

软件环境:Win7,Keil MDK 4.72a, IAR EWARM 7.2, GCC 4.2,Python 2.7 ,SCons 2.3.2 硬件环境:Armfly STM32F103ZE-EK v3.0开发板 参考文章:RT-Thread编程指南 RT-Thread_1.2.0+lwip+rtgui0.8.0 移植心得 RT-Thread RTOS组件:RTGUI教程 Hello World 上篇文章中我们LCD驱动进行了移植,接下来进行编译和调试 [1]在命令行中使用scons编译,出现

RT-Thread 学习笔记(十一)--- 开启基于RTGUI的LCD显示功能

软件环境:Win7,Keil MDK 4.72a, IAR EWARM 7.2, GCC 4.2,Python 2.7 ,SCons 2.3.2 硬件环境:Armfly STM32F103ZE-EK v3.0开发板 参考文章:RT-Thread编程指南 RT-Thread_1.2.0+lwip+rtgui0.8.0 移植心得 RT-Thread RTOS组件:RTGUI教程 Hello World [1]加入LCD设备驱动文件 (1)登陆https://github.com/,然后在搜索栏输入R

基于am3358的led跑马灯測试

#include <sys/ioctl.h> #include<stdio.h> #include <fcntl.h> #include <sys/types.h> static int fb; int main() { int i=0; printf("hello world !\n"); fb = open("/dev/led", O_RDWR);//打开设备 if (fb < 0) { perror(&qu

基于am3358的led跑马灯测试

#include <sys/ioctl.h> #include<stdio.h> #include <fcntl.h> #include <sys/types.h> static int fb; int main() { int i=0; printf("hello world !\n"); fb = open("/dev/led", O_RDWR);//打开设备 if (fb < 0) { perror(&qu