基于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;
}
基于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 ...
随机推荐
- CSS选择器的组合选择器之后代选择器和子元素选择器
实例代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ...
- ABP官方文档翻译 6.3 本地化
本地化 介绍 应用程序语言 本地化源 XML文件 注册XML本地化源 JSON文件 注册JSON本地化源 资源文件 自定义源 当前语言是如何决定的 ASP.NET Core ASP.NET MVC 5 ...
- ABP官方文档翻译 3.4 领域服务
领域服务 介绍 IDomainService接口和DomainService类 示例 创建接口 服务实现 使用应用服务 一些探讨 为什么只有应用服务? 如何强制使用领域服务? 介绍 领域服务(或者在D ...
- Go笔记-流程控制
[if] if 是用于测试某个条件的语句,如果该条件(逻辑型或布尔型)成立,则会执行大括号内的代码,第一个大括号必须和if 或者else同行,否则非法 // 方式1 if condition { // ...
- Codeforces Round #395 (Div. 2)(未完)
2.2.2017 9:35~11:35 A - Taymyr is calling you 直接模拟 #include <iostream> #include <cstdio> ...
- 【转】 C/C++程序员必须熟练应用的开源项目
作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应 ...
- git使用步骤_2017
(部署项目) zbot deploy developer git对文件chmod 777后导致status发生变化,使用: git config core.fileMode false [当 ...
- win7局域网共享文件
调整共享文件所在电脑设置: 1. 关闭防火墙 2. 更改网络设置 ①打开网络和共享中心 ②进入"选择家庭组和共享选项" ③进入"更改高级共享设置" ④调整设置并 ...
- 实现dedecms全站动态浏览 并实现伪静态
dedecms默认是生成静态文件,如何实现织梦全站动态浏览呢? 织梦全站动态浏览方法 1. 修改首页为动态浏览 后台-生成-更新首页-勾选"仅动态浏览" 2. 修改栏目页为动态浏览 ...
- sql server两个时间段内,求出周末的量
公司有个表记录了出差(加班)的初始时间和截止时间,现在要计算出加班时间,之前的设计并没有考虑到这部分,因此本人通过sql重新计算周末数 表formmain starttime endtime 使用游标 ...