/*#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; }
基于am3358的lcd输出的更多相关文章
-
[zz] 基于国家标准的 EndNote 输出样式模板
基于国家标准的 EndNote 输出样式模板 https://cnzhx.net/blog/endnote-output-style-cnzhx/ 发表于 2013-05-26 作者 Haoxian ...
-
基于FPGA的LCD+CMOS视频采集显示使用小结
基于FPGA的LCD+CMOS视频采集显示 液晶显示器采用扫描模式,RGB888 电源采用:+5V供电 usb供电有时候会出现供电不足的问题 显示器接口有两种选择:16bit或24bit 分别对应 ...
-
[转]基于国家标准的 EndNote 输出样式模板 ----直接用endnote导入到word,不用自己一个个改参考文献了
EndNote 相当于一个数据库,将添加/导入的文献存档.需要引用文献的时候就从中选择一个插入到文档中,EndNote 会自动给你编号.在文档末尾建立相应的参考文献列表.但是各种杂志.单位要求的文献著 ...
-
AM3358--Uboot支持LCD输出1024*768
1. uboot/include/lcd/tq3358_fb.h #define TFT240320 1 #define TFT320240 2 #define TFT480272 3//T43(天嵌 ...
-
基于am3358的蜂鸣器测试
#include <sys/ioctl.h> #include<stdio.h> #include <fcntl.h> #include <sys/types ...
-
基于am3358的led跑马灯测试
#include <sys/ioctl.h> #include<stdio.h> #include <fcntl.h> #include <sys/types ...
-
基于am3358的led跑马灯測试
#include <sys/ioctl.h> #include<stdio.h> #include <fcntl.h> #include <sys/types ...
-
u-boot支持LCD显示(基于TQ2440)【转】
本文转载自:http://www.cnblogs.com/pengdonglin137/p/4633877.html u-boot支持LCD显示(基于TQ2440) 阅读目录(Content) 平 ...
-
u-boot支持LCD显示(基于TQ2440)
平台简介 Linux版本:Linux-3.14 u-boot版本:u-boot-2015.04 硬件:TQ2440(内存:64MB NandFlash:256MB) 作者:彭东林 邮箱:pengdo ...
随机推荐
-
hiho一下第一周 最长回文子串
题目链接:http://hihocoder.com/contest/hiho1/problem/1 #include <iostream> #include <cstdio> ...
-
WIN10环境下搭建与连接VPN服务器
搭建VPN服务器 0.前言 1.WIN+E打开此电脑 2.勾选始终显示菜单,并应用,确定 3.新建传入连接,可以添加用户,也可以直接选取已有用户 连接VPN服务器 1.打开vpn设置 2.添加vpn连 ...
-
WINDOWS下,中文JSON格式读取报错处理:ValueError: No JSON object could be decoded
File "C:\Python27\lib\json\__init__.py", line 290, in load **kw) File "C:\Python27\li ...
-
C++ type_traits 原理
一.简单介绍 (1).type_traits 类型萃取,C++11中已结成为了一个核心模块. (2).标准库包括helper classes .type traits.type transformat ...
-
iOS学习——UIAlertController详解
在开发中,弹出提示框是必不可少的.这两天项目中统一对已经被iOS API废弃的UIAlertView和UIActionSheet进行替换,我们知道,UIAlertView和UIActionSheet都 ...
-
Dubbo注册Zookepper服务的虚拟IP
使用dubbo在zookepper上注册服务,使用dubbo的服务器IP为192.168.70.105 而在zookepper上显示服务提供者为 dubbo://202.102.110.203:808 ...
-
Base64原理与实现
Base64编码说明 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式. 如果剩下的字符不足3个字节,则用0填充 ...
-
Java编程的逻辑 (73) - 并发容器 - 写时拷贝的List和Set
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
-
1 web应用-http协议-web框架
web 应用 Web 应用程序是一种可以通过 Web 访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件.应用程序有两种模式 C/S.B/S.C/S ...
-
【转】代码混淆和apk反编译
代码混淆 http://blog.csdn.net/vipzjyno1/article/details/21042823 apk反编译 http://blog.csdn.net/vipzjyno1/a ...