OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10684|回复: 26

STC5A60S2,5110,PCB板,多功能贪吃蛇游戏机!

[复制链接]

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
发表于 2014-6-30 14:11:57 | 显示全部楼层 |阅读模式

最近一直忙期末,好久没来论坛,今天发个论坛帖,庆祝一下本学期圆满结束。

前段时间在论坛上看有STM32的贪吃蛇,俄罗斯方块帖子,自己一直想研究研究,因为小时候真样的掌机都玩过吧,现在终于有能力一探究竟了。

,本想用Mini板子移植个程序算了,但是板子上按键不方便,于是正好手头有个5a60s2芯片,就准备做个小板子,液晶有12864,可是太笨重,

就用了5110,5110GRAM格式显示点不太好,就只有建了个BUF,可以实现点的显示,然后拓展出字符串,位图显示等,一些基本的显示没有用

BUF,程序基本是自己写的,可以用宏定义选择是否使用BUF。

板子本来计划自己用蓝油腐蚀出一块,但是期末时间有点紧,以前也没投过板,然后一时激动,就稍微改了改,发淘宝PCB打样去了,错误不足很多

,但完全能用,大家就别喷我了,,,(也没画原理图什么的,直接拿封装画的PCB,,,本来单层板就能实现,但是打样一个价,就。。。)

硬件不难,只算是最小系统加了按键,LCD,5V稳压电源,

然后重点主要放在程序上了,看到几个论坛上的帖子,里面程序有点乱,不方便移植,

我主要是将LCD驱动和游戏代码分开,实现只需移植一个画点函数,就基本可以在所有平台上移植了,同时还可以调节SNAKE蛇体node,以及游戏边框宽度

还有是否介意边界(就是撞墙不死,咬住自己才死,算是开挂了的。。。)

主要算法蛇体移动,参照了很多人的,自己也优化了一些,既然开源,大家也别在意版权了。呵呵。。

先给上个图

程序中还可以自定义关卡,升级分数等等,注释算是比较详细的,坑定会有bug?,希望指出,

另外这个板子完全可以加上蓝牙,无线模块,作为一个遥控器平台,按键的布局不算太好,只有几个接到了中断上,

反正是比手焊的漂亮点,


一共是10块,自己留两块,要是有需要的盆友,出个邮费,就送了,个人想法是把以前玩过的俄罗斯,坦克,推箱子什么的都试着一直一遍

反正自己通过这个程序,把结构体,枚举变量都熟悉了一遍

下面简单上点代码

#ifndef __SNAKE_H__
#define __SNAKE_H__

typedef unsigned char u8;

/*LCD相关宏定义*/
#define LCD_X 84 //X向 分辨率 但坐标是 0-83
#define LCD_Y 48 //Y向 分辨率 0-47

/*按键编码*/
#define LEFT 6
#define RIGHT 5
#define UP 7
#define DOWN 8

/**************************************************************************/
/*关于屏幕坐标以及游戏坐标的转换(蛇的每个节一般不会用屏幕最小点表示哈)*/
//以Node中心点为坐标点

/*此两宏定义为配置游戏显示的主要参数*/
#define Border_Pix 1//定义边界的像素宽度
#define Step_Length 3 //步长 每移动一次的距离 要以奇数点定义 1 3 5 7 ...算法原因 否则会出现特殊情况
/*此两宏定义为配置游戏显示的主要参数*/

#define Node_Length  Step_Length
#define Game_X_Max  (LCD_X-2*Border_Pix)/Step_Length-1 //84/3-1=26 ... 3   共27*15个可用点
#define Game_Y_Max  (LCD_Y-2*Border_Pix)/Step_Length-1 //48/3-1=14 ... 3
#define OFFSET Step_Length/2 //计算坐标偏移
//经过屏幕坐标转换后剩余的无法利用的像素
/*用于游戏边界划分*/
#define Pix_Left_X (LCD_X-2*Border_Pix)%Step_Length
#define Pix_Left_Y (LCD_Y-2*Border_Pix)%Step_Length
/**************************************************************************/
/*蛇的一些宏定义*/
#define SNAKE_MAX_NODE 25   //蛇的最大长度
#define Initial_Node 6   //蛇的初始节数
#define Initial_Orientation  right//蛇的初始方向
#define Initial_X 3  //蛇的初始坐标
#define Initial_Y 3
/*游戏规则的一些配置*/
#define Score_Over 3//超过此分数 升级
#define Level_Over 5//超过此等级 通关
#define SpeedAdd_PerLevel 45 //每一等级的速度增量 3*70 < 300

/*食物配置*/
#define Food_Initial_X 5 //食物的初始坐标
#define Food_Initial_Y 5

/*定义是否有边界 若定义0 则蛇接触到边界会从另一边对应位置出现 不会Dead*/
//允许穿越边界 但分数会 -1
#define border 1 //1 则介意边界


LCD部分



#ifdef USE_GRAM

void GRAM_Refresh(void);
void GRAM_Clear(uchar color);
void GRAM_DrawPoint(uchar x,uchar y,bit color);//x 0-83 y 0-47
void GRAM_DrawLine(uchar x1,uchar y1,uchar x2,uchar y2);
void GRAM_DrawRectangle(uchar x1,uchar y1,uchar x2,uchar y2);
//void GRAM_DrawCircle(uchar x0,uchar y0,uchar r);
//void GRAM_Fill(uchar x1,uchar y1,uchar x2,uchar y2,bit color);
//一下为在GRAM中实现Basic函数
void GRAM_DrawBitmap(uchar X,uchar Y,uchar *map,
           uchar Pix_x,uchar Pix_y);
void GRAM_DrawChar(uchar x,uchar y,uchar c);
void GRAM_DrawStr(uchar x,uchar y,uchar *s);
void GRAM_Draw2Num(uchar x,uchar y,uchar num,uchar len);

#else
/*基本操作,不使用GRAM缓存*/
void LCD_Clear(uchar color);
void LCD_SetXY(uchar X, uchar Y);//X 0-83 Y 0-5
void LCD_ShowChar(uchar c);
void LCD_ShowNum(uchar x,uchar y,uchar num);//显示单个数字0-9
void LCD_Show2Num(uchar x,uchar y,uchar num,uchar len);
void LCD_ShowStr(uchar X,uchar Y,char *s);
void LCD_ShowBitmap(uchar X,uchar Y,uchar *map,
                    uchar Pix_x,uchar Pix_y);
void LCD_WriteByte(uchar dat, uchar dc);

#endif/*USE_GRAM*/

下面是工程文件,Keil4的,

视频

 

按键部分稍有问题,暂时是在循环中扫描,灵敏度会受贪吃蛇速度影响

Code_5110_GameBox.rar

108.28 KB, 下载次数: 2278

把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

222

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-11-21
在线时间
0 小时
发表于 2014-6-30 14:45:06 | 显示全部楼层
赞一个。。。谢谢分享
回复 支持 反对

使用道具 举报

11

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-6-26
在线时间
3 小时
发表于 2014-6-30 18:15:42 | 显示全部楼层
学有所用,真是厉害
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-6-30 18:34:44 | 显示全部楼层
谢谢分享。。。。
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-6-30 20:09:01 | 显示全部楼层
赞一个,多谢分享。
开往春天的手扶拖拉机
回复 支持 反对

使用道具 举报

33

主题

481

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
5075
金钱
5075
注册时间
2013-10-4
在线时间
654 小时
发表于 2014-6-30 20:27:07 | 显示全部楼层
谢谢分享。。。。。。。
回复 支持 反对

使用道具 举报

126

主题

820

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1683
金钱
1683
注册时间
2012-10-28
在线时间
62 小时
发表于 2014-6-30 20:38:35 | 显示全部楼层
谢谢分享,多谢了
坚持学习!就能成功!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-6-30 21:03:47 | 显示全部楼层
不错,cool
回复 支持 反对

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
 楼主| 发表于 2014-7-1 01:28:01 | 显示全部楼层
感谢各位支持,小作品而已 另外,有八块空板免费送,需要的请留言
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复 支持 反对

使用道具 举报

20

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2012-7-26
在线时间
0 小时
发表于 2014-7-9 16:25:02 | 显示全部楼层
设计很酷啊 
邀请你参加征文活动,分享你的设计,让更多的网友看到你的DIY项目
http://www.eeboard.com/zhengwen
已参加作品秀
http://www.eeboard.com/zhengwen/zp
开发板商城 www.eeboard.com/shop
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2014-10-29
在线时间
0 小时
发表于 2014-10-29 14:02:26 | 显示全部楼层
回复【9楼】爱博不专:
---------------------------------
楼主送我一块QQ472731091
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2014-11-15
在线时间
0 小时
发表于 2014-11-15 22:45:41 | 显示全部楼层
楼主为什么我用你的源代码在我的keil 4里生成不了hex文件求指教
回复 支持 反对

使用道具 举报

15

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2014-11-2
在线时间
24 小时
发表于 2014-11-16 15:05:31 | 显示全部楼层
回复【9楼】爱博不专:
---------------------------------
送我一块吧QQ854997179
回复 支持 反对

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
 楼主| 发表于 2014-11-16 17:03:14 | 显示全部楼层
回复【11楼】物联科技:
---------------------------------
你这头像。。。。
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复 支持 反对

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
 楼主| 发表于 2014-11-16 17:03:30 | 显示全部楼层
回复【13楼】过客:
---------------------------------
好的
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复 支持 反对

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
 楼主| 发表于 2014-11-16 17:04:22 | 显示全部楼层
回复【12楼】永远never@:
---------------------------------
你得选择让它生成啊
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复 支持 反对

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
 楼主| 发表于 2014-11-16 17:11:34 | 显示全部楼层
回复【13楼】过客:
---------------------------------
QQ搜不到你,加我吧765107295
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复 支持 反对

使用道具 举报

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2014-5-28
在线时间
16 小时
发表于 2014-11-18 15:13:42 | 显示全部楼层
回复【17楼】爱博不专:
---------------------------------
#define T1MS (65536-FOSC/100)      //1ms timer calculation method in 1T mode
这里有些不明白FOSC如果是115200的话,除100的话,是比65535大吧?

感觉应该是除1000.
回复 支持 反对

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
 楼主| 发表于 2014-11-18 22:16:31 | 显示全部楼层
回复【18楼】any_014:
---------------------------------
115200/100=1152<<65536   ...
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复 支持 反对

使用道具 举报

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2014-5-28
在线时间
16 小时
发表于 2014-11-19 09:13:39 | 显示全部楼层
回复【19楼】爱博不专:
---------------------------------
我晕了,昨天不知道是怎么想的...
---------------------------------
#define FOSC 11059200L
不是115200啊。
---------------------------------
另:T1.C和T0.C里都定义了T1MS
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2014-11-15
在线时间
0 小时
发表于 2014-11-21 23:12:35 | 显示全部楼层
回复【16楼】爱博不专:
---------------------------------
谢谢了。我软件忘破解了、。》《
回复 支持 反对

使用道具 举报

1

主题

29

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2027
金钱
2027
注册时间
2014-7-29
在线时间
125 小时
发表于 2014-12-1 09:54:47 | 显示全部楼层
这个必须要顶起 很不错
回复 支持 反对

使用道具 举报

32

主题

153

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
453
金钱
453
注册时间
2014-11-5
在线时间
0 小时
发表于 2014-12-1 22:36:05 | 显示全部楼层
好厉害。什么芯片?
酱油团队--
回复 支持 反对

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
 楼主| 发表于 2014-12-5 13:19:14 | 显示全部楼层
回复【23楼】xiaolong12:
---------------------------------
51的。。。没必要多高级的芯片吧
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复 支持 反对

使用道具 举报

0

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-12-21
在线时间
0 小时
发表于 2015-1-6 20:46:05 | 显示全部楼层
楼主的小手按的疼不疼呀?
回复 支持 反对

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
 楼主| 发表于 2015-1-6 22:49:32 | 显示全部楼层
回复【25楼】sakuya:
---------------------------------
...求给改成摇杆的。。。
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-1-9 13:37:09 | 显示全部楼层
Nice job
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 07:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表