既然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),所有任務必須在這時間內處理完成.
|