标题: 挑战极限(一)51单片机驱动电脑vga显示器玩方块游戏 [打印本页]

作者: zhu123    时间: 2013-7-9 23:42
标题: 挑战极限(一)51单片机驱动电脑vga显示器玩方块游戏
在51hei单片机网学了很久了,咱也上传点小制作,带动一下51hei论坛的人气啊,89C2051能干什么?这次我打算用它来做个方块游戏,用彩显来显示。
但2051那点速度,那点内存,做起来好不容易。
没有PWM输出,只能用软件模拟彩显的行,场同步信号。
仅128 BIT内存,其中112字节用作显示缓存,剩下给系统的只有16字节了。
硬件倒是简单,所以就连洞洞板也没焊,拿个IC座空中搭桥来测试。
程序还有些BUG,迟些改好后再上传。









以下蓝色文字由版主:xuyiyi 加入。


呵呵,终于做好了,并加了个动感的开机动画,先上视频。
http://www.51hei.com/f/Tetris.wmv
最新版原理图及 PCB图,终结完美版.rar (48.75 KB, 下载次数: 593)
俄罗斯方块游戏源码.rar (11.94 KB, 下载次数: 498)
俄罗斯方块游戏Hex码.rar (3.26 KB, 下载次数: 152)

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

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

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


成品图


方块游戏框图




电路图

作者: h333    时间: 2013-7-9 23:54
真不可思议啊,简直不敢相信自己的眼睛,不过你能放出一个c语言的源代码吗、汇编的实在太难看懂了.
作者: zhu123    时间: 2013-7-9 23:57
一定就不是C程序了,不用汇编达不到这样的速度。
现在焊上了开关,耳机插座,可以玩了,不过声音不太好听,有待改进。
想配一首开机音乐,不知用哪首好听。
程序仍在改进中,尽些再上传吧。
下面是加了ipod形式开的和在液晶屏上显示效果图。




作者: zhu123    时间: 2013-7-10 00:01
前段没空,今天看了下存在的BUG,一时没有什么好的解决方法,请大家出点主意。
问题是如何判断不同形状的方块在移动时是否移出窗外。
试了好几种算法,都很复杂,简单的算法有些不正确,居然卡在这里。
具体情况是用一个8位变量L表示方块原点坐标(x,y),L的低3位表示x,范围0~7,L的bit3~bit6表示y,范围2~15.如何能用便捷的方法判定7种不同方块及4个不同的旋转角度在移动到某坐标时是否越界?
作者: h333    时间: 2013-7-10 00:07
液晶电脑显示器和crt显示器都可以都是vga接口吧 牛,不的不佩服啊,好像你在后面补上的图片上面的芯片是4051吧.和VGA接口的是怎么通讯的?
作者: ccd    时间: 2013-7-10 00:10
建议楼主先讲一下原理,而后大家在一起想办法解决问题
作者: zhu123    时间: 2013-7-10 00:11
h333 发表于 2013-7-10 00:07
液晶电脑显示器和crt显示器都可以都是vga接口吧 牛,不的不佩服啊,好像你在后面补上的图片上面的芯片是405 ...

回5楼的美女 表示你的头像很好看,手头没有2051,所以用4051代着。目前代码编译后还不够1.5K,用2051完全可以装得下。
之前的越界判断算法,现在用查表基本解决了,正在测试中。
加了一首开机音乐,决定用阿牛的《桃花朵朵开》前奏。
加了一条记分级别状态条,在窗口左侧,分数高柱子就越高。
正打算做一个小图标在窗口右侧,用来提示下一个方块的形状。
作者: h333    时间: 2013-7-10 00:14
简直是把51玩到炉火纯青的地步了,用软件模拟VGA信号!强!很强!

作者: zhu123    时间: 2013-7-10 00:15
ccd 发表于 2013-7-10 00:10
建议楼主先讲一下原理,而后大家在一起想办法解决问题

既然51hei论坛的朋友都很感兴趣,我就先简单地说一下思路,程序的要点是:
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),所有任务必须在这时间内处理完成.

作者: zainanchao    时间: 2013-7-18 10:56
太厉害了
作者: 1156615097    时间: 2013-7-23 22:10
有套件卖吗?我要
作者: 1156615097    时间: 2013-7-23 22:12
有套件卖吗?我要
作者: 1156615097    时间: 2013-7-23 22:14
有套件卖吗?我要
作者: ggsimida    时间: 2013-8-16 20:06
这个太扯淡了!!!!!!!!牛人啊
作者: r731892491    时间: 2013-8-17 22:12
好厉害!!!{:soso_e179:}{:soso_e179:}{:soso_e179:}
作者: wmslecz    时间: 2013-8-18 13:07
楼主强惨了....
作者: yxz1140    时间: 2013-11-4 22:30
楼主很强大啊!
作者: m182892    时间: 2013-12-2 10:42
51被你玩得炉火纯青。
作者: jinqilin    时间: 2013-12-6 16:22
楼主好厉害啊!!佩服
作者: xindaodan    时间: 2013-12-31 20:13
强~~~~~~
作者: xindaodan    时间: 2013-12-31 20:14
楼主~~厉害哦~
作者: liaolinhui    时间: 2014-1-3 14:29
太厉害了,这论坛果然牛人多,看来没来错地方,比我之前去的一个论坛强多了,
作者: a746605205    时间: 2014-1-4 22:55
能不能提供C的程序呢
作者: a937983423    时间: 2014-3-28 23:38
高手顶起啊
作者: canon    时间: 2014-4-2 18:25
楼主厉害!
作者: gaomin2020520    时间: 2014-4-5 17:12
高手 高手中的高高手
作者: weifengdq    时间: 2014-4-28 15:24
楼主威武霸气啊
作者: zhengyu    时间: 2014-5-6 11:32
这一看,居然电路图一模一样!
楼主太搞笑了吧,明明是老外做出来的东西。
09年我就在某国外论坛上看到此类制作,并制作出来。
作者: wugaopei    时间: 2014-5-11 21:32
真是高手啊!佩服
有没有板子卖啊,我也想要搞来试试,如果想用驱动大屏幕可以吗(就是在大屏幕里面显示一个或几个小的区域)?请指教,谢谢
作者: deru_qq    时间: 2014-6-4 17:04
楼主真厉害,佩服
作者: xiaoyuxinke    时间: 2014-6-9 19:30
外国人做的东东,以前就在别的论坛见过了
作者: kittyboy    时间: 2014-6-27 19:55
赞一个,好强大的气场
作者: openpppp2008    时间: 2014-7-5 20:26
谢谢分享
作者: 文经小黑    时间: 2014-7-16 16:28
楼主好技术,我也正打算写一个用51单片机写一个VGA信号控制器,感谢资料分享。
作者: admin    时间: 2014-7-18 03:15
牛人啊
作者: 黑桃A    时间: 2014-8-6 00:15
帅的掉渣!这都能!
作者: qzsulin    时间: 2014-8-7 09:25
51hei 有你更精彩

作者: Prot    时间: 2014-8-7 09:39
佩服!
作者: jpf    时间: 2014-8-16 23:16
哇,哇哇,哇哇哇,要学VGA通信
作者: zhwyf    时间: 2014-8-18 23:06
佩服,太厉害了
作者: shushikuan    时间: 2014-10-8 10:51
够强的啊,厉害!!!
作者: xets2000    时间: 2014-10-9 09:17
太厉害了!!!!!!!!!!!!!
作者: 642242855    时间: 2014-10-30 17:19
牛人啊!太强大了
作者: lxddn    时间: 2014-10-31 17:39


谢谢分享!
作者: liangjiajing    时间: 2014-11-16 10:27
谢谢分享
作者: seeyoou    时间: 2014-12-6 11:36
楼主强人啊,膜拜学习中……
作者: mycookie    时间: 2014-12-9 11:05
楼主外星人吧,好牛逼,C是不可能做到的
作者: sunny20    时间: 2014-12-9 14:31
本人已经制作出C语言版了,哈哈..根据此程序改的!
作者: lxl2255    时间: 2015-1-7 11:53
不错,学习了。。。。。。。。。。
作者: hehongkang    时间: 2015-2-4 14:14
楼主太厉害啊!!佩服

作者: maxplus    时间: 2015-4-9 10:49
非常不错,赞一个
作者: dmj    时间: 2015-6-2 16:40
逆天~~~~简直了 ~
作者: 352535455    时间: 2015-6-3 14:57
真正的大神 膜拜!
作者: jjbboox    时间: 2015-6-3 20:18
这个实在是太牛了。
2051,只有2K的代码段啊

作者: admin    时间: 2015-6-4 02:31
sunny20 发表于 2014-12-9 14:31
**** 作者被禁止或删除 内容自动屏蔽 ****

能共享一下 c程序吗?
作者: dalang_9793    时间: 2015-6-12 13:58
qiangren...................
作者: k18648    时间: 2015-6-15 19:27
很吊,强悍的楼主
作者: playcooler    时间: 2015-6-29 18:25
这个不错!
作者: LLZ    时间: 2015-7-4 16:48
看了效果不得不佩服,汇编没学好,看不懂
作者: cts788    时间: 2015-7-8 09:12
h333 发表于 2013-7-10 00:07
液晶电脑显示器和crt显示器都可以都是vga接口吧 牛,不的不佩服啊,好像你在后面补上的图片上面的芯片是405 ...

学习了~~~~~~~~~~~~~~
作者: wangshaobin    时间: 2015-7-10 07:53
根本就不能用,没亲自制作的朋友不要盲目吹捧,
作者: donxote    时间: 2015-7-10 14:39
已经刷新了视觉下线了,强
作者: maxer    时间: 2015-9-8 17:51
很好的练手题目啊,可以用来跟学校的新生练练手,重点是VGA的知识和单片机处理各个任务的分配。
作者: 呵呵呵呵    时间: 2015-9-9 20:11
强,真强
作者: t01051    时间: 2015-10-3 11:51
楼主能说一下你用单片机控制VGA显示的思路吗?....我找了好久也没找到相关的资料
作者: 798265341    时间: 2015-10-23 16:48
愿有更多的分享
作者: 文经小黑    时间: 2015-10-23 20:45
谢谢分享,正在尝试用stc15系列单片机做一个。
作者: woshifuz    时间: 2015-10-28 00:15
一个字:真屌
作者: HWL0541    时间: 2015-10-28 08:50
wo这么厉害,一 定要学习一下
作者: HWL0541    时间: 2015-10-28 09:07
xiaoyuxinke 发表于 2014-6-9 19:30
外国人做的东东,以前就在别的论坛见过了

以后你也多发点外国的好东西过来。大家也夸你是牛人
不发过来说明。。。。。。。。。。。。。。。

作者: lemon0210    时间: 2015-11-6 16:46
感觉好古老的游戏装备。哈哈
作者: lemon0210    时间: 2015-11-6 17:10
家里刚好有台没用的VGA屏,准备回去试试。
作者: nicholas41    时间: 2015-11-13 00:32
zhu123 发表于 2013-7-10 00:01
前段没空,今天看了下存在的BUG,一时没有什么好的解决方法,请大家出点主意。
问题是如何判断不同形状的 ...

楼主是如何用数字信号控制RGB信号的啊  rgb不是模拟信号么

作者: shulinhai    时间: 2015-12-24 15:22
要卡卡!yidingyao kan ak a
作者: shulinhai    时间: 2015-12-24 21:00
比较牛的想法。
作者: ackon    时间: 2016-5-18 17:42
牛人神作
作者: 九都多平    时间: 2016-7-15 10:37
牛人啊
作者: 九都多平    时间: 2016-7-15 11:04
汇编语言啊,太难了吧。
作者: a13450901331    时间: 2016-7-15 20:50
好东西刚来学点东西
作者: a13450901331    时间: 2016-7-15 20:51
好啊我还是看不懂慢慢学
作者: a13450901331    时间: 2016-7-15 21:39
我来学习一下
作者: a13450901331    时间: 2016-7-15 21:40
帅的掉渣!这都能!
作者: 爱玩单片机    时间: 2016-7-15 22:33
楼主牛啊2051还可以这样玩
作者: qq891919634    时间: 2016-8-18 14:45
挺有意思的,下载玩玩
作者: qq891919634    时间: 2016-8-18 14:46
移植到stm32上
作者: faxa1    时间: 2016-8-21 10:12
楼主好厉害啊!!佩服
作者: billliu66    时间: 2016-9-24 07:32
高手, 真牛!
作者: 豆子十三    时间: 2016-9-24 15:46
感觉不可能,以51芯片的速度和资源,还得再要一个专门处理视频的芯片。
作者: xixi123    时间: 2016-10-20 13:27
不错的学习
作者: 张纪元    时间: 2016-12-27 11:42
楼主很霸气
作者: yuxiaogang    时间: 2017-1-6 10:56
楼主真是牛人一个,佩服
作者: tianhaolan    时间: 2017-6-8 09:14
不错啊  学习了  正需要呢  牛人
作者: zaza21    时间: 2017-6-10 18:03
好厉害,这个还要了解VGA的驱动方法,而且在这种性能的单片机下完成 真的很不容易
作者: weiming6361    时间: 2017-8-15 20:34
向楼主学习
作者: zjf19864    时间: 2017-8-20 03:56
楼主太强悍了
作者: vinsen006    时间: 2017-8-20 09:28
佩服!
作者: KUNGONG    时间: 2017-11-26 16:56
哇,好棒的设计,想用FPGA实现,先下载看看思路吧
作者: Pilgrim_z    时间: 2018-3-29 14:53
学习了!
作者: nklug    时间: 2018-4-3 11:29
汇编好,强大!
作者: 尼古拉·特斯拉    时间: 2018-4-17 23:00
厉害厉害




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1