粤嵌gec6818开发板LED屏幕上画图(数组与内存映射的采用)换图片 电子相册 实现识别触摸坐标的识别等项目

Posted qq_735754647

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了粤嵌gec6818开发板LED屏幕上画图(数组与内存映射的采用)换图片 电子相册 实现识别触摸坐标的识别等项目相关的知识,希望对你有一定的参考价值。

交叉开发
    在一个有编辑/编译功能的PC机上进行编辑/编译,生成的可执行文件通过
    交叉开发工具下载到目标机(GEC-6818)
    
    开发板 --- Linux内核 --- Linux指令
    首先创建自己的工作目录
    
    mkdir xxx
    
    下载交叉编译生成的可执行文件:
        rx 可执行文件名
        传输 --- 发送xmodem --- 浏览到我们所要发送的文件 --- 选中 --- 发送
        如果发送的是一个可执行文件,没有可执行的权限
            chmod +x 可执行文件名  --- 再去运行
        !!! 下载可执行文件必须是交叉编译生成的
        arm-linux-gcc 源文件名 -o 可执行文件名    

2 屏幕操作
    屏幕分辨率:800*480
    800 一行有800个像素点 480行
    像素点:显示颜色的最小单位
    颜色:ARGB --- 每个分量一个字节 
        A:透明度
        R:红色分量 0 - ff
        G:绿色分量
        B:蓝色分量
                
        绿色:0x0000ff00        
                
    如果我们想要绿屏:
        每个像素点全部显示绿色:0x0000ff00
        
    打开屏幕
        int lcd_fd = open("/dev/fb0",O_RDWR);
        if(lcd_fd == -1)
        
            perror("open lcd fail");
            return -1;
        
    操作屏幕
        //写入数据
        int color[800*480]=0;
        for(int i=0;i<480;i++)
        
            for(int j=0;j<800;j++)
            
                color[i*800+j]=0x0000ff00;
            
        
        write(lcd_fd,color,800*480*4);
    关闭屏幕
        close(lcd_fd);

因为引用了 #include<math.h> 

切记 切记 Liunx 编译时 要加 -lm

类似 arm-linux-gcc 1.c -lm

画太极图

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include <sys/mman.h>
#include<unistd.h>
#include<math.h> 
int *plcd = NULL;
#define WHITE 0x00FFFFFF 
#define BLAK 0x00000000 
void draw_point(int x, int y, int color)

	if (x >= 0 && x<800 && y >= 0 && y<480)
	
		*(plcd + y * 800 + x) = color;
	
	


void draw_circle(int x, int y,double r ,int color)

	if (x >= 0 && x<480 && y >= 0 && y<800)
	
		for (double i = 0; i < 480; i++)
    
		for (double j = 0; j < 800; j++)
			
				double all=(i-x)*(i-x)+(j-y)*(j-y);
				double fc=sqrt(all);
				if(r>fc)
				
						draw_point(j, i, color);
					//	printf("fc=%lf\\n",fc);
				
			
	
	
	


void draw_circle_b(int x, int y,double r ,int color)

	if (x >= 0 && x<480 && y >= 0 && y<800)
	
		for (double i = 0; i < 480; i++)
    
		for (double j = 0; j < 800; j++)
			
				if(i<x)
					double all=(i-x)*(i-x)+(j-y)*(j-y);
					double fc=sqrt(all);
					if(r>fc)
					
						draw_point(j, i, color);
					//	printf("fc=%lf\\n",fc);
										
				
			
	
	
	


void clear(int color)

	int x,y;
	for(y=0;y<480;y++)
	
		for(x=0;x<800;x++)
		
			draw_point(x,y,color);
		
	


int main()

	int lcd_fd = open("/dev/fb0",O_RDWR);
	if (lcd_fd == -1)
	
		perror("open lcd fail");
	
	plcd = mmap(NULL, 800 * 480 * 4, PROT_READ | PROT_WRITE, MAP_SHARED,lcd_fd,0);
	if (plcd==NULL)
	
		perror("mmao  fail");
	
	int color = 0x0000FFFF;
	
    clear(0x00666666);
	draw_circle(240, 400,200, BLAK);
	draw_circle_b(240, 400,200, WHITE);
    draw_circle(240, 300,100, WHITE); 
    draw_circle(240, 500,100, BLAK); 
    draw_circle(240, 300,25, BLAK); 
    draw_circle(240, 500,25, WHITE); 

//	draw_circle(240, 400,50, color);  
	close(lcd_fd);
	munmap(plcd,800*480*4);
	return 0;






画笑脸

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include <sys/mman.h>
#include<unistd.h>
#include<math.h> 

#define WHITE 0x00FFFFFF 
#define BLAK 0x00000000 
#define org 0x00CDAD00
#define gray 0x00CD853F 

int *plcd = NULL;  

void draw_point(int x, int y, int color)

	if (x >= 0 && x<800 && y >= 0 && y<480)
	
		*(plcd + y * 800 + x) = color;
	
	


void draw_circle(int x, int y,double r ,int color)//HUAYUAN

	if (x >= 0 && x<480 && y >= 0 && y<800)
	
		for (double i = 0; i < 480; i++)
    
		for (double j = 0; j < 800; j++)
			
				double all=(i-x)*(i-x)+(j-y)*(j-y);
				double fc=sqrt(all);
				if(r>fc)
				
						draw_point(j, i, color);
					//	printf("fc=%lf\\n",fc);
				
			
	
	
	


void draw_circle_b(int x, int y,double r ,int color)//BANYUAN

	if (x >= 0 && x<480 && y >= 0 && y<800)
	
		for (double i = 0; i < 480; i++)
    
		for (double j = 0; j < 800; j++)
			
				if(i<x)
					double all=(i-x)*(i-x)+(j-y)*(j-y);
					double fc=sqrt(all);
					if(r>fc)
					
						draw_point(j, i, color);
					//	printf("fc=%lf\\n",fc);
										
				
			
	
	
	


void draw_circle_c(int x, int y,double r ,int color)//BANYUAN

	if (x >= 0 && x<480 && y >= 0 && y<800)
	
		for (double i = 0; i < 480; i++)
    
		for (double j = 0; j < 800; j++)
			
				if(i>x)
					double all=(i-x)*(i-x)+(j-y)*(j-y);
					double fc=sqrt(all);
					if(r>fc)
					
						draw_point(j, i, color);
					//	printf("fc=%lf\\n",fc);
										
				
			
	
	
	


void clear(int color)

	int x,y;
	for(y=0;y<480;y++)
	
		for(x=0;x<800;x++)
		
			draw_point(x,y,color);
		
	



int main()

	int lcd_fd = open("/dev/fb0",O_RDWR);
	if (lcd_fd == -1)
	
		perror("open lcd fail");
	
	plcd = mmap(NULL, 800 * 480 * 4, PROT_READ | PROT_WRITE, MAP_SHARED,lcd_fd,0);
	if (plcd==NULL)
	
		perror("mmap  fail");
	
	int color = 0x0000FFFF;
	
    clear(0x00666666);
	draw_circle(240, 400,200, org);//画橙底 
	
	//draw_circle(180, 480,30, HUI);//眼睛1 
    //draw_circle(180, 320,30, HUI); //眼睛2 
    
    draw_circle_b(170, 300,50, gray); 
     draw_circle_b(170, 300,40, org);
     
     draw_circle_b(170, 500,50, gray); 
     draw_circle_b(170, 500,40, org);
	  
    //draw_circle(240, 300,25, BLAK); 
    //draw_circle(240, 500,25, WHITE); 
    draw_circle_c(250, 400,150, WHITE);
  
//	draw_circle(240, 400,50, color);  
  int x,y;
	for(y=0;y<480;y++)
	
		for(x=0;x<800;x++)
		
			if (x >=400 && x<402 && y >=250 && y<400 )
			draw_point(x,y,BLAK);
			if (x >=300 && x<302 && y >=250 && y<362 )
			draw_point(x,y,BLAK);
			if (x >=500 && x<502 && y >=250 && y<362 )
			draw_point(x,y,BLAK);
		
	
	close(lcd_fd);
	munmap(plcd,800*480*4);
	return 0;





画微笑

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include <sys/mman.h>
#include<unistd.h>
#include<math.h> 

#define WHITE 0x00FFFFFF 
#define BLAK 0x00000000 
#define org 0x00CDAD00
#define HUI 0x00CD853F 

int *plcd = NULL;  

void draw_point(int x, int y, int color)

	if (x >= 0 && x<800 && y >= 0 && y<480)
	
		*(plcd + y * 800 + x) = color;
	
	


void draw_circle(int x, int y,double r ,int color)//HUAYUAN

	if (x >= 0 && x<480 && y >= 0 && y<800)
	
		for (double i = 0; i < 480; i++)
    
		for (double j = 0; j < 800; j++)
			
				double all=(i-x)*(i-x)+(j-y)*(j-y);
				double fc=sqrt(all);
				if(r>fc)
				
						draw_point(j, i, color);
					//	printf("fc=%lf\\n",fc);
				
			
	
	
	


void draw_circle_b(int x, int y,double r ,int color)//BANYUAN

	if (x >= 0 && x<480 && y >= 0 && y<800)
	
		for (double i = 0; i < 480; i++)
    
		for (double j = 0; j < 800; j++)
			
				if(i>x)
					double all=(i-x)*(i-x)+(j-y)*(j-y);
					double fc=sqrt(all);
					if(r>fc)
					
						draw_point(j, i, color);
					//	printf("fc=%lf\\n",fc);
										
				
			
	
	
	


void clear(int color)

	int x,y;
	for(y=0;y<480;y++)
	
		for(x=0;x<800;x++)
		
			draw_point(x,y,color);
		
	


int main()

	int lcd_fd = open("/dev/fb0",O_RDWR);
	if (lcd_fd == -1)
	
		perror("open lcd fail");
	
	plcd = mmap(NULL, 800 * 480 * 4, PROT_READ | PROT_WRITE, MAP_SHARED,lcd_fd,0);
	if (plcd==NULL)
	
		perror("mmao  fail");
	
	int color = 0x0000FFFF;
	
    clear(0x00666666);
	draw_circle(240, 400,200, org);//画橙底 
	
	draw_circle(180, 480,30, HUI);//眼睛1 
    draw_circle(180, 320,30, HUI); //眼睛2 
    
    draw_circle_b(270, 400,50, HUI); 
     draw_circle_b(270, 400,40, org); 
    //draw_circle(240, 300,25, BLAK); 
    //draw_circle(240, 500,25, WHITE); 

//	draw_circle(240, 400,50, color);  
	close(lcd_fd);
	munmap(plcd,800*480*4);
	return 0;






 四叶草 彩虹

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include <sys/mman.h>
#include<unistd.h>
#include<math.h> 

#define WHITE 0x00FFFFFF 
#define BLAK 0x00000000 
#define org 0x00CDAD00
#define HUI 0x00CD853F 

int *plcd = NULL;  

void draw_point(int x, int y, int color)

	if (x >= 0 && x<800 && y >= 0 && y<480)
	
		*(plcd + y * 800 + x) = color;
	
	


void draw_circle(int x, int y,double r ,int color)//HUAYUAN

	if (x >= 0 && x<480 && y >= 0 && y<800)
	
		for (double i = 0; i < 480; i++)
    
		for (double j = 0; j < 800; j++)
			
				double all=(i-x)*(i-x)+(j-y)*(j-y);
				double fc=sqrt(all);
				if(r>fc)
				
						draw_point(j, i, color);
					//	printf("fc=%lf\\n",fc);
				
			
	
	
	


void draw_circle_b(int x, int y,double r ,int color)//BANYUAN

	if (x >= 0 && x<480 && y >= 0 && y<800)
	
		for (double i = 0; i < 480; i++)
    
		for (double j = 0; j < 800; j++)
			
				if(i>x)
					double all=(i-x)*(i-x)+(j-y)*(j-y);
					double fc=sqrt(all);
					if(r>fc)
					
						draw_point(j, i, color);
					//	printf("fc=%lf\\n",fc);
										
				
			
	
	
	


void clear(int color)

	int x,y;
	for(y=0;y<480;y++)
	
		for(x=0;x<800;x++)
		
			draw_point(x,y,color);
		
	


int main()

	int lcd_fd = open("/dev/fb0",O_RDWR);
	if (lcd_fd == -1)
	
		perror("open lcd fail");
	
	plcd = mmap(NULL, 800 * 480 * 4, PROT_READ | PROT_WRITE, MAP_SHARED,lcd_fd,0);
	if (plcd==NULL)
	
		perror("mmao  fail");
	
	int color = 0x0000FFFF;
	
    clear(0x00666666);
   while(1)
   
 
     int x,y; 
   
   for(x=0;x<800;x++)
		for(y=0;y<480;y++)
			if(y<160)
				*(plcd + y * 800 + x) = 0x0000ff00;
			else if(y<320)
				*(plcd + y * 800 + x) = 0x000000ff;
			else
				*(plcd + y * 800 + x) = 0x00ff0000;


	draw_circle(240, 400,200, org);//画橙底 
	
    draw_circle_b(270, 400,50, HUI); 
     draw_circle_b(270, 400,40, org); 
    

    draw_circle(180, 480,30, HUI);//眼睛1 
    draw_circle(180, 320,30, HUI); //眼睛2 
    
	
	int i,j;
    int cir_color[480][800];
	for(i=0;i<480;i++)
	
		for(j=0;j<800;j++)
		
			if((i-480)*(i-480) + (j-400)*(j-400)<51*51)
				cir_color[i][j]=0x00FF0033;
			else if((i-480)*(i-480) + (j-400)*(j-400)<107*107)
				cir_color[i][j]=0x00FF6600;
			else if((i-480)*(i-480) + (j-400)*(j-400)<168*168)
				cir_color[i][j]=0x00FFFF00;
			else if((i-480)*(i-480) + (j-400)*(j-400)<234*234)
				cir_color[i][j]=0x0000FF00;
			else if((i-480)*(i-480) + (j-400)*(j-400)<307*307)
				cir_color[i][j]=0x0000FFFF;
			else if((i-480)*(i-480) + (j-400)*(j-400)<385*385)
				cir_color[i][j]=0x000000FF;
			else
				cir_color[i][j]=0x00FF00CC;
					
	

    lcd_fd = open("/dev/fb0",O_RDWR);
	if(-1 == lcd_fd)
	
		printf("open lcd error\\n");
	
	write(lcd_fd,cir_color,800*480*4);

sleep(2);
   
    int si_color[480][800];
	for(i=0;i<480;i++)
	
		//遍历二维数组每一行的每一列
		for(j=0;j<800;j++)
		
			int a =  (i-150)*(i-150) + (j-300)*(j-300);
			int b = (i-330)*(i-330) + (j-300)*(j-300);
			int c = (i-150)*(i-150) + (j-500)*(j-500);
			int d = (i-330)*(i-330) + (j-500)*(j-500);
			int r2 = 150*150;
 
			if (a<r2 && b<r2)
				si_color[i][j]=0x00FF0033;
			else if(a<r2 && c<r2)
				si_color[i][j]=0x00FF6600;
			else if(b<r2 && d<r2)
				si_color[i][j]=0x00FFFF00;
			else if(c<r2 && d<r2)
				si_color[i][j]=0x0000FF00;
			else
				si_color[i][j]=0x00FF00CC;
					
	
lcd_fd = open("/dev/fb0",O_RDWR);
	if(-1 == lcd_fd)
	
		printf("open lcd error\\n");
	
	write(lcd_fd,si_color,800*480*4);

   
   sleep(1);


   
	close(lcd_fd);
	munmap(plcd,800*480*4);
	return 0;





切记 切记 Liunx 编译时 要加 -lm

电子相册代码实现

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/mman.h>
#include <math.h>
#include <stdlib.h>
int * p = NULL ;

void draw_point(int x,int y,int color)

	if(x>=0 && x<800 && y>=0 && y<480 )
	
		*(p+800*y+x) = color ;
	


void show_bmp (char * pathname ,int x ,int y)

	int fd = open(pathname,O_RDONLY);
	if(fd == -1)
	
		perror("open error\\n");
		return ;
	
	int fd1 = open("/dev/fb0",O_RDWR);
	if(fd1 == -1)
	
		perror("open error\\n");
		return ;
	
	printf("open success\\n");
	
	p = mmap(NULL,800*480*4,PROT_READ | PROT_WRITE,MAP_SHARED ,fd1,0);
	if(p == NULL )
	
		perror("mmap error\\n");
		return ;
	
	int width,height;
	short depth;
	unsigned char buf[4] ;
	//读取宽度
	lseek(fd,0x12,SEEK_SET);
	read(fd,buf,4);
	width = buf[3]<<24 | buf[2]<< 16 | buf[1] << 8 | buf[0];
	//读取高度
	read(fd,buf,4);
	height  = buf[3]<<24 | buf[2]<< 16 | buf[1] << 8 | buf[0];
	//读取色深
	lseek(fd,0x1c,SEEK_SET);
	read(fd,buf,2);
	depth = buf[1] << 8  | buf[0];
	//打印信息
	printf("width = %d  height = %d  depth = %d \\n",width,height,depth);

	
	int line_valid_bytes = abs(width) * depth / 8 ; 
	int laizi=0;
	if( (line_valid_bytes % 4) !=0   )
	
		laizi =  4 - line_valid_bytes%4;
	
	int line_bytes = line_valid_bytes  +  laizi ;
	
	int total_bytes = line_bytes * abs(height) ; 
	
	unsigned char * p1  = malloc(total_bytes);
	
	lseek(fd,54,SEEK_SET);
	read(fd,p1,total_bytes);
	
	
	unsigned char a ,r ,g, b ;
	int i = 0;
	int x0=0,y0=0; 
	int color ;
	for(y0=0;y0<abs(height);y0++)
	
		for(x0=0;x0<abs(width);x0++)
		
			
		
			b = p1[i++];
			g = p1[i++];
			r = p1[i++];
			if(depth == 32)
			
				a=p1[i++];
			
			if(depth == 24)
			
				a = 0;
			
			color = a << 24 | r << 16 | g << 8 | b ;
			draw_point(width>0?x+x0:abs(width)+x-1-x0,
					height>0? y+height-1-y0 : y+y0,color);
			
			
		
		i = i +laizi ;
			
	
	free(p1);
	close(fd1);
	munmap(p,800*480*4);
	close(fd);
	

int main()

	while(1)
	
	
	show_bmp("1.bmp",0 ,0);// 自己存储的图片
	sleep(2);
	show_bmp("2.bmp",0 ,0);
	sleep(2);
	show_bmp("3.bmp",0 ,0);
	sleep(2);
	show_bmp("4.bmp",0 ,0);
	sleep(2);
	show_bmp("5.bmp",0 ,0);
	sleep(2);

	return 0;

横行打开

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/mman.h>
#include <math.h>
#include <stdlib.h>
#define RGB_SIZE 800*480*3
#define LCD_SIZE 800*480
int *plcd=NULL;
int photo(char *a)

	
	
	// 1. 打开触摸屏文件
	int lcd_fd = open("/dev/fb0", O_RDWR);
	if (lcd_fd == -1)
	
		printf("Open lcd failed!!\\n");
		return -1;
	
	
	// 2. 打开bmp图片
	int bmp_fd = open(a, O_RDWR);
	
	
	// 3. 偏移bmp格式头, 54个字节
	off_t offset = lseek(bmp_fd, 54, SEEK_SET);
	if (offset == -1)
	
		printf("Offset failed!\\n");
		return -1;
	
	
	// 4. 读取bmp图片的RGB值,将读到的值存进bmp_rgb数组中
	char bmp_buf[RGB_SIZE] = ;
	size_t re_ret = read(bmp_fd, bmp_buf, RGB_SIZE);
	
	
	// 5. 24位数据-->32位数据:bmp图片rgb占3个字节,lcdargb占4个字节. char占1个字节大小,int占4个字节大小
	int lcd_buf[LCD_SIZE] = ;
	int i;
	for (i=0; i<LCD_SIZE; i++)
	
		lcd_buf[i] = bmp_buf[i*3+2]<<16 | bmp_buf[i*3+1]<<8 | bmp_buf[i*3+0]<<0;
	
	
	// 6. 翻转180°
	int fli_buf[LCD_SIZE];
	int x, y;
	for(y = 0; y < 480; y++)
	
		for(x = 0; x < 800; x++)
		
			fli_buf[y*800+x] = lcd_buf[(479-y)*800+x];
		
		
	
	
	// 7. 写入LCD
	
	plcd=mmap(NULL,800*480*4,PROT_READ|PROT_WRITE,MAP_SHARED,lcd_fd,0);
		if(plcd == NULL)
		
			perror("mmap fail");
		
		for(int x=0;x<800;x++)
		
			for(int y=0;y<480;y++)
			
				*(plcd+x+y*800)=fli_buf[x+y*800];
							
			sleep(0.1);
			
	// 8. 关闭文件
	close(lcd_fd);
	close(bmp_fd);	
	return 0;

int photo2(char *a)

	
	
	// 1. 打开触摸屏文件
	int lcd_fd = open("/dev/fb0", O_RDWR);
	if (lcd_fd == -1)
	
		printf("Open lcd failed!!\\n");
		return -1;
	
	
	// 2. 打开bmp图片
	int bmp_fd = open(a, O_RDWR);
	
	
	// 3. 偏移bmp格式头, 54个字节
	off_t offset = lseek(bmp_fd, 54, SEEK_SET);
	if (offset == -1)
	
		printf("Offset failed!\\n");
		return -1;
	
	
	// 4. 读取bmp图片的RGB值,将读到的值存进bmp_rgb数组中
	char bmp_buf[RGB_SIZE] = ;
	size_t re_ret = read(bmp_fd, bmp_buf, RGB_SIZE);
	
	
	// 5. 24位数据-->32位数据:bmp图片rgb占3个字节,lcdargb占4个字节. char占1个字节大小,int占4个字节大小
	int lcd_buf[LCD_SIZE] = ;
	int i;
	for (i=0; i<LCD_SIZE; i++)
	
		lcd_buf[i] = bmp_buf[i*3+2]<<16 | bmp_buf[i*3+1]<<8 | bmp_buf[i*3+0]<<0;
	
	
	// 6. 翻转180°
	int fli_buf[LCD_SIZE];
	int x, y;
	for(y = 0; y < 480; y++)
	
		for(x = 0; x < 800; x++)
		
			fli_buf[y*800+x] = lcd_buf[(479-y)*800+x];
		
		
	
	
	// 7. 写入LCD
	
			plcd=mmap(NULL,800*480*4,PROT_READ|PROT_WRITE,MAP_SHARED,lcd_fd,0);
		if(plcd == NULL)
		
			perror("mmap fail");
		
		
			for(int y=0;y<480;y++)
		
			for(int x=0;x<800;x++)
			
				*(plcd+x+y*800)=fli_buf[x+y*800];
				
				
			sleep(0.1);
		
	
	// 8. 关闭文件
	close(lcd_fd);
	close(bmp_fd);
	
	
	return 0;

int photo3(char *a)

	
	
	// 1. 打开触摸屏文件
	int lcd_fd = open("/dev/fb0", O_RDWR);
	if (lcd_fd == -1)
	
		printf("Open lcd failed!!\\n");
		return -1;
	
	
	// 2. 打开bmp图片
	int bmp_fd = open(a, O_RDWR);
	
	
	// 3. 偏移bmp格式头, 54个字节
	off_t offset = lseek(bmp_fd, 54, SEEK_SET);
	if (offset == -1)
	
		printf("Offset failed!\\n");
		return -1;
	
	
	// 4. 读取bmp图片的RGB值,将读到的值存进bmp_rgb数组中
	char bmp_buf[RGB_SIZE] = ;
	size_t re_ret = read(bmp_fd, bmp_buf, RGB_SIZE);
	
	
	// 5. 24位数据-->32位数据:bmp图片rgb占3个字节,lcdargb占4个字节. char占1个字节大小,int占4个字节大小
	int lcd_buf[LCD_SIZE] = ;
	int i;
	for (i=0; i<LCD_SIZE; i++)
	
		lcd_buf[i] = bmp_buf[i*3+2]<<16 | bmp_buf[i*3+1]<<8 | bmp_buf[i*3+0]<<0;
	
	
	// 6. 翻转180°
	int fli_buf[LCD_SIZE];
	int x, y;
	for(y = 0; y < 480; y++)
	
		for(x = 0; x < 800; x++)
		
			fli_buf[y*800+x] = lcd_buf[(479-y)*800+x];
		
		
	
	
	// 7. 写入LCD
	
	plcd=mmap(NULL,800*480*4,PROT_READ|PROT_WRITE,MAP_SHARED,lcd_fd,0);
		if(plcd == NULL)
		
			perror("mmap fail");
		
		
		for(int x=0;x<400;x++)
		
			for(int y=0;y<240;y++)
			
				*(plcd+x+y*800)=fli_buf[x+y*800];
							
			sleep(0.1);
		
		for(int x=400;x<800;x++)
		
			for(int y=0;y<240;y++)
			
				*(plcd+x+y*800)=fli_buf[x+y*800];
							
			sleep(0.1);
		
		
		for(int x=0;x<400;x++)
		
			for(int y=240;y<480;y++)
			
				*(plcd+x+y*800)=fli_buf[x+y*800];
			
			sleep(0.1);
		
		for(int x=400;x<800;x++)
		
			for(int y=240;y<480;y++)
			
				*(plcd+x+y*800)=fli_buf[x+y*800];
			
			sleep(0.1);
		

	
	
	// 8. 关闭文件
	close(lcd_fd);
	close(bmp_fd);
	
	
	return 0;

void main()
	while(1)
        
	
	photo3("./1.bmp");
                sleep(0.5);
	photo3("./2.bmp");
	        sleep(0.5);
	photo("./3.bmp");
                sleep(0.5);
                
	
     

如何使用触摸屏
    Linux为输入事件提供了一个专门的结构体
    #include <linux/input.h>
    struct input_event
    
        struct timeval time;//记录事件发生的时间
        _u16 type;    //记录事件的类型
            type == EV_ABS  触摸屏事件
            type == EV_KEY    按键事件
        _u16 code;    //随着type的改变而改变
            type == EV_ABS
                code == ABS_X x轴
                code == ABS_y y轴
            type == EV_KEY
                code == BTN_TOUCH
        _s32 value;    //随着code的变化而变化
            code == ABS_X
                value = x x值
            code == ABS_Y
                value = y y值
            code == BTN_TOUCH
                value == 0    表示松开
                value == 1  表示按下
        
    

    触摸屏的获取
        获取坐标
        打开设备 --- 读取内容 --- 解析 --- 关闭设备
        int touch_fd = open("/dev/input/event0",O_RDONLY);
        if(touch_fd == -1)
        
            perror("open touch fail");
            return -1;
        
        struct input_event ev;
        int x=-1,y=-1;
        while(1)
        
            read(touch_fd,&ev,sizeof(ev));
            if(ev.type == EV_ABS && ev.code == ABS_X)
            
                x = ev.value;
            
            if(ev.type == EV_ABS && ev.code == ABS_Y)
            
                y = ev.value;
            
            if(ev.type == EV_KEY && ev.code == BTN_TOUCH)
            
                if(ev.value == 0)
                
                    printf("Release\\n");
                    break;
                
                else if(ev.value == 1)
                
                    printf("Press\\n");
                
            
        
        printf("x=%d y=%d\\n",x,y);
        
        close(touch_fd);

#include <stdio.h>//printf
#include <linux/input.h>//struct input_event
#include <sys/types.h>//open
#include <sys/stat.h>//open
#include <fcntl.h>//open
#include <unistd.h>//read
#include <stdlib.h>
#include <sys/mman.h>
#include<linux/fb.h>
#include <math.h>
int * p = NULL ;

void draw_point(int x,int y,int color)

	if(x>=0 && x<800 && y>=0 && y<480 )
	
		*(p+800*y+x) = color ;
	


void show_bmp (char * pathname ,int x ,int y)

	int fd = open(pathname,O_RDONLY);
	if(fd == -1)
	
		perror("open error\\n");
		return ;
	
	int fd1 = open("/dev/fb0",O_RDWR);
	if(fd1 == -1)
	
		perror("open error\\n");
		return ;
	
	printf("open success\\n");
	
	p = mmap(NULL,800*480*4,PROT_READ | PROT_WRITE,MAP_SHARED ,fd1,0);
	if(p == NULL )
	
		perror("mmap error\\n");
		return ;
	
	int width,height;
	short depth;
	unsigned char buf[4] ;
	//读取宽度
	lseek(fd,0x12,SEEK_SET);
	read(fd,buf,4);
	width = buf[3]<<24 | buf[2]<< 16 | buf[1] << 8 | buf[0];
	//读取高度
	read(fd,buf,4);
	height  = buf[3]<<24 | buf[2]<< 16 | buf[1] << 8 | buf[0];
	//读取色深
	lseek(fd,0x1c,SEEK_SET);
	read(fd,buf,2);
	depth = buf[1] << 8  | buf[0];
	//打印信息
	printf("width = %d  height = %d  depth = %d \\n",width,height,depth);

	
	int line_valid_bytes = abs(width) * depth / 8 ; 
	int laizi=0;
	if( (line_valid_bytes % 4) !=0   )
	
		laizi =  4 - line_valid_bytes%4;
	
	int line_bytes = line_valid_bytes  +  laizi ;
	
	int total_bytes = line_bytes * abs(height) ; 
	
	unsigned char * p1  = malloc(total_bytes);
	
	lseek(fd,54,SEEK_SET);
	read(fd,p1,total_bytes);
	
	
	unsigned char a ,r ,g, b ;
	int i = 0;
	int x0=0,y0=0; 
	int color ;
	for(y0=0;y0<abs(height);y0++)
	
		for(x0=0;x0<abs(width);x0++)
		
			
		
			b = p1[i++];
			g = p1[i++];
			r = p1[i++];
			if(depth == 32)
			
				a=p1[i++];
			
			if(depth == 24)
			
				a = 0;
			
			color = a << 24 | r << 16 | g << 8 | b ;
			draw_point(width>0?x+x0:abs(width)+x-1-x0,
					height>0? y+height-1-y0 : y+y0,color);		
		
		i = i +laizi ;
			
	
	
	free(p1);
	close(fd1);
	munmap(p,800*480*4);
	close(fd);
	
int main()
	
int touch_fd = open("/dev/input/event0",O_RDONLY);
		if(touch_fd == -1)
		
			perror("open touch fail");
			return -1;
		
		struct input_event ev;
		int x=-1,y=-1;
	while(1)

				while(1)
	
			
	
			read(touch_fd,&ev,sizeof(ev));
			if(ev.type == EV_ABS && ev.code == ABS_X)
			
				x = ev.value;
			
			if(ev.type == EV_ABS && ev.code == ABS_Y)
			
				y = ev.value;
			
			if(ev.type == EV_KEY && ev.code == BTN_TOUCH)
			
				if(ev.value == 0)
				
					printf("Release\\n");
					break;
				
				else if(ev.value == 1)
				
					printf("Press\\n");
				
			
		
		printf("x=%d y=%d\\n",x,y);
		
		if (x>0&& y<400)
		
			show_bmp("1.bmp", 0, 0);
		
		if (x>400 && y<800)
		
			show_bmp("2.bmp", 0, 0);
		


		close(touch_fd);
		
 		return 0;		

以上是关于粤嵌gec6818开发板LED屏幕上画图(数组与内存映射的采用)换图片 电子相册 实现识别触摸坐标的识别等项目的主要内容,如果未能解决你的问题,请参考以下文章

粤嵌GEC6818-学习笔记2-屏幕相关及音频播放

粤嵌GEC6818板子TCP网络编程发送命令控制音视频

粤嵌GEC6818,基于LVGL和mplayer的音视频播放器

GEC6818开发板JPG图像显示,科大讯飞离线语音识别包Linux_aitalk_exp1227_1398d7c6运行demo程序,开发板实现录音

粤嵌实训(笔记)

迅为4418开发板/6818开发板教你如何修改屏幕