** 贪吃蛇**
By 草木灰
### 一、实验内容1、利用LED矩阵、 键盘编写一个简单的贪吃蛇游戏
2、通过编写贪吃蛇游戏这一任务,理解驱动,交叉编译,嵌入式开发
二、实验分析
此次实验可以实验的目的是进一步熟练前面学过的知识,体验嵌入式开发的过程。而且有了键盘和LED矩阵的驱动、C语言贪吃蛇程序,任务的关键就是明确各个接口:
1、嵌入式开发板的LED矩阵接口。
2、嵌入式开发板的键盘接口。
3、C语言贪吃蛇程序的显示接口。
4、C语言贪吃蛇程序的键盘接口。
5、C语言贪吃蛇的频率接口,包括地图显示频率,蛇的移动频率。
所以要求C语言贪吃蛇程序是模块化的,下面实验准备部分着重分析各个接口。
三、实验准备
1、嵌入式开发板的LED矩阵接口
下面是LED矩阵的扫描函数,主体是两层for循环
//该程序是LED驱动测试程序的一部分
d = open(DEVICE_NAME, O_RDWR);
for (i=1;i<=8;i++)
{
buf[0]=c;
buf[1]=~r; // row r虽然是整型,但通过移位和取反同样实现了行和列的选择
for (j=1;j<=8;j++)
{
write(fd,buf,2);
printf ("buf[0],buf[1]: [%x,%x]\n",buf[0],buf[1]);
usleep(200000); // sleep 0.2 second
c = c<<1;
buf[0]=c; // column
}
c = 1;
r = r<<1;
}
// close
ret = close(fd);
2、嵌入式开发板的键盘接口
把读取到的值存在pre_scancode,没有键按下时,读到的值为255,有按键被按下时反馈值为按键数值,比如按下 “ 6 ” 就反馈 “ 6 ”。
//该程序是键盘驱动测试程序的一部分
fd = open(DEVICE_NAME, O_RDWR);
buf[0]=0x22;
while (1)
{
read (fd,buf,1);
if(buf[0]!= pre_scancode) // 初始化 char pre_scancode = 0xff;
{
if(buf[0]!=0xff)
printf("key =%x\n",buf[0]);
}
pre_scancode = buf[0];
usleep(50000); // sleep 0.05 second
}
// close
ret = close(fd);
3、C语言贪吃蛇程序的显示接口
地图大小:
下面两个宏定义设定地图大小
#define H 10 //高
#define W 20 //宽
地图标志:
三种输出分别为“ ” 、“ o ”和“#”,开发板上可以设置为LED亮灭
void DrawMap() //画地图
{
int i,j;
for(i=0;i<H;i++)
{
for(j=0;j<W;j++) //两重for循环遍历数组
{
if(map.a[i][j]==0)
{
printf(" ");
}
else if(i==0