標題: 挑戰(zhàn)極限(一)51單片機驅動電腦vga顯示器玩方塊游戲 [打印本頁]

作者: zhu123    時間: 2013-7-9 23:42
標題: 挑戰(zhàn)極限(一)51單片機驅動電腦vga顯示器玩方塊游戲
在51hei單片機網學了很久了,咱也上傳點小制作,帶動一下51hei論壇的人氣啊,89C2051能干什么?這次我打算用它來做個方塊游戲,用彩顯來顯示。
但2051那點速度,那點內存,做起來好不容易。
沒有PWM輸出,只能用軟件模擬彩顯的行,場同步信號。
僅128 BIT內存,其中112字節(jié)用作顯示緩存,剩下給系統(tǒng)的只有16字節(jié)了。
硬件倒是簡單,所以就連洞洞板也沒焊,拿個IC座空中搭橋來測試。
程序還有些BUG,遲些改好后再上傳。









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


呵呵,終于做好了,并加了個動感的開機動畫,先上視頻。
http://www.torrancerestoration.com/f/Tetris.wmv
最新版原理圖及 PCB圖,終結完美版.rar (48.75 KB, 下載次數(shù): 593)
俄羅斯方塊游戲源碼.rar (11.94 KB, 下載次數(shù): 498)
俄羅斯方塊游戲Hex碼.rar (3.26 KB, 下載次數(shù): 152)

網友 cowboy 設計總結:
整板測試完畢,基本滿意。還有一些小毛病:
1、顯示網格信號時,發(fā)現(xiàn)有輕微拖尾現(xiàn)象,發(fā)現(xiàn)是下拉電阻R13(3.3K)過大所致,改為1K后正常。
2、三極管封裝絲印畫反了,所有三極管全部轉 180度安裝才正確,即將 C, E 引腳對換。
切記不要按絲印的那個“D”形來安裝,要轉180度才正確。
3、電源退耦電容小了點,當揚聲器阻抗較低,且電源內阻大時,畫面有些干擾。

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

網友 xiaozhiyong 測試 LS2051 總結:
LS2051測試成功了。
關于LS2051每運行一條語句只用一個機器周期,所以在AT2051里的雙周期語句后都得加NOP。我改了以后試了下發(fā)現(xiàn)能用,現(xiàn)在先發(fā)個暫時看著能用的程序。以下是測試程序:
點擊此處下載 LS2051test.rar (1.72 KB, 下載次數(shù): 179)


成品圖


方塊游戲框圖




電路圖

作者: h333    時間: 2013-7-9 23:54
真不可思議啊,簡直不敢相信自己的眼睛,不過你能放出一個c語言的源代碼嗎、匯編的實在太難看懂了.
作者: zhu123    時間: 2013-7-9 23:57
一定就不是C程序了,不用匯編達不到這樣的速度。
現(xiàn)在焊上了開關,耳機插座,可以玩了,不過聲音不太好聽,有待改進。
想配一首開機音樂,不知用哪首好聽。
程序仍在改進中,盡些再上傳吧。
下面是加了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 發(fā)表于 2013-7-10 00:07
液晶電腦顯示器和crt顯示器都可以都是vga接口吧 牛,不的不佩服啊,好像你在后面補上的圖片上面的芯片是405 ...

回5樓的美女 表示你的頭像很好看,手頭沒有2051,所以用4051代著。目前代碼編譯后還不夠1.5K,用2051完全可以裝得下。
之前的越界判斷算法,現(xiàn)在用查表基本解決了,正在測試中。
加了一首開機音樂,決定用阿牛的《桃花朵朵開》前奏。
加了一條記分級別狀態(tài)條,在窗口左側,分數(shù)高柱子就越高。
正打算做一個小圖標在窗口右側,用來提示下一個方塊的形狀。
作者: h333    時間: 2013-7-10 00:14
簡直是把51玩到爐火純青的地步了,用軟件模擬VGA信號!強!很強!

作者: zhu123    時間: 2013-7-10 00:15
ccd 發(fā)表于 2013-7-10 00:10
建議樓主先講一下原理,而后大家在一起想辦法解決問題

既然51hei論壇的朋友都很感興趣,我就先簡單地說一下思路,程序的要點是:
1 產生精準的VGA信號時序
    受速度限制,VGA顯示模式用最低的640*480@60Hz,這時行頻是31.46875K,場頻率是59.94Hz.如果單片機有硬件PWM,則行場同步信號可以輕易用PWM實現(xiàn).由于2051沒有PWM,只能用軟件模擬,并且不能用定時中斷的方式,因為要求速度太高,中斷響應速度不夠快,且響應時間也不一致,所以本程序中都是把行同步信號穿插在程序的各個適當位置,類似于雙線程并行執(zhí)行,主振也選用2051能承受的最高頻率24MHz.
2 合理分配內存.
    2051只有128字節(jié)內存,要儲存一幅畫面,顯示緩存就需占大部分.主窗口內的面積越大,占用內存就越多.經估算窗口內用14行*8列比較合適.此時顯示緩沖占用112字節(jié).余下的16字節(jié)用于程序中的工作寄器5字節(jié), 堆棧2字節(jié),其它為全局量.
3 協(xié)調各個功能模塊之間的工作配合
    系統(tǒng)的任務不算多,主要的有顯示處理,同步處理,音效處理,按鍵處理,游戲規(guī)則處理(包括方塊移動,定時下落,重疊檢測,越界檢測,得分計數(shù),速度升級).各任務之間協(xié)調用類似于狀態(tài)機的方法,但又不完全等同.由于是用匯編,在很多情況下充分利用匯編的靈活性,使程序的模塊化不是很明顯.系統(tǒng)的主循環(huán)選用顯示一幀的時間約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
真是高手啊!佩服
有沒有板子賣啊,我也想要搞來試試,如果想用驅動大屏幕可以嗎(就是在大屏幕里面顯示一個或幾個小的區(qū)域)?請指教,謝謝
作者: 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語言版了,哈哈..根據(jù)此程序改的!
作者: 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 發(fā)表于 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 發(fā)表于 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 發(fā)表于 2014-6-9 19:30
外國人做的東東,以前就在別的論壇見過了

以后你也多發(fā)點外國的好東西過來。大家也夸你是牛人
不發(fā)過來說明。。。。。。。。。。。。。。。

作者: lemon0210    時間: 2015-11-6 16:46
感覺好古老的游戲裝備。哈哈
作者: lemon0210    時間: 2015-11-6 17:10
家里剛好有臺沒用的VGA屏,準備回去試試。
作者: nicholas41    時間: 2015-11-13 00:32
zhu123 發(fā)表于 2013-7-10 00:01
前段沒空,今天看了下存在的BUG,一時沒有什么好的解決方法,請大家出點主意。
問題是如何判斷不同形狀的 ...

樓主是如何用數(shù)字信號控制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實現(xiàn),先下載看看思路吧
作者: Pilgrim_z    時間: 2018-3-29 14:53
學習了!
作者: nklug    時間: 2018-4-3 11:29
匯編好,強大!
作者: 尼古拉·特斯拉    時間: 2018-4-17 23:00
厲害厲害




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1