找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 64965|回复: 120
打印 上一主题 下一主题
收起左侧

挑战极限(一)51单片机驱动电脑vga显示器玩方块游戏

  [复制链接]
跳转到指定楼层
楼主
ID:51654 发表于 2013-7-9 23:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在51hei单片机网学了很久了,咱也上传点小制作,带动一下51hei论坛的人气啊,89C2051能干什么?这次我打算用它来做个方块游戏,用彩显来显示。
但2051那点速度,那点内存,做起来好不容易。
没有PWM输出,只能用软件模拟彩显的行,场同步信号。
仅128 BIT内存,其中112字节用作显示缓存,剩下给系统的只有16字节了。
硬件倒是简单,所以就连洞洞板也没焊,拿个IC座空中搭桥来测试。
程序还有些BUG,迟些改好后再上传。









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


呵呵,终于做好了,并加了个动感的开机动画,先上视频。

最新版原理图及 PCB图,终结完美版.rar (48.75 KB, 下载次数: 588)
俄罗斯方块游戏源码.rar (11.94 KB, 下载次数: 493)
俄罗斯方块游戏Hex码.rar (3.26 KB, 下载次数: 148)

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

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

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


成品图


方块游戏框图




电路图

评分

参与人数 5威望 +2 黑币 +65 收起 理由
lyonkon + 15 很给力!
dww465757120 + 30
chit100 + 5 赞一个!
absflash + 15 你真是个神啊
jjbboox + 2 绝世好帖!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏29 分享淘帖 顶5 踩
回复

使用道具 举报

沙发
ID:50574 发表于 2013-7-9 23:54 | 只看该作者
真不可思议啊,简直不敢相信自己的眼睛,不过你能放出一个c语言的源代码吗、汇编的实在太难看懂了.
回复

使用道具 举报

板凳
ID:51654 发表于 2013-7-9 23:57 | 只看该作者
一定就不是C程序了,不用汇编达不到这样的速度。
现在焊上了开关,耳机插座,可以玩了,不过声音不太好听,有待改进。
想配一首开机音乐,不知用哪首好听。
程序仍在改进中,尽些再上传吧。
下面是加了ipod形式开的和在液晶屏上显示效果图。



回复

使用道具 举报

地板
ID:51654 发表于 2013-7-10 00:01 | 只看该作者
前段没空,今天看了下存在的BUG,一时没有什么好的解决方法,请大家出点主意。
问题是如何判断不同形状的方块在移动时是否移出窗外。
试了好几种算法,都很复杂,简单的算法有些不正确,居然卡在这里。
具体情况是用一个8位变量L表示方块原点坐标(x,y),L的低3位表示x,范围0~7,L的bit3~bit6表示y,范围2~15.如何能用便捷的方法判定7种不同方块及4个不同的旋转角度在移动到某坐标时是否越界?
回复

使用道具 举报

5#
ID:50574 发表于 2013-7-10 00:07 | 只看该作者
液晶电脑显示器和crt显示器都可以都是vga接口吧 牛,不的不佩服啊,好像你在后面补上的图片上面的芯片是4051吧.和VGA接口的是怎么通讯的?
回复

使用道具 举报

6#
ID:2355 发表于 2013-7-10 00:10 | 只看该作者
建议楼主先讲一下原理,而后大家在一起想办法解决问题
回复

使用道具 举报

7#
ID:51654 发表于 2013-7-10 00:11 | 只看该作者
h333 发表于 2013-7-10 00:07
液晶电脑显示器和crt显示器都可以都是vga接口吧 牛,不的不佩服啊,好像你在后面补上的图片上面的芯片是405 ...

回5楼的美女 表示你的头像很好看,手头没有2051,所以用4051代着。目前代码编译后还不够1.5K,用2051完全可以装得下。
之前的越界判断算法,现在用查表基本解决了,正在测试中。
加了一首开机音乐,决定用阿牛的《桃花朵朵开》前奏。
加了一条记分级别状态条,在窗口左侧,分数高柱子就越高。
正打算做一个小图标在窗口右侧,用来提示下一个方块的形状。
回复

使用道具 举报

8#
ID:50574 发表于 2013-7-10 00:14 | 只看该作者
简直是把51玩到炉火纯青的地步了,用软件模拟VGA信号!强!很强!
回复

使用道具 举报

9#
ID:51654 发表于 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),所有任务必须在这时间内处理完成.
回复

使用道具 举报

10#
ID:51260 发表于 2013-7-18 10:56 | 只看该作者
太厉害了
回复

使用道具 举报

11#
ID:52177 发表于 2013-7-23 22:10 | 只看该作者
有套件卖吗?我要
回复

使用道具 举报

12#
ID:52177 发表于 2013-7-23 22:12 | 只看该作者
有套件卖吗?我要
回复

使用道具 举报

13#
ID:52177 发表于 2013-7-23 22:14 | 只看该作者
有套件卖吗?我要
回复

使用道具 举报

14#
ID:52928 发表于 2013-8-16 20:06 | 只看该作者
这个太扯淡了!!!!!!!!牛人啊
回复

使用道具 举报

15#
ID:53172 发表于 2013-8-17 22:12 | 只看该作者
好厉害!!!{:soso_e179:}{:soso_e179:}{:soso_e179:}
回复

使用道具 举报

16#
ID:53190 发表于 2013-8-18 13:07 | 只看该作者
楼主强惨了....
回复

使用道具 举报

17#
ID:55219 发表于 2013-11-4 22:30 | 只看该作者
楼主很强大啊!
回复

使用道具 举报

18#
ID:56665 发表于 2013-12-2 10:42 | 只看该作者
51被你玩得炉火纯青。
回复

使用道具 举报

19#
ID:55202 发表于 2013-12-6 16:22 | 只看该作者
楼主好厉害啊!!佩服
回复

使用道具 举报

20#
ID:58415 发表于 2013-12-31 20:13 | 只看该作者
强~~~~~~
回复

使用道具 举报

21#
ID:58415 发表于 2013-12-31 20:14 | 只看该作者
楼主~~厉害哦~
回复

使用道具 举报

22#
ID:58502 发表于 2014-1-3 14:29 | 只看该作者
太厉害了,这论坛果然牛人多,看来没来错地方,比我之前去的一个论坛强多了,
回复

使用道具 举报

23#
ID:58547 发表于 2014-1-4 22:55 | 只看该作者
能不能提供C的程序呢
回复

使用道具 举报

24#
ID:58333 发表于 2014-3-28 23:38 | 只看该作者
高手顶起啊
回复

使用道具 举报

25#
ID:59804 发表于 2014-4-2 18:25 | 只看该作者
楼主厉害!
回复

使用道具 举报

26#
ID:60173 发表于 2014-4-5 17:12 | 只看该作者
高手 高手中的高高手
回复

使用道具 举报

27#
ID:61217 发表于 2014-4-28 15:24 | 只看该作者
楼主威武霸气啊
回复

使用道具 举报

28#
ID:61490 发表于 2014-5-6 11:32 | 只看该作者
这一看,居然电路图一模一样!
楼主太搞笑了吧,明明是老外做出来的东西。
09年我就在某国外论坛上看到此类制作,并制作出来。
回复

使用道具 举报

29#
ID:61695 发表于 2014-5-11 21:32 | 只看该作者
真是高手啊!佩服
有没有板子卖啊,我也想要搞来试试,如果想用驱动大屏幕可以吗(就是在大屏幕里面显示一个或几个小的区域)?请指教,谢谢
回复

使用道具 举报

30#
ID:62601 发表于 2014-6-4 17:04 | 只看该作者
楼主真厉害,佩服
回复

使用道具 举报

31#
ID:61140 发表于 2014-6-9 19:30 | 只看该作者
外国人做的东东,以前就在别的论坛见过了
回复

使用道具 举报

32#
ID:63372 发表于 2014-6-27 19:55 | 只看该作者
赞一个,好强大的气场
回复

使用道具 举报

33#
ID:63641 发表于 2014-7-5 20:26 | 只看该作者
谢谢分享
回复

使用道具 举报

34#
ID:64052 发表于 2014-7-16 16:28 | 只看该作者
楼主好技术,我也正打算写一个用51单片机写一个VGA信号控制器,感谢资料分享。
回复

使用道具 举报

35#
ID:1 发表于 2014-7-18 03:15 来自手机 | 只看该作者
牛人啊
回复

使用道具 举报

36#
ID:64649 发表于 2014-8-6 00:15 | 只看该作者
帅的掉渣!这都能!
回复

使用道具 举报

37#
ID:64825 发表于 2014-8-7 09:25 | 只看该作者
51hei 有你更精彩
回复

使用道具 举报

38#
ID:64662 发表于 2014-8-7 09:39 | 只看该作者
佩服!
回复

使用道具 举报

39#
ID:65134 发表于 2014-8-16 23:16 | 只看该作者
哇,哇哇,哇哇哇,要学VGA通信
回复

使用道具 举报

40#
ID:65209 发表于 2014-8-18 23:06 来自手机 | 只看该作者
佩服,太厉害了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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