3.在gec6818开发板上显示自己小组成员名字----文字取模与显示

结构化程序设计

结构化程序设计模型 主张将项目的功能按板块划分不同的功能文件,并且同一板块也可以根据实际需求封装成不同的功能函数,以便项目的维护 和 设计 ==》请 将代码按功能封装成函数

上午任务:请将LCD屏封装成 lcd.c和lcd.h,并完成下列功能函数

lcd.h

#ifndef __LCD_H__
#define __LCD_H__

extern int lcdfd; //保存LCD屏幕文件的文件描述符
extern int *plcd; //保存LCD屏幕映射内存首地址

int lcd_init(void); //初始化LCD屏:打开和映射LCD屏幕文件
int lcd_uninit(void);//释放LCD屏:接触映射,关闭LCD屏幕文件
int lcd_draw_point(int x,int y,int color);	//画点函数,用来将坐标为(x,y)的像素点显示为color色
int lcd_draw_clear(int x0,int y0,int w,int h,int color);//清屏函数,用来将从(x0,y0)为起点,宽w,高h的矩形区域显示为 color色
int lcd_draw_FourLeafClover(void);//在屏幕上显示一个四叶草(取上下左右四个圆两两的交集)
int lcd_draw_Rainbow(void);//在屏幕上显示一个彩虹


#endif

lcd.c

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


int lcdfd = 0; //保存LCD屏幕文件的文件描述符
int *plcd = 0; //保存LCD屏幕映射内存首地址

int lcd_init(void) //初始化LCD屏:打开和映射LCD屏幕文件
{
	/* 打开LCD屏驱动设备文件 */
	lcdfd = open("/dev/fb0",O_RDWR);
	if(-1 == lcdfd)
	{
		perror("open lcd error");
		return -1;
	}

	/* 将LCD屏映射到内存空间 =》Frame Buffer 帧缓冲设备*/
	plcd = (int*)mmap(NULL,//系统自动选择映射地址
						800*480*32/8,	//映射空间大小(单位 字节),屏幕800*480个像素点,每个像素点32位(32/8个字节)
						PROT_READ|PROT_WRITE,//具备读写权限
						MAP_SHARED,//共享映射,对映射内存空间的操作会被同步到文件
						lcdfd,//指定映射的文件
						0); //从文件头开始映射
	if(MAP_FAILED == plcd)
	{
		perror("mmap lcd error");
		close(lcdfd);
		return -1;
	}

	return 0;
}

int lcd_uninit(void)//释放LCD屏:接触映射,关闭LCD屏幕文件
{
	/* 收尾:解除映射,关闭屏幕文件 */
	munmap(plcd,800*480*32/8);
	close(lcdfd);
	
	return 0;
}

int lcd_draw_point(int x,int y,int color)	//画点函数,用来将坐标为(x,y)的像素点显示为color色
{
	if(x<0 || x >=800 || y<0 || y>=480)
	{
		printf("指定画点的坐标超出屏幕范围\n");
		return -1;
	}
	
	*(plcd + y*800 + x) = color;

	return 0;
}

int lcd_draw_clear(int x0,int y0,int w,int h,int color)//清屏函数,用来将从(x0,y0)为起点,宽w,高h的矩形区域显示为 color色
{
	int x = 0;
	int y = 0;

	for(x=x0;x<=x0+w;x++)
	{
		for(y=y0;y<=y0+h;y++)
		{
			lcd_draw_point(x,y, color);
		}
	}

	return 0;
}

int lcd_draw_FourLeafClover(void)//在屏幕上显示一个四叶草(取上下左右四个圆两两的交集)
{

}

int lcd_draw_Rainbow(void)//在屏幕上显示一个彩虹
{

}

main.c

#include "lcd.h"

int main(void)
{
    lcd_init();
    
    lcd_draw_clear(0,0,800,480,0x000000);	//将整个屏幕显示为了黑色
    lcd_draw_clear(200,200,200,200,0xffff00); //在 (200,200)画一个长200,高200的矩形
    
    lcd_uninit();
    
}

文字取模与显示

前面我们实现了LCD屏幕的显示操作

那我我们是否可以在LCD屏幕上显示文字呢

早期的文字本身就是一种象形文 ==》按照物品的形状用简单的线条来描绘

山 本质上 文字其实也是图片的一种,只不过文字是一种简单的两色图形,字体本身是一种颜色,字体周围是另外一种颜色构成的简单图形

在编程语言中,它是无法直接表示一副图像,因为计算机只能识别二进制码,如何在计算机中描述上诉的文字呢

在这里插入图片描述

==》上面的文字其实就是一副只有两种颜色的图片,可以用1和0来表示该图像中那些像素点显示颜色,那些像素点不显示颜色

00001000 0X08

00001000 0X08

00001000 0X08

01001001 0X49

01001001 0X49

01001001 0X49

01001001 0X49

01001001 0X49

01001001 0X49

01001001 0X49

01001001 0X49

01111111 0X7F

上述二进制码0表示底色,1表示字体颜色,按8bit为单位转换为十六进制表示,最高位表示对应的第一个像素点是否有颜色,最低bit表示第八个像素点是否有颜色

任意给定一个十六进制编码,就可以判断出那些bit位需要显示颜色,那些不需要显示颜色

//t是一个十六进制码,(x,y)是显示的位置
for(i=7;i >=0,i--)//遍历一个十六进制码的每一个bit
{
    if( t>> i &1)
    {
        //说明对应的bit位需要上色
       	lcd_draw_point(x+(7-i),y,color);//x+(7-i)将十六进制码与其对应的像素点坐标确定下来
        
    }
}

一个文字必然是有多个十六进制码

unsigned char shan[] = {0X08,0X08,0X08,0X49,0X49,0X49,0X49,0X49,0X49,0X49,0X49,0X7F};

	for(j=0;j<12;j++)//遍历一个字对应的所有十六进制码
    {
        //j的变化对显示位置的影响
        for(i=7;i >=0,i--)//遍历一个十六进制码的每一个bit
        {
            if(shan[j]>> i &1)
            {
                //说明对应的bit位需要上色
                lcd_draw_point(x+(7-i),y+j,color);//x+(7-i)将十六进制码与其对应的像素点坐标确定下来
            }
        }
    }

此函数显示的文字,受限于字模的大小,显示得比较小,并且每个文字都自己去取模太麻烦了

因此我们可以使用一个取模软件
在这里插入图片描述

在文字输入区 右键,可以选择字体和大小

使用方法:

1 在文字输入区输入要取模的文字

2 在参数设置中有一个其他选项,确认取模方式

在这里插入图片描述

3 在文字输入框中输入ctrl+回车 生成字模图案,看是否满足需要

麻烦了

因此我们可以使用一个取模软件

[外链图片转存中…(img-gARznoNC-1686929911754)]

在文字输入区 右键,可以选择字体和大小

使用方法:

1 在文字输入区输入要取模的文字

2 在参数设置中有一个其他选项,确认取模方式

[外链图片转存中…(img-GGqmxJ1y-1686929911755)]

3 在文字输入框中输入ctrl+回车 生成字模图案,看是否满足需要

4 在取模方式中选择c51格式 生成字模后,会将我们输入的每一个字都转换成十六进制码

案例代码:显示自己小组成员名字(只需在zimu.h中更改名字的字符编码后然后运行,二维数组的行数代表字的个数)

zimu.h

#ifndef __ZIMU_H__
#define __ZIMU_H__

static unsigned char myzimu[9][32*29/8] = {

/*--  文字:  熊  --*/
/*--  宋体22;  此字体下对应的点阵为:宽x高=29x29   --*/
/*--  宽度不是8的倍数,现调整为:宽度x高度=32x29  --*/


{0x00,0x00,0x00,0x00,0x03,0x81,0x80,0x00,0x03,0xC1,0xE0,0x00,0x07,0x81,0xC3,0x00,
0x07,0x39,0xCF,0x80,0x0C,0x1D,0xFE,0x00,0x3F,0xFF,0xF0,0xC0,0x3F,0xFF,0xC0,0xC0,
0x1C,0x07,0xC0,0xC0,0x08,0x19,0xFF,0xE0,0x1F,0xFC,0xFF,0xC0,0x0E,0x1D,0x80,0x00,
0x0E,0x1D,0xE0,0x00,0x0F,0xFD,0xC3,0x00,0x0E,0x1D,0xCF,0x80,0x0E,0x1D,0xFF,0x00,
0x0F,0xFD,0xF0,0xC0,0x0E,0x1D,0xC0,0xC0,0x0E,0x1D,0xC0,0xC0,0x0E,0xFD,0xFF,0xE0,
0x0E,0xF8,0xFF,0xE0,0x1C,0x38,0x00,0x00,0x06,0x01,0x87,0x00,0x0C,0x70,0xE3,0x80,
0x0C,0x38,0xE1,0xC0,0x1C,0x38,0xF1,0xE0,0x3C,0x3C,0x70,0xE0,0x38,0x18,0x70,0xC0,
0x00,0x00,0x00,0x00},


/*--  文字:  全  --*/
/*--  宋体22;  此字体下对应的点阵为:宽x高=29x29   --*/
/*--  宽度不是8的倍数,现调整为:宽度x高度=32x29  --*/
{0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x1F,0x00,0x00,
0x00,0x1F,0x00,0x00,0x00,0x3D,0x80,0x00,0x00,0x79,0xC0,0x00,0x00,0x70,0xE0,0x00,
0x00,0xE0,0x70,0x00,0x01,0xE0,0x3C,0x00,0x03,0xC0,0x1F,0x00,0x07,0x80,0x1F,0xE0,
0x0F,0xFF,0xFF,0xF0,0x1D,0x87,0x01,0xE0,0x78,0x07,0x00,0x00,0xC0,0x07,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x07,0x0E,0x00,0x07,0xFF,0xFF,0x00,0x03,0x07,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x80,
0x00,0x07,0x01,0xC0,0x3F,0xFF,0xFF,0xE0,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00},

/*--  文字:  明  --*/
/*--  宋体22;  此字体下对应的点阵为:宽x高=29x29   --*/
/*--  宽度不是8的倍数,现调整为:宽度x高度=32x29  --*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x81,0xC0,0x18,0x31,0xFF,0xC0,
0x1F,0xF9,0xC1,0xC0,0x1C,0x39,0xC1,0xC0,0x1C,0x39,0xC1,0xC0,0x1C,0x39,0xC1,0xC0,
0x1C,0x39,0xC1,0xC0,0x1C,0x39,0xC1,0xC0,0x1C,0x39,0xFF,0xC0,0x1F,0xF9,0xC1,0xC0,
0x1C,0x39,0xC1,0xC0,0x1C,0x39,0xC1,0xC0,0x1C,0x39,0xC1,0xC0,0x1C,0x3B,0xC1,0xC0,
0x1C,0x3B,0xFF,0xC0,0x1F,0xFB,0x81,0xC0,0x1C,0x3B,0x81,0xC0,0x1C,0x33,0x81,0xC0,
0x1C,0x03,0x81,0xC0,0x00,0x07,0x01,0xC0,0x00,0x07,0x01,0xC0,0x00,0x0E,0x01,0xC0,
0x00,0x1C,0x31,0xC0,0x00,0x38,0x3F,0xC0,0x00,0xF0,0x07,0x80,0x01,0xC0,0x03,0x00,
0x00,0x00,0x00,0x00},

/*--  文字:  张  --*/
/*--  宋体22;  此字体下对应的点阵为:宽x高=29x29   --*/
/*--  宽度不是8的倍数,现调整为:宽度x高度=32x29  --*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x63,0xC0,0x00,
0x7F,0xF3,0x81,0x00,0x30,0xE3,0x83,0x80,0x00,0xE3,0x87,0xC0,0x00,0xE3,0x87,0x80,
0x00,0xE3,0x8E,0x00,0x18,0xE3,0x9C,0x00,0x1F,0xE3,0xB8,0x00,0x1C,0xE3,0xF0,0x00,
0x38,0x03,0xC0,0x00,0x38,0x03,0x80,0xE0,0x38,0xFF,0xFF,0xF0,0x7F,0xFB,0xE0,0x00,
0x39,0xC3,0xB0,0x00,0x01,0xC3,0xB0,0x00,0x01,0xC3,0xB8,0x00,0x01,0xC3,0x98,0x00,
0x01,0xC3,0x9C,0x00,0x01,0xC3,0x8E,0x00,0x01,0xC3,0x8F,0x00,0x01,0xC3,0xBF,0x80,
0x33,0xC3,0xF3,0xF0,0x1F,0x83,0xC1,0xF0,0x0F,0x83,0x80,0xC0,0x06,0x03,0x80,0x00,
0x00,0x00,0x00,0x00},

/*--  文字:  晨  --*/
/*--  宋体22;  此字体下对应的点阵为:宽x高=29x29   --*/
/*--  宽度不是8的倍数,现调整为:宽度x高度=32x29  --*/
{0x00,0x00,0x00,0x00,0x02,0x00,0x07,0x00,0x03,0xFF,0xFF,0x00,0x03,0x80,0x07,0x00,
0x03,0x80,0x07,0x00,0x03,0xFF,0xFF,0x00,0x03,0x80,0x07,0x00,0x03,0x80,0x07,0x00,
0x03,0xFF,0xFF,0x00,0x03,0x80,0x07,0x00,0x0E,0x00,0x01,0x80,0x0F,0xFF,0xFF,0xC0,
0x0E,0x00,0x00,0x00,0x0E,0x00,0x0E,0x00,0x0F,0xFF,0xFF,0x00,0x0E,0x80,0x00,0x00,
0x0E,0x00,0x00,0xE0,0x0F,0xFF,0xFF,0xF0,0x0E,0xE6,0x1E,0x00,0x0E,0xE3,0x1E,0x00,
0x1C,0xE3,0xB8,0x00,0x1C,0xE1,0xF0,0x00,0x1C,0xE0,0xF0,0x00,0x1C,0xE3,0xFC,0x00,
0x18,0xFF,0x3F,0xE0,0x38,0xFC,0x0F,0xF0,0x70,0x70,0x03,0xC0,0x60,0x60,0x00,0x00,
0x00,0x00,0x00,0x00},

/*--  文字:  宇  --*/
/*--  宋体22;  此字体下对应的点阵为:宽x高=29x29   --*/
/*--  宽度不是8的倍数,现调整为:宽度x高度=32x29  --*/
{0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x80,0x00,
0x00,0x07,0x80,0x00,0x0C,0x03,0x01,0xC0,0x0F,0xFF,0xFF,0xE0,0x0E,0x00,0x01,0xE0,
0x1E,0x00,0x03,0x80,0x3C,0x00,0x03,0x00,0x1C,0x00,0x1E,0x00,0x07,0xFF,0xFF,0x00,
0x03,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0xC0,0x00,0x07,0x01,0xE0,
0x7F,0xFF,0xFF,0xF0,0x30,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,
0x00,0xE7,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0E,0x00,0x00,
0x00,0x00,0x00,0x00},
/*--  文字:  王  --*/
/*--  宋体22;  此字体下对应的点阵为:宽x高=29x29   --*/
/*--  宽度不是8的倍数,现调整为:宽度x高度=32x29  --*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,
0x1F,0xFF,0xFF,0xC0,0x08,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x07,0x07,0x00,0x0F,0xFF,0xFF,0x80,0x06,0x07,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,
0x00,0x07,0x00,0xE0,0x7F,0xFF,0xFF,0xF0,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00},

/*--  文字:  志  --*/
/*--  宋体22;  此字体下对应的点阵为:宽x高=29x29   --*/
/*--  宽度不是8的倍数,现调整为:宽度x高度=32x29  --*/
{0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x03,0x80,0x1F,0xFF,0xFF,0xC0,
0x0C,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,
0x00,0x07,0x0E,0x00,0x07,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,
0x00,0x0F,0x00,0x00,0x00,0x87,0x80,0x00,0x0E,0xE7,0x87,0x00,0x0C,0xE3,0x83,0x80,
0x0C,0xE3,0x9D,0xC0,0x1C,0xE0,0x1D,0xE0,0x3C,0xE0,0x1C,0xF0,0x3C,0xE0,0x1C,0xE0,
0x38,0xFF,0xFE,0x60,0x00,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00},

/*--  文字:  鹏  --*/
/*--  宋体22;  此字体下对应的点阵为:宽x高=29x29   --*/
/*--  宽度不是8的倍数,现调整为:宽度x高度=32x29  --*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x31,0xB3,0x8F,0x00,0x3F,0xFF,0xEC,0xC0,0x3B,0xBB,0xFF,0xE0,0x3B,0xBB,0xF0,0xE0,0x3B,0xBB,0xFC,0xE0,0x3B,0xBB,0xFE,0xE0,
0x3B,0xBB,0xF7,0xE0,0x3B,0xBB,0xF7,0xE0,0x3F,0xBF,0xF7,0xE0,0x3B,0xBB,0xFF,0xC0,
0x3B,0xBB,0xF7,0xC0,0x3B,0xBB,0xF3,0x80,0x3B,0xBB,0xF0,0x60,0x3B,0xBB,0xFF,0xF0,
0x3F,0xBF,0xB0,0x70,0x3B,0xBB,0x80,0x70,0x3B,0xB3,0x80,0x70,0x3B,0xB3,0x83,0x60,
0x3B,0xB3,0xFF,0xE0,0x3B,0xF3,0xC0,0xE0,0x3B,0xF3,0x80,0xE0,0x33,0xF3,0x80,0xE0,
0x7F,0xE3,0x80,0xE0,0x67,0xFF,0x8F,0xE0,0x60,0xCF,0x07,0xC0,0xC1,0x86,0x01,0x80,
0x00,0x00,0x00,0x00}
};


#endif

main.c

#include"lcd.h"
#include"zimu.h"

int main(void)
{
	int i = 0;
	lcd_init();
	lcd_draw_clear(0,0,800,480,0x000000);//清屏函数,用来将从(x0,y0)为起点,宽w高h的矩形区域显示为color
	//show_shan(200,200,0xff0000);
	for ( i = 0; i < 9; i++)
	{
		lcd_draw_word(myzimu[i],32,29,100+i*32,100,0xff0000);
	}

	lcd_uninit();//释放LCD屏幕;解除映射,关闭LCD屏幕文件
	return 0;
}

lcd.c

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

	int lcdfd = 0;
	ssize_t rsize = 0;
	int x=0,y=0;
	int*plcd =NULL;//LCD屏幕文件的内容是像素点的颜色值,一个颜色值是32位的,因此可以直接用int*指针指向映射空间的首地址,即plcd指向的就是一个像素点

	/*打开LCD屏驱动设备文件*/
	int lcd_init(void)
	{
	lcdfd = open("/dev/fb0",O_RDWR);//打开lcd屏幕
		if (lcdfd == -1)
		{
			perror("open lcd error");
			return -1;
		}

		/*da将LCD屏映射到内存空间 =》Frame Buffer 帧缓冲设备*/
		plcd = (int*)mmap(NULL,//系统自动选择映射地址
							800*480*32/8,//映射空间大小(单位 字节),屏幕800*480个像素点,每个像素点32位(32/8)字节
							PROT_READ|PROT_WRITE, //具备读写权限
							MAP_SHARED,//共享映射,对映射内存空间的操作会被同步到文件
	                  		lcdfd,//指定映射的文件
	                  		0);//从文件头开始映射
		if (MAP_FAILED == plcd)
		{
			perror("mmap lcd error");
			close(lcdfd);
			return -1;
		}
	}
	
	int lcd_draw_point(int x,int y,int color)
	{
		if(x<0||x>=800||y<0||y>=480)
		{
			printf("指定画点坐标超出屏幕范围\n");
			return -1;
		}
		*(plcd+y*800+x)=color;

	}

int lcd_draw_clear(int x0,int y0,int w,int h,int color)
{
	int x=0,y=0;
	for(x=x0;x<x0+w;x++)
	{
		for (y=y0; y < y0+h; y++)
		{
			lcd_draw_point(x,y,color);
		}
	}
}

int lcd_draw_fourleafclover(void)//四叶草
{
	
}
int lcd_draw_rainbow(void)//彩虹
{

}

	/*解除映射,关闭屏幕文件*/
int lcd_uninit(void)
{
	munmap(plcd,800*480*32/6);
	close(lcdfd);
	return 0;
}
	
void show_shan(int x0,int y0,int color)
{
	unsigned char shan[] = {/*--  文字:  山  --*/
/*--  楷体22;  此字体下对应的点阵为:宽x高=30x29   --*/
/*--  宽度不是8的倍数,现调整为:宽度x高度=32x29  --*/
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x0C,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0x80,0x00,
0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x02,0x00,
0x00,0x07,0x03,0xC0,0x00,0x07,0x03,0xC0,0x1C,0x07,0x03,0xC0,0x1E,0x07,0x03,0x80,
0x0F,0x07,0x03,0x80,0x0F,0x07,0x03,0x80,0x07,0x07,0xFF,0x80,0x06,0xFF,0xFF,0x80,
0x0F,0xFE,0x03,0x80,0x1F,0xC0,0x07,0x80,0x0E,0x00,0x07,0x80,0x00,0x00,0x07,0x00,
0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00

};
	int i,j;
	for(j=0;j<32*29/8;j++)//遍历一个字对应的所有十六进制码
    {
        //j的变化对显示位置的影响
        for(i=7;i >=0;i--)//遍历一个十六进制码的每一个bit
        {
            if(shan[j]>> i &1)
            {
                //说明对应的bit位需要上色
                lcd_draw_point(x0+(7-i)+(j%4)*8,y0+j/4,color);
                //x+(7-i)将十六进制码与其对应的像素点坐标确定下来
                //+(j%4)*8 每一行有32个像素点,由四个字节来表示
            }
        }
    }
}

void lcd_draw_word(unsigned char word16[],int w,int h,int x0,int y0,int color)
{
	int i,j;
	for(j=0;j<w*h/8;j++)//遍历一个字对应的所有十六进制码
    {
        //j的变化对显示位置的影响
        for(i=7;i >=0;i--)//遍历一个十六进制码的每一个bit
        {
            if(word16[j]>> i &1)
            {
                //说明对应的bit位需要上色
                lcd_draw_point(x0+(7-i)+(j%(w/8))*8,y0+j/(w/8),color);
                //x+(7-i)将十六进制码与其对应的像素点坐标确定下来
                //+(j%4)*8 每一行有32个像素点,由四个字节来表示
            }
        }
    }
}

lcd.h

#ifndef __LCD_H__
#define __LCD_H__

extern int lcdfd;//保存LCD屏幕文件的文件描述符
extern int *plcd;//保存LCD屏幕映射内存首地址

int lcd_init(void);//初始化LCD屏幕;打开和映射LCD屏幕文件
int lcd_uninit(void);//释放LCD屏幕;解除映射,关闭LCD屏幕文件
int lcd_draw_point(int x,int y,int color);//花点函数,用来将坐标为(x,y)的像素点显示为color
int lcd_draw_clear(int x0,int y0,int w,int h,int color);//清屏函数,用来将从(x0,y0)为起点,宽w高h的矩形区域显示为color
int lcd_draw_fourleafclover(void);//四叶草
int lcd_draw_rainbow(void);//彩虹
void show_shan(int x0,int y0,int color);
void lcd_draw_word(unsigned char word16[],int w,int h,int x0,int y0,int color);

#endif

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于粤嵌gec6818开发板的小游戏有五子棋、2048游戏、扫雷、飞机大战、钢琴游戏、刮刮乐等。这些小游戏都可以通过简单的程序设计和硬件驱动来实现。 五子棋是一种简单而又经典的棋类游戏,玩家通过下棋子来争夺胜利。通过gec6818的触摸屏幕输入,可以实现玩家与电脑的对战,或者两个玩家之间的互动。 2048游戏是一款数学益智类游戏,玩家通过上下左右的滑动操作,将相同数值的方块合并,最终得到2048这个数值的方块。通过gec6818的触摸屏幕输入,可以实现玩家的滑动操作,将方块进行合并。 扫雷是一款经典的益智类游戏,玩家通过点击格子,来揭示隐藏的雷,避免踩雷。通过gec6818的触摸屏幕输入,可以实现玩家的点击操作,将雷揭示出来。 飞机大战是一款横版射击游戏,玩家通过控制飞机,射击敌方飞机和敌方炮台,躲避敌方的攻击。通过gec6818的按键输入,可以实现玩家的控制操作,进行射击和躲避。 钢琴游戏是一款音乐类游戏,玩家通过按下不同的琴键,发出不同的音符,弹奏出美妙的音乐。通过gec6818的按键输入,可以实现玩家的按键操作,发出不同的音符。 刮刮乐是一种益智类游戏,玩家通过刮开卡片上的涂层,获得隐藏的奖品。通过gec6818的触摸屏幕输入,可以实现玩家的刮卡操作,揭开涂层,看到奖品。 以上这些游戏都是基于粤嵌gec6818开发板所设计的,通过合理的硬件和软件开发,可以让人们在休闲娱乐中享受到游戏乐趣。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

黎明的前夜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值