一、硬件設(shè)計
1、8*8LED點陣的原理說明
本設(shè)計采用的點陣顯示模塊是ARK-SZ411288K,其原理結(jié)構(gòu)圖如圖1所示。ARK-SZ411288K顯示模塊是8*8點陣的顯示模塊,從圖1中可以看出,8*8點陣共需要64個發(fā)光二極管組成,且每個發(fā)光二極管是放置在行線和列線的交叉點上,當(dāng)對應(yīng)的某一列置1電平,某一行置0電平,則相應(yīng)的 8*8LED點陣的原理圖
二極管就亮。ARK-SZ411288K可與CPU直接連接,根據(jù)引腳說明,將其各個引腳與相應(yīng)的I/O口連接。
2、主程序工作流程
主程序工作流程如圖3所示,系統(tǒng)上電后首先對LED進行初始化,接著對定時器初始化,并啟動定時器,接著執(zhí)行程序主體邏輯,程序主體邏輯執(zhí)行一遍后檢查是否有中斷發(fā)生。中斷源有兩個,一個是驅(qū)動貪吃蛇自動前行的定時中斷,另一個是用戶控制貪吃蛇移動方向的鍵盤中斷,任意中斷的到來都將改變貪吃蛇的當(dāng)前狀態(tài)。若當(dāng)前沒有中斷發(fā)生,主程序繼續(xù)判斷蛇頭是否碰壁或頭尾相撞,若是,結(jié)束游戲,否則繼續(xù)執(zhí)行程序主體循環(huán)。
主程序工作流程
3、LED點陣初始化
對點陣初始化,先把點陣所有的信息清空,讓其不顯示任何信息,再在指定的位置顯示蛇所處的最初位置和第一個果實的位置。初始化程序如下:
4、貪吃蛇的移動
當(dāng)蛇沒有吃到任何食物時,每次步進蛇頭的將要到的下一個LED燈點亮,而蛇尾那個LED燈會滅掉,程序設(shè)計時只要將蛇尾那點位置的值傳給蛇頭下一個位置的值,再改變蛇尾的值即可。而蛇頭下一個位置根據(jù)蛇頭和偏移量來確定,每次上下左右按鍵決定了蛇步進的偏移量,只要將蛇頭的位置加上偏移量的值即得到新的蛇頭位置。當(dāng)蛇頭碰到四周的墻壁或者碰到自己的身體,小蛇就立即斃命并結(jié)束游戲。
5、食物的隨機出現(xiàn)
食物的出現(xiàn)是一種隨機行為,所以必須做一個隨機數(shù),而且食物出現(xiàn)的位置不能與蛇的位置相同,也不能超出墻外,否則就要重置食物。這里使用程序中的定時計數(shù)器的低八位 TL0的數(shù)值,由于TL0不斷變化,不同的時間點數(shù)值不同,我這里使用的是C++語言里的stdlib.h文件庫,使用里面的隨機函數(shù)srand(),先利用srand(TL0)獲得TL0的數(shù)值,再利用兩次rand()%8分別得到食物出現(xiàn)的橫縱坐標(biāo)的位置。
三、調(diào)試及仿真
先在Proteus上繪制硬件電路(并未畫出驅(qū)動電路),電路設(shè)計完成后就可以進行仿真。先雙擊單片機,把用uVision3編譯生成的HEX文件指定為下載文件,點擊PLAY鍵即可進行仿真。當(dāng)出現(xiàn)ANALYSER ERRORS時,表示電路有錯誤,列表中說明了具體的錯誤,必須要先排錯才可以進行仿真.
四、原理圖
五、程序代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |