基于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;
}
时间: 2024-09-10 14:05:30

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

.Net基于MVC4 Web Api输出Json格式实例_实用技巧

本文实例讲述了.Net基于MVC4 Web Api输出Json格式的方法,分享给大家供大家参考.具体实现方法如下: 1.Global 中增加json输出 复制代码 代码如下: GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("json", "true", "application/json"

spring 基于aop 实现日志输出 定义在controller层无效

问题描述 spring 基于aop 实现日志输出 定义在controller层无效 如题,具体详情还请各位高抬贵手猛搓下方连接(并非偷懒而是之前就在segmentfault发了问题,而且贴了代码,感觉给个地址更方便.)segmentfault传送门 解决方案 spring的AOP实现日志输出

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寸高清屏)

基于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的蜂鸣器测试

#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/beep", O_RDWR); if (fb < 0) { perror("op

基于empty函数的输出详解_php技巧

$a = '';echo '1.---------------'.empty($a).'<br>';$a = '0';echo '2.---------------'.empty($a).'<br>';$a = 0;echo '3.---------------'.empty($a).'<br>';$a = null;echo '4.---------------'.empty($a).'<br>';$a = 'null';echo '5.---------

基于排列与组合输出多少中情况详解_C 语言

排列 复制代码 代码如下: #include <stdio.h>// 主要是找到当前要排的 和后面要排数的关系int swap(int m,int n){ if(n==1)  return m-n+1; return  m*swap(m-1,n-1); }int main(){ int m=5,n=4; printf("%d",swap(5,4)); } 组合 计算3个A,2个B可以组成多少种排列的问题 思路一: 复制代码 代码如下: #include <stdio.

AMOS的使用之输出结果分析(4)

AMOS的使用之输出结果分析 通过检查AG 绘图区域左边能查看模型运行的是否成功.Wheaton 模型运行后考虑下列弹出的屏幕: 输出的底部显示卡方值为76.10 ,自由度为6.检验整体拟合的数据模型的统计检验.这个检验统计量检验数据的总体模型拟合,检验下的原假设是模型拟和数据,所以这个检验希望发现较小的,非显著的卡方值.卡方模型拟合统计量的显著性检验在下一部分描述. 评估整体拟合模型 到目前为止,看见的输出结果都不包含统计显著性检验.AMOS产生这样的检验.它们存储在数据表文件中.通过选择Vi

AM335x关于LCD屏幕的时钟PLL配置

主要参考的是AM335x的TRM的第8章PRCM模块和13章LCD Controller. 这里在LCD Controller里面的配置描述的比较详细了,分频和像素.消影值的设置等等.不在赘述,很多人都会抱怨说,LCD_PCLK配置只能通过LCD_CLK经过一个分频而来,这样对于频率70~90MHz时配置很困难.但事实上,我们对LCD_CLK的设置,是比较灵活的,参考如下: 8.1.6.10节中:Display PLL Description 左边的部分我会慢慢解释,先看右边.右边的LCD_CL