創意貪吃蛇模型

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

五、程序代碼
全部資料51hei下載地址:
1095.doc
(158.5 KB, 下載次數: 58)
2018-4-24 18:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
貪吃蛇.rar
(10.58 KB, 下載次數: 87)
2018-4-25 03:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|