Powered By Blogger

2019年2月8日 星期五

俄羅斯方塊 自製 手工 電動玩具 8051 C語言 LED矩陣




2014年的作品(已玩了4年多,還滿耐操的)---現在拿出來獻醜
回想一下,當時好像大概花了3個多月時間完成(每天晚上想一點程式,累積而成...)
記得是4月份忙完了一個工作上的任務,閒下來後開始發起的一個念頭
當初只是單純要做一個玩具給小朋友玩,於是......就這麼開始了......



1.國中時玩的俄羅斯方塊機台為10行 X 20列(網路搜尋找到的資訊),所以找了5X7的LED矩陣6顆來組合成10行 X 21列的畫面,並銲成一個測試板,然後用KEIL C搭配ATMEL89S52及ISP下載線進行掃描顯示,且初步完成顯示功能。之後並以此為發展架構,逐步增加遊戲所需功能。




2.掃描顯示為10行輪流顯示,硬體部份採用74138搭配幾個邏輯閘完成4對10解碼,而不用腳位更多的4對16解碼器。




3.因畫面長有21顆LED,而8051為8位元系統,所以在資料處理上頗費功夫,需用3個暫存器才能儲存一行的顯示資料,10行就要用30個暫存器。




4.為減輕重量及採用電池所產生的電力供應不穩、雜訊等問題,因此電源採用外部供電方式,利用USB線取得5V電源的方式非常方便。原本設計是使用MICRO USB,但銲點太小,不好銲接,失敗了好幾次,雖後來有成功,但因強度不夠,用沒幾次還是脫落,最後改用較大的USB A TYPE,銲點較大,利用銲錫加強了強度,果然用的比較久。(USB僅有取得電源功能,沒有資料傳遞功能,4個銲點只銲了2個)





5.玩具的設計採取將所有零件均外露方式,一堆電晶體、電阻、IC、電容、LED......假裝很複雜很厲害的樣子。




6.按鍵用了兩個版本,安裝及高度考量也花了不少時間及心思,記得在電路板鑽孔時,還真怕一不小心會毀了一切。





7.線路連接採用OK線一條一條接、一個一個銲,沒什麼好說,就是純手工,會這麼早就老花眼不是沒有原因的。





8.為了讓OK線及銲點也可以被看到,跟同事要了壓克力板配合銅柱固定及保護,實用又美觀。





9.電路圖



10.程式功能(影片檔)


11.(1)程式架構採用定時中斷法,記得是1.5ms base,控制中斷次數即可控制遊戲速度
     (2)方塊亂數產生(7選1)
     (3)畫面採前景(正在運動的方塊)及背景(已固定不動的下方方塊)經OR運算後顯示
         正在運動的方塊在判定不會再下降及旋轉後,即轉變為背景的一部份
         前景再亂數產生一個方塊
     (4)移動中方塊若位在兩邊或附近有已固定方塊,則是不可左移、右移或旋轉
         這部份的程式當初是吃足苦頭,想不到什麼好的方法,所以都是用前景暫存器
         裡的0和1(0為空白,1為方塊)和背景暫存器裡的0和1做比對來判斷是否衝突
     (5)按鍵按下防彈跳、放開防彈跳、按住若超過一段時間,則要考慮連發功能
     (6)其實花最多時間的還是各階段timing的微調,目的是要讓遊戲玩起來更順更流暢
         這部份只能不斷try、再try、一直try,好在程式在撰寫初期,就在各個流程轉折點
         預留延時的變數,在主功能完成後,要調整timing就會變得比較清鬆,只要延時
         的變數參數值加一點或減一點即可
         這個部份到底要調成怎樣才算最佳,其實也沒有標準答案,玩得高興就好
      # 還有滿多細節的,也不好用文字描述,有興趣的底下有程式碼,就加減看囉!

12.程式碼(下載)<沒留很多註解,現在看也一知半解,且很多語法是土法鍊鋼,莫見笑才是>
     程式燒錄檔(下載)
     [其實是很久以前的東西了,從資料夾裡翻了出來,但我想應不會有問題啦!]



沒有留言:

張貼留言

本網誌其它"軌跡"

// 以下為新增的程式碼 FOR 文章分類 // 以上為新增的程式碼 FOR 文章分類