编写一个程序,使得在LCD上显示八个不同的单色色块,并呈逆时针流转显示。

lcd显示屏800*480所学,如有错误或者有更好的方法不妨留言我,谢谢



#include <stdio.h>
#include <sys/stat.h>
#include <errno.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <stdint.h>
#include<string.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
	//打开LCD设备
	int fd = open("/dev/fb0",O_RDWR);
	if(fd == -1)
	{
		perror("打开失败");
		exit(0);
	}
	
	//2.将lcd设备映射到一块恰当大小相同的内存中
	char *p = mmap(NULL,800*480*4,PROT_READ |PROT_WRITE,MAP_SHARED,fd,0/*文件位置与映射内存的相对偏移量*/);
	
	//准备8个的色块像素对
	
	uint32_t color[] = {0xFF0000,0x00FF00,0x0000FF,0x009900,0xFFFFFF,0x660000,0x9900cc,0xFFFF00};
	
	
		//将像素点铺满整个内存
		for(int a = 0;;a++)
		{
	for(int i=0;i<240;i++)
	{
		long offset = 800*4*i;
		for(int j=0;j<200;j++)
		{
			// 和8不断求余获取它的数组的值,
			memcpy(p+4*j+offset+200*4*0,&color[(a)%8+0],4);//第一行的第一个格子
			memcpy(p+4*j+offset+200*1*4,&color[(a)%8+1],4);
			memcpy(p+4*j+offset+200*2*4,&color[(a)%8+2],4);
			memcpy(p+4*j+offset+200*3*4,&color[(a)%8+3],4);
			memcpy(p+4*j+offset+200*0*4+800*240*4,&color[(a)%8+7],4);//逆时针旋转第一个要接着第五个
			memcpy(p+4*j+offset+200*1*4+800*240*4,&color[(a)%8+6],4);
			memcpy(p+4*j+offset+200*2*4+800*240*4,&color[(a)%8+5],4);
			memcpy(p+4*j+offset+200*3*4+800*240*4,&color[(a)%8+4],4);
		}
		
	}
	
	sleep(1);
	
	}
	
	
	//5释放响应内存
	munmap(p,800*240*4);
	close(fd);
	return 0;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咕噜咕噜π

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值