新手,第一次发资料~~~
给大家传一个坦克大战游戏机,用51单片机做的。键盘是用6个按钮排成游戏手柄的形状,左边四个控制自己的坦克移动,右边两个是暂停和射击键。屏幕是4个8*8的红绿双 {MOD}点阵屏拼成的16*16点阵,游戏开始时敌人有三个红 {MOD}坦克,在屏幕右上角出现,发的子_弹也是红 {MOD};我方坦克绿 {MOD},在左下角,子_弹是绿 {MOD};墙壁是红绿混合后的颜 {MOD},看上去是黄 {MOD}。敌人那些坦克是随机动的,乱打一通~~呵呵
源程序在这里,不是标准的C语言,不过也很容易移植到Keil上。还有些别的游戏机在我的博客上( myrobot.2 1 i c.org 不好意思去掉空格啊 ),欢迎大家去看。 上学来净做游戏机了..
坦克大战游戏源代码
ourdev_561623.rar(文件大小:4K) (原文件名:坦克大战.rar)
这是几张照片,颜 {MOD}照的不是很清楚:
(原文件名:坦克大战(屏幕).JPG)
(原文件名:坦克游戏模糊全景.JPG)
(原文件名:坦克游戏清晰.JPG)
这是背面电路,连线很繁琐,静下心来焊了一天。
(原文件名:背面整体.JPG)
(原文件名:背面细节.JPG)
-----------------------------------------------------------------------
38楼 tear: 我是廊坊师范的, 呵呵
我用的手柄是那种很老的在电视上玩的游戏机手柄(魂斗罗,忍者龟,超级玛丽...), 几块钱一个,应该快淘汰了.
上面有9个引脚,上边5个, 下边4个, 有4个线是起固定作用的, 剩下5根线是电源+,-,CP,D,RST. 那引脚排列哈~~等下我研究研究,
再把引脚图传上来. 和单片机相连的就是那3个线, 时序和CD4017类似, 先给RST复位信号, 再依次通过CP送8个脉冲, 各个按键的
状态就依次在数据线D上输出. 各个键可以同时按, 互不相关. 下面是读键盘程序, 返回当前键值, 不是标准C语言有些稀奇古怪的语法, 反正大体意思大家一看就懂,很容易改到Keil上的.
//游戏手柄元件,返回当前按键值, 为1表示对应键按下.
//这个是库函数的代码,所以三个控制引脚定位到一个中间元件上
unit game_pad
{
//初始化
public void init()
{
d = high;
cp = low;
reset = high;
}
//读取键盘按键
public uint8 read()
{
uint8 key_data;
reset = high;
loop( 8 ) {
key_data <<= 1;
key_data.0 = d;
reset = low;
cp = high;
cp = low;
}
return key_data;
}
//键盘枚举值, 用相与判零的方式检测按下
public const uint8 right = 0b0000_0001;
public const uint8 left = 0b0000_0010;
public const uint8 down = 0b0000_0100;
public const uint8 up = 0b0000_1000;
public const uint8 start = 0b0001_0000;
public const uint8 select = 0b0010_0000;
public const uint8 a = 0b0100_0000;
public const uint8 b = 0b1000_0000;
//手柄信号线定义
bit cp = @game_pad_port.cp;
bit d = @game_pad_port.d;
bit reset = @game_pad_port.reset;
}
//接口,这个元件类型是由用户定义的,根据具体的硬件连接设置端口
unit game_pad_port
{
bit cp = @sfr.P1.0;
bit d = @sfr.P1.1;
bit reset = @sfr.P1.2;
}
原来制表符显示不了啊..
一周热门 更多>