找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 74457|回復: 120
收起左側

挑戰(zhàn)極限(一)51單片機驅動電腦vga顯示器玩方塊游戲

  [復制鏈接]
ID:51654 發(fā)表于 2013-7-9 23:42 | 顯示全部樓層 |閱讀模式
在51hei單片機網(wǎng)學了很久了,咱也上傳點小制作,帶動一下51hei論壇的人氣啊,89C2051能干什么?這次我打算用它來做個方塊游戲,用彩顯來顯示。
但2051那點速度,那點內(nèi)存,做起來好不容易。
沒有PWM輸出,只能用軟件模擬彩顯的行,場同步信號。
僅128 BIT內(nèi)存,其中112字節(jié)用作顯示緩存,剩下給系統(tǒng)的只有16字節(jié)了。
硬件倒是簡單,所以就連洞洞板也沒焊,拿個IC座空中搭橋來測試。
程序還有些BUG,遲些改好后再上傳。
ourdev_418481.jpg


ourdev_418482.jpg


ourdev_418484.jpg


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


呵呵,終于做好了,并加了個動感的開機動畫,先上視頻。

最新版原理圖及 PCB圖,終結完美版.rar (48.75 KB, 下載次數(shù): 593)
俄羅斯方塊游戲源碼.rar (11.94 KB, 下載次數(shù): 498)
俄羅斯方塊游戲Hex碼.rar (3.26 KB, 下載次數(shù): 152)

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

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

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

ourdev_454451.jpg
成品圖

ourdev_420123.JPG
方塊游戲框圖

ourdev_425639.PNG

ourdev_418501.PNG
電路圖

評分

參與人數(shù) 5威望 +2 黑幣 +65 收起 理由
lyonkon + 15 很給力!
dww465757120 + 30
chit100 + 5 贊一個!
absflash + 15 你真是個神啊
jjbboox + 2 絕世好帖!

查看全部評分

回復

使用道具 舉報

ID:50574 發(fā)表于 2013-7-9 23:54 | 顯示全部樓層
真不可思議啊,簡直不敢相信自己的眼睛,不過你能放出一個c語言的源代碼嗎、匯編的實在太難看懂了.
回復

使用道具 舉報

ID:51654 發(fā)表于 2013-7-9 23:57 | 顯示全部樓層
一定就不是C程序了,不用匯編達不到這樣的速度。
現(xiàn)在焊上了開關,耳機插座,可以玩了,不過聲音不太好聽,有待改進。
想配一首開機音樂,不知用哪首好聽。
程序仍在改進中,盡些再上傳吧。
下面是加了ipod形式開的和在液晶屏上顯示效果圖。
ourdev_418539.jpg


ourdev_418540.jpg
回復

使用道具 舉報

ID:51654 發(fā)表于 2013-7-10 00:01 | 顯示全部樓層
前段沒空,今天看了下存在的BUG,一時沒有什么好的解決方法,請大家出點主意。
問題是如何判斷不同形狀的方塊在移動時是否移出窗外。
試了好幾種算法,都很復雜,簡單的算法有些不正確,居然卡在這里。
具體情況是用一個8位變量L表示方塊原點坐標(x,y),L的低3位表示x,范圍0~7,L的bit3~bit6表示y,范圍2~15.如何能用便捷的方法判定7種不同方塊及4個不同的旋轉角度在移動到某坐標時是否越界?
回復

使用道具 舉報

ID:50574 發(fā)表于 2013-7-10 00:07 | 顯示全部樓層
液晶電腦顯示器和crt顯示器都可以都是vga接口吧 牛,不的不佩服啊,好像你在后面補上的圖片上面的芯片是4051吧.和VGA接口的是怎么通訊的?
回復

使用道具 舉報

ID:2355 發(fā)表于 2013-7-10 00:10 | 顯示全部樓層
建議樓主先講一下原理,而后大家在一起想辦法解決問題
回復

使用道具 舉報

ID:51654 發(fā)表于 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ù)高柱子就越高。
正打算做一個小圖標在窗口右側,用來提示下一個方塊的形狀。
回復

使用道具 舉報

ID:50574 發(fā)表于 2013-7-10 00:14 | 顯示全部樓層
簡直是把51玩到爐火純青的地步了,用軟件模擬VGA信號!強!很強!
回復

使用道具 舉報

ID:51654 發(fā)表于 2013-7-10 00:15 | 顯示全部樓層
ccd 發(fā)表于 2013-7-10 00:10
建議樓主先講一下原理,而后大家在一起想辦法解決問題

既然51hei論壇的朋友都很感興趣,我就先簡單地說一下思路,程序的要點是:
1 產(chǎn)生精準的VGA信號時序
    受速度限制,VGA顯示模式用最低的640*480@60Hz,這時行頻是31.46875K,場頻率是59.94Hz.如果單片機有硬件PWM,則行場同步信號可以輕易用PWM實現(xiàn).由于2051沒有PWM,只能用軟件模擬,并且不能用定時中斷的方式,因為要求速度太高,中斷響應速度不夠快,且響應時間也不一致,所以本程序中都是把行同步信號穿插在程序的各個適當位置,類似于雙線程并行執(zhí)行,主振也選用2051能承受的最高頻率24MHz.
2 合理分配內(nèi)存.
    2051只有128字節(jié)內(nèi)存,要儲存一幅畫面,顯示緩存就需占大部分.主窗口內(nèi)的面積越大,占用內(nèi)存就越多.經(jīng)估算窗口內(nèi)用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),所有任務必須在這時間內(nèi)處理完成.
回復

使用道具 舉報

ID:51260 發(fā)表于 2013-7-18 10:56 | 顯示全部樓層
太厲害了
回復

使用道具 舉報

ID:52177 發(fā)表于 2013-7-23 22:10 | 顯示全部樓層
有套件賣嗎?我要
回復

使用道具 舉報

ID:52177 發(fā)表于 2013-7-23 22:12 | 顯示全部樓層
有套件賣嗎?我要
回復

使用道具 舉報

ID:52177 發(fā)表于 2013-7-23 22:14 | 顯示全部樓層
有套件賣嗎?我要
回復

使用道具 舉報

ID:52928 發(fā)表于 2013-8-16 20:06 | 顯示全部樓層
這個太扯淡了。。。。。。!牛人啊
回復

使用道具 舉報

ID:53172 發(fā)表于 2013-8-17 22:12 | 顯示全部樓層
好厲害。!{:soso_e179:}{:soso_e179:}{:soso_e179:}
回復

使用道具 舉報

ID:53190 發(fā)表于 2013-8-18 13:07 | 顯示全部樓層
樓主強慘了....
回復

使用道具 舉報

ID:55219 發(fā)表于 2013-11-4 22:30 | 顯示全部樓層
樓主很強大啊!
回復

使用道具 舉報

ID:56665 發(fā)表于 2013-12-2 10:42 | 顯示全部樓層
51被你玩得爐火純青。
回復

使用道具 舉報

ID:55202 發(fā)表于 2013-12-6 16:22 | 顯示全部樓層
樓主好厲害。!佩服
回復

使用道具 舉報

ID:58415 發(fā)表于 2013-12-31 20:13 | 顯示全部樓層
強~~~~~~
回復

使用道具 舉報

ID:58415 發(fā)表于 2013-12-31 20:14 | 顯示全部樓層
樓主~~厲害哦~
回復

使用道具 舉報

ID:58502 發(fā)表于 2014-1-3 14:29 | 顯示全部樓層
太厲害了,這論壇果然牛人多,看來沒來錯地方,比我之前去的一個論壇強多了,
回復

使用道具 舉報

ID:58547 發(fā)表于 2014-1-4 22:55 | 顯示全部樓層
能不能提供C的程序呢
回復

使用道具 舉報

ID:58333 發(fā)表于 2014-3-28 23:38 | 顯示全部樓層
高手頂起啊
回復

使用道具 舉報

ID:59804 發(fā)表于 2014-4-2 18:25 | 顯示全部樓層
樓主厲害!
回復

使用道具 舉報

ID:60173 發(fā)表于 2014-4-5 17:12 | 顯示全部樓層
高手 高手中的高高手
回復

使用道具 舉報

ID:61217 發(fā)表于 2014-4-28 15:24 | 顯示全部樓層
樓主威武霸氣啊
回復

使用道具 舉報

ID:61490 發(fā)表于 2014-5-6 11:32 | 顯示全部樓層
這一看,居然電路圖一模一樣!
樓主太搞笑了吧,明明是老外做出來的東西。
09年我就在某國外論壇上看到此類制作,并制作出來。
回復

使用道具 舉報

ID:61695 發(fā)表于 2014-5-11 21:32 | 顯示全部樓層
真是高手啊!佩服
有沒有板子賣啊,我也想要搞來試試,如果想用驅動大屏幕可以嗎(就是在大屏幕里面顯示一個或幾個小的區(qū)域)?請指教,謝謝
回復

使用道具 舉報

ID:62601 發(fā)表于 2014-6-4 17:04 | 顯示全部樓層
樓主真厲害,佩服
回復

使用道具 舉報

ID:61140 發(fā)表于 2014-6-9 19:30 | 顯示全部樓層
外國人做的東東,以前就在別的論壇見過了
回復

使用道具 舉報

ID:63372 發(fā)表于 2014-6-27 19:55 | 顯示全部樓層
贊一個,好強大的氣場
回復

使用道具 舉報

ID:63641 發(fā)表于 2014-7-5 20:26 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:64052 發(fā)表于 2014-7-16 16:28 | 顯示全部樓層
樓主好技術,我也正打算寫一個用51單片機寫一個VGA信號控制器,感謝資料分享。
回復

使用道具 舉報

ID:1 發(fā)表于 2014-7-18 03:15 來自觸屏版 | 顯示全部樓層
牛人啊
回復

使用道具 舉報

ID:64649 發(fā)表于 2014-8-6 00:15 | 顯示全部樓層
帥的掉渣!這都能!
回復

使用道具 舉報

ID:64825 發(fā)表于 2014-8-7 09:25 | 顯示全部樓層
51hei 有你更精彩
回復

使用道具 舉報

ID:64662 發(fā)表于 2014-8-7 09:39 | 顯示全部樓層
佩服!
回復

使用道具 舉報

ID:65134 發(fā)表于 2014-8-16 23:16 | 顯示全部樓層
哇,哇哇,哇哇哇,要學VGA通信
回復

使用道具 舉報

ID:65209 發(fā)表于 2014-8-18 23:06 來自觸屏版 | 顯示全部樓層
佩服,太厲害了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表