amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 187593|回复: 1753

挑战极限(一)!小玩意,AT89C2051驱动彩显玩方块游戏

  [复制链接]
发表于 2009-2-16 22:34:38 | 显示全部楼层 |阅读模式
89C2051能干什么?这次我打算用它来做个方块游戏,用彩显来显示。
但2051那点速度,那点内存,做起来好不容易。
没有PWM输出,只能用软件模拟彩显的行,场同步信号。
仅128 BIT内存,其中112字节用作显示缓存,剩下给系统的只有16字节了。
硬件倒是简单,所以就连洞洞板也没焊,拿个IC座空中搭桥来测试。
程序还有些BUG,迟些改好后再上传。

(原文件名:图1.jpg)


(原文件名:图2.jpg)


(原文件名:图3.jpg)

以下蓝色文字由版主:xuyiyi 于:2009-08-18,13:08:51 加入。


呵呵,终于做好了,并加了个动感的开机动画,先上视频。
点击此处下载 ourdev_421910.rar(文件大小:2.53M) (原文件名:Tetris.rar)

最新版原理图及 PCB图,终结完美版。
点击此处下载 ourdev_433410.rar(文件大小:49K) (原文件名:终结版VGA_3.rar)

俄罗斯方块游戏源码:
点击此处下载 ourdev_433333.rar(文件大小:12K) (原文件名:俄罗斯方块游戏_V33_源码[89C4051].rar)

俄罗斯方块游戏Hex码:
点击此处下载 ourdev_472211.rar(文件大小:3K) (原文件名:Tetris33 4051 hex file.rar)

网友 cowboy 设计总结:
  整板测试完毕,基本满意。还有一些小毛病:
1、显示网格信号时,发现有轻微拖尾现象,发现是下拉电阻R13(3.3K)过大所致,改为1K后正常。
2、三极管封装丝印画反了,所有三极管全部转 180度安装才正确,即将 C, E 引脚对换。
   切记不要按丝印的那个“D”形来安装,要转180度才正确。
3、电源退耦电容小了点,当扬声器阻抗较低,且电源内阻大时,画面有些干扰。

----------------------------------------------------------------------------------------------

网友 xiaozhiyong 测试 LS2051 总结:
  LS2051测试成功了。
关于LS2051每运行一条语句只用一个机器周期,所以在AT2051里的双周期语句后都得加NOP。我改了以后试了下发现能用,现在先发个暂时看着能用的程序。以下是测试程序:
点击此处下载 ourdev_433306.rar(文件大小:2K) (原文件名:LS2051test.rar)


(原文件名:成品图.jpg)


(原文件名:方块游戏框图.JPG)


(原文件名:Tetris.PNG)
发表于 2009-2-16 22:38:24 | 显示全部楼层
如果楼主的东西是真货,就快赶上雅达利了……

不过话说回来,我可不太认为如今这年头这种说法是褒奖……
发表于 2009-2-16 22:44:03 | 显示全部楼层
不顶不行啊
发表于 2009-2-16 22:51:05 | 显示全部楼层
不错.支持...
 楼主| 发表于 2009-2-16 22:58:13 | 显示全部楼层
补上电路图

(原文件名:图4.PNG)
发表于 2009-2-16 23:09:06 | 显示全部楼层
支持
发表于 2009-2-16 23:28:18 | 显示全部楼层
不顶不行啊!LZ能共享一下程序吗?最好是C的,呵呵!谢谢了!
发表于 2009-2-16 23:35:11 | 显示全部楼层
能不能行了,太强了。
发表于 2009-2-16 23:42:39 | 显示全部楼层
强烈要求置酷!强烈要求原程序!
 楼主| 发表于 2009-2-16 23:44:02 | 显示全部楼层
一定就不是C程序了,不用汇编达不到这样的速度。
现在焊上了开关,耳机插座,可以玩了,不过声音不太好听,有待改进。
想配一首开机音乐,不知用哪首好听。
程序仍在改进中,尽些再上传吧。
下面是加了ipod形式开的和在液晶屏上显示效果图。

(原文件名:图5.jpg)


(原文件名:图6.jpg)
发表于 2009-2-16 23:50:29 | 显示全部楼层
太强了
发表于 2009-2-17 00:09:36 | 显示全部楼层
牛!拜下

学习学习!
发表于 2009-2-17 00:50:57 | 显示全部楼层
牛人,服
发表于 2009-2-17 07:47:34 | 显示全部楼层
五体投地了!
发表于 2009-2-17 08:10:55 | 显示全部楼层
这电路搭的有个性
发表于 2009-2-17 08:14:47 | 显示全部楼层
这也行啊
发表于 2009-2-17 10:40:47 | 显示全部楼层
太,强悍了...  没话说了..
发表于 2009-2-17 10:50:06 | 显示全部楼层
潜力帖,顶.
发表于 2009-2-17 11:39:12 | 显示全部楼层
51 有强大的生命力
发表于 2009-2-17 11:43:11 | 显示全部楼层
太强了
发表于 2009-2-17 12:59:45 | 显示全部楼层
恢复后第一次顶帖.
发表于 2009-2-17 13:26:05 | 显示全部楼层
太强了啊,一定要顶,学习!!!
发表于 2009-2-17 13:36:24 | 显示全部楼层
有意思啊
发表于 2009-2-17 15:58:11 | 显示全部楼层
好东西啊,顶.
发表于 2009-2-17 16:02:43 | 显示全部楼层
不错!顶一下!
发表于 2009-2-17 16:40:45 | 显示全部楼层
顶顶顶顶顶顶
发表于 2009-2-17 16:58:09 | 显示全部楼层
顶顶顶,好东东
发表于 2009-2-17 17:03:29 | 显示全部楼层
强。。。。好强。。。
发表于 2009-2-17 17:08:30 | 显示全部楼层
开眼界了
发表于 2009-2-17 17:10:57 | 显示全部楼层
MARK 牛
发表于 2009-2-17 17:33:42 | 显示全部楼层
这么厉害!OX!!
发表于 2009-2-17 19:28:45 | 显示全部楼层
真是不佩服都不行!
发表于 2009-2-17 19:38:53 | 显示全部楼层
厉害~我顶你!
发表于 2009-2-17 20:59:03 | 显示全部楼层
这个不顶不行啊,实在是牛人啊
 楼主| 发表于 2009-2-18 10:38:54 | 显示全部楼层
前两天没空,今天看了下存在的BUG,一时没有什么好的解决方法,请大家出点主意。
问题是如何判断不同形状的方块在移动时是否移出窗外。
试了好几种算法,都很复杂,简单的算法有些不正确,居然卡在这里。
具体情况是用一个8位变量L表示方块原点坐标(x,y),L的低3位表示x,范围0~7,L的bit3~bit6表示y,范围2~15.如何能用便捷的方法判定7种不同方块及4个不同的旋转角度在移动到某坐标时是否越界?
发表于 2009-2-18 13:09:57 | 显示全部楼层
焊工和编程能力都很了得。
发表于 2009-2-18 13:15:12 | 显示全部楼层
先移(或旋转)再判断..
发表于 2009-2-18 13:28:31 | 显示全部楼层
以前也想过实现俄罗斯方块的游戏,VGA显示没用单片机做过,希望能得到源程序看一下。
发表于 2009-2-18 13:50:56 | 显示全部楼层
发表于 2009-2-18 16:05:11 | 显示全部楼层
强烈顶!
LZ是否能把它转成C,然后贴出来,供大家学习一下啊
发表于 2009-2-18 16:13:58 | 显示全部楼层
这么好的贴,很好看,很好玩,很有劲
发表于 2009-2-18 16:17:57 | 显示全部楼层
建议楼主先讲一下原理,而后大家在一起想办法解决问题
发表于 2009-2-18 16:57:45 | 显示全部楼层
ding.....
发表于 2009-2-18 17:08:00 | 显示全部楼层
【34楼】 cowboy
查表应该可以
 楼主| 发表于 2009-2-18 17:22:12 | 显示全部楼层
呵呵,现在我也想到了查表,应该可以,就是多花点空间,晚上试试
发表于 2009-2-18 17:54:39 | 显示全部楼层
牛人
发表于 2009-2-18 18:43:44 | 显示全部楼层
这个要顶一下
发表于 2009-2-18 19:13:29 | 显示全部楼层
太强了,期待源码
发表于 2009-2-18 19:23:13 | 显示全部楼层
这个VGA接口的是怎么通讯的?
发表于 2009-2-18 19:34:54 | 显示全部楼层
十分佩服,学习了
发表于 2009-2-18 19:40:36 | 显示全部楼层
强人,期待程序,汇编无所谓。
发表于 2009-2-18 20:30:17 | 显示全部楼层
是4051
发表于 2009-2-18 20:30:17 | 显示全部楼层
是4051
 楼主| 发表于 2009-2-18 22:51:44 | 显示全部楼层
回楼上,手头没有2051,所以用4051代着。目前代码编译后还不够1.5K,用2051完全可以装得下。
之前的越界判断算法,现在用查表基本解决了,正在测试中。
加了一首开机音乐,决定用阿牛的《桃花朵朵开》前奏。
加了一条记分级别状态条,在窗口左侧,分数高柱子就越高。
正打算做一个小图标在窗口右侧,用来提示下一个方块的形状。
发表于 2009-2-19 08:19:35 | 显示全部楼层
【53楼】 cowboy
感兴趣的人,很多啊,是不是给大家讲讲思路啊,或是转成C的,把代码分享一下,大家换一个MCU就可以学习了....
 楼主| 发表于 2009-2-19 11:15:20 | 显示全部楼层
既然大家感兴趣,我就先简单地说一下思路,程序的要点是:
1 产生精准的VGA信号时序
    受速度限制,VGA显示模式用最低的640*480@60Hz,这时行频是31.46875K,场频率是59.94Hz.如果单片机有硬件PWM,则行场同步信号可以轻易用PWM实现.由于2051没有PWM,只能用软件模拟,并且不能用定时中断的方式,因为要求速度太高,中断响应速度不够快,且响应时间也不一致,所以本程序中都是把行同步信号穿插在程序的各个适当位置,类似于双线程并行执行,主振也选用2051能承受的最高频率24MHz.
2 合理分配内存.
    2051只有128字节内存,要储存一幅画面,显示缓存就需占大部分.主窗口内的面积越大,占用内存就越多.经估算窗口内用14行*8列比较合适.此时显示缓冲占用112字节.余下的16字节用于程序中的工作寄器5字节, 堆栈2字节,其它为全局量.
3 协调各个功能模块之间的工作配合
    系统的任务不算多,主要的有显示处理,同步处理,音效处理,按键处理,游戏规则处理(包括方块移动,定时下落,重叠检测,越界检测,得分计数,速度升级).各任务之间协调用类似于状态机的方法,但又不完全等同.由于是用汇编,在很多情况下充分利用汇编的灵活性,使程序的模块化不是很明显.系统的主循环选用显示一帧的时间约16.66MS(60Hz),所有任务必须在这时间内处理完成.

由于程序还在完善中,先发一个临时的版本,大家一起来改进.不是正式版本,注释较少,如果不明之处再单独讨论吧.
点击此处下载 ourdev_420122.rar(文件大小:5K) (原文件名:Tetris11.rar)

(原文件名:方块游戏框图.JPG)
发表于 2009-2-19 11:20:44 | 显示全部楼层
大哥,你这个我很感兴趣啊!可以详细说说VGA标准吗?我觉得这个很有玩头!!!!!!!
发表于 2009-2-19 11:33:13 | 显示全部楼层
佩服,就冲2051这么点资源。。。。
发表于 2009-2-19 12:07:16 | 显示全部楼层
应了那句话,没有单片机做不到,只有你想不到。
发表于 2009-2-19 12:27:12 | 显示全部楼层
牛!
支持!
发表于 2009-2-19 15:33:13 | 显示全部楼层
楼主能力真强, 很佩服.

早阵子我跟著一个外国的开源CPU项目搞了个硬件,蛮好玩的. 不过作者弄的VGA部份比较占空间(六块PCB),我就想可不可以接一片ISA总线的VGA卡来显示. 应该是可行的, 这个网站 (http://tinyvga.com/avr-isa-vga) 有用单片机接VGA卡的实例. 不过她本身的设计是用ATMega128的, 我想学习移到51上实验一下, 不过汇编部份搞不懂就暂时搁置了.

楼主若有时间及兴趣可否提点一下?

大家若对开源CPU项目有兴趣可到他的网页浏览一下, http://www.mycpu.eu/, 作者也不赖的, 除了CPU外也弄了个实时操作系统.
发表于 2009-2-19 21:12:23 | 显示全部楼层
简直是把51玩到炉火纯青的地步了,用软件模拟VGA信号!强!很强!
发表于 2009-2-19 21:27:02 | 显示全部楼层
等楼主这个项目搞定了,是不是指导大家做个VGA的信号发生器,方便我们修显示器的时候用!
发表于 2009-2-19 22:06:53 | 显示全部楼层
顶一下,楼主的钻研精神值得我们学习
发表于 2009-2-20 00:43:19 | 显示全部楼层
太强了,强烈支持!
发表于 2009-2-20 08:08:20 | 显示全部楼层
佩服。。。。。。
发表于 2009-2-20 09:40:26 | 显示全部楼层
牛!
支持!
发表于 2009-2-20 09:58:53 | 显示全部楼层
很强悍...51就要用asm才够速度,,,那么用片avr,用c编程速度够了吧!!!!!!!!
另外换1T的51,比如stc10/11 F系列,估计用c页可以了,,,,

看能否移植一下...
发表于 2009-2-20 09:59:30 | 显示全部楼层
佩服佩服
发表于 2009-2-20 10:03:40 | 显示全部楼层
建议:【55楼】 cowboy

你去stc申请6片,stc新版1T的mcu吧(免费),发个传真就有了......
这样你可以试试用c编译.....
发表于 2009-2-20 10:12:34 | 显示全部楼层
非常不错,顶牛人!
 楼主| 发表于 2009-2-20 10:29:05 | 显示全部楼层
只要有硬件PWM的MCU,都能产生VGA时序,其它的功能都可以用一般编程的方法,用C来编。AT的2051能行的,STC的也行,AVR也行。
游戏程序也不算难,只是要多花点时间和心思。我也曾用ARM做过方块程序,由于资源丰富,编程容易多了。用2051来做,只是想求证一下低档MCU的极限能力有多强。
转个关于VGA时序的文章,希望对大家有所帮助,http://www.eda121.com/arm/yyarnm/200709/698.html
55楼的程序还有些BUG,程序仍在完善中...
 楼主| 发表于 2009-2-20 10:39:13 | 显示全部楼层
顺便提一下,电路中晶体标识为24MHz,实际要用用24.1680 MHz才能符合标准。用24MHz晶体,可能有某些显示器不接受。
发表于 2009-2-20 11:16:08 | 显示全部楼层
相当牛!!
发表于 2009-2-20 11:19:02 | 显示全部楼层
牛人,佩服佩服!
发表于 2009-2-20 11:26:16 | 显示全部楼层
这个太牛了
发表于 2009-2-20 12:14:15 | 显示全部楼层
【71楼】 cowboy
虽然能看懂汇编,但还是不太容易,强烈建议LZ把他转成C,让大家理解下,我非常想来试验下.(我都跟了好几帖了 :))谢谢!
发表于 2009-2-20 12:19:47 | 显示全部楼层
顶一个
发表于 2009-2-20 15:12:57 | 显示全部楼层
这个一定要做出来看一下。。。

VGA一定要研究一下,想用M8+C实现,不知速度可以吗用8M的晶振..
 楼主| 发表于 2009-2-20 16:05:59 | 显示全部楼层
【76楼】 jaky80000,没有C来编是因为C的效率达不到,汇编中的一些技巧也是C不能实现的,所以即使转换成C也不能正常运行了。按贴子上所提供的资料,用其它高性能的MCU来实现,我想大多数的朋友都能编出来。
发表于 2009-2-20 16:54:36 | 显示全部楼层
AVR不是速度比51快吗??用C之后,慢一点应该问题不大吧,因为它的整体速度比51快。。。

??
发表于 2009-2-20 20:21:44 | 显示全部楼层
楼主实在是强人呀!

按照楼主的思路用不了C的,没有办法控制代码的(长度)执行时间,估计AVR的芯片用硬件来产生行频和场频也许有些可行,但是估计用C问题很多(或者不可行)!
发表于 2009-2-20 21:38:53 | 显示全部楼层
【79楼】 cowboy
这个我了解,C用在2051上肯定是不行的,我们可选择更高级一些的单片机来做的,就是因为没有搞过VGA,所以没有什么头绪,相信很多人都看到了你这个帖都很有兴趣用更高级的MCU,用C来实现它,这样大家就能更好的立即驱动VGA的时序了。
谢谢!
发表于 2009-2-20 22:02:53 | 显示全部楼层
请问楼主,对于VGA接口的数据线,应该怎么接,我指的是那些除你的电路图上标出的以外的那些线,如red ground ,green ground ,blue ground,sync ground,...等等,希望你能给我一点指点,希望你能给出所有的线都应该如何接,没有接的也说明,,谢谢,我打算明天也做一下你那个实验。。。。

    请求指点呀。。

    Pin
Name
Dir
Description

1
RED

Red Video (75 ohm, 0.7 V p-p)

2
GREEN

Green Video (75 ohm, 0.7 V p-p)

3
BLUE

Blue Video (75 ohm, 0.7 V p-p)

4
ID2

Monitor ID Bit 2

5
GND

Ground

6
RGND

Red Ground

7
GGND

Green Ground

8
BGND

Blue Ground

9
KEY
-
Key (No pin)

10
SGND

Sync Ground

11
ID0

Monitor ID Bit 0

12
ID1 or SDA

Monitor ID Bit 1

13
HSYNC or CSYNC

Horizontal Sync (or Composite Sync)

14
VSYNC

Vertical Sync

15
ID3 or SCL

Monitor ID Bit 3

管脚 定义

1 红基色 red

2 绿基色 green

3 蓝基色 blue

4 地址码 ID Bit

5 自测试 ( 各家定义不同 )

6 红地

7 绿地

8 蓝地

9 保留 ( 各家定义不同 )

10 数字地

11 地址码

12 地址码

13行同步

14场同步

15地址码 ( 各家定义不同 )
 楼主| 发表于 2009-2-20 22:14:51 | 显示全部楼层
所有的地连在一起统一接地,其它的不用接。
发表于 2009-2-21 01:10:35 | 显示全部楼层
marker
发表于 2009-2-21 01:22:18 | 显示全部楼层
这么好的贴子,顶!同时严重批评自己开了争议贴。
发表于 2009-2-21 08:27:08 | 显示全部楼层
晶体实际要用24.1680 MHz才能符合标准

那么用24.576,或者24.5M、30M、可以么???(手上只有那么3种)。。。
发表于 2009-2-21 10:17:22 | 显示全部楼层
再问cowboy:那个P1.5和P1.3为什么要那样接,难道是一个简单的数模转化?那P1.4和P1.2为什么不也接一个呢???

正在分析你的电路图,请指点。。万分感谢。。
发表于 2009-2-21 10:34:36 | 显示全部楼层
这是我在P1.3口看到的波形,好像是有负电压的成分,是那个P1.5产生的吗?这是不是就是我说的一个简单数模转化。。


(原文件名:clip_image002.jpg)

如果是这样的话,我要显示一张图(RGB全色)是不是就得给其它的两个通道也加一个这样的电路呢???

期待指点中。。。
 楼主| 发表于 2009-2-21 10:39:49 | 显示全部楼层
P1.5是一亮度控制引脚,和P1.3(绿色信号)连接,可以产生高亮绿色和墨绿色。在方块主窗口的边框中使用墨绿色,使其避免与绿色的方块混在一起。我新版程序中将还要利用其产生一个橙色的计分柱。至于P1.2(红),P1.4(蓝)为何也不加一个,是因为MCU处理能力有限,不要搞得太复杂。当然用其它MCU,更可以产生更多种绚丽的色彩。
 楼主| 发表于 2009-2-21 10:45:15 | 显示全部楼层
RE:【87楼】 zaixian 来来,晶体频率最好不要偏离太远,我目前用的是24.166MHz,在三台不同彩显上测试都能正常显示。一般来说CTR显示器的适应范围可能较强,LCD显示器可能对频率要求较严谨。
 楼主| 发表于 2009-2-21 10:53:09 | 显示全部楼层
RE:【82楼】 jaky80000,要转成C程序可能有点困难,抱歉我C的功底不深,有些处理在C里实在不知如何表达,只能在新版程序中多加点注释了,再配合框图和上面的VGA资料,可能不会太难了吧。个别细节的地方,可以跟贴单独来讨论。
发表于 2009-2-21 12:02:49 | 显示全部楼层
di好贴,
mark
发表于 2009-2-21 14:58:49 | 显示全部楼层
哈哈,我的也成功显示,接下来想好好研究一下楼主的程序。。。


(原文件名:IMG0410A.jpg)


(原文件名:IMG0411A.jpg)


(原文件名:IMG0412A.jpg)


(原文件名:IMG0413A.jpg)


(原文件名:IMG0414A.jpg)
发表于 2009-2-21 15:08:26 | 显示全部楼层
KAO.理论上不可能滴.行场色差你用12.5M的2051去搞...
 楼主| 发表于 2009-2-21 15:33:46 | 显示全部楼层
呵呵,94楼这么快呀!红蓝信号线对调了
发表于 2009-2-21 16:57:34 | 显示全部楼层
是吗,我再检查检查。。。可能插反了。

对了,我还是想问一下,对于一幅画面的显示,我还是有点不明白。能不能把一幅画显示的时序,画来看看呀。

下面这个时序的数据如何传呀,有大小吗,如红色60%。。之类


(原文件名:20070919170420847.jpg)
 楼主| 发表于 2009-2-21 17:07:25 | 显示全部楼层
不好意思是我电路图的BLUE和RED标反了。
VGA传送的是模拟信号,幅度为0~0.75V,如红色60%,就是在红色信号线上加0.45V.
发表于 2009-2-21 18:08:00 | 显示全部楼层
如何加0.45V,,上面的电路能实现吗??
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-10-17 19:41

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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