by 草木灰
### 一、實驗內容
1、利用led矩陣、 鍵盤編寫乙個簡單的貪吃蛇遊戲
2、通過編寫貪吃蛇遊戲這一任務,理解驅動,交叉編譯,嵌入式開發
此次實驗可以實驗的目的是進一步熟練前面學過的知識,體驗嵌入式開發的過程。而且有了鍵盤和led矩陣的驅動、c語言貪吃蛇程式,任務的關鍵就是明確各個介面:
1、嵌入式開發板的led矩陣介面。
2、嵌入式開發板的鍵盤介面。
3、c語言貪吃蛇程式的顯示介面。
4、c語言貪吃蛇程式的鍵盤介面。
5、c語言貪吃蛇的頻率介面,包括地圖顯示頻率,蛇的移動頻率。
所以要求c語言貪吃蛇程式是模組化的,下面實驗準備部分著重分析各個介面。
1、嵌入式開發板的led矩陣介面
下面是led矩陣的掃瞄函式,主體是兩層for迴圈
//該程式是led驅動測試程式的一部分
d = open(device_name, o_rdwr);
for (i=1;i<=8;i++)
c = 1;
r = r<<1;
}// close
ret = close(fd);
2、嵌入式開發板的鍵盤介面
把讀取到的值存在pre_scancode,沒有鍵按下時,讀到的值為255,有按鍵被按下時反饋值為按鍵數值,比如按下 「 6 」 就反饋 「 6 」。
//該程式是鍵盤驅動測試程式的一部分
fd =
open
(device_name, o_rdwr)
;buf[0]
=0x22
;while(1
) pre_scancode = buf[0]
;usleep
(50000);
// sleep 0.05 second
}// close
ret =
close
(fd)
;
3、c語言貪吃蛇程式的顯示介面
地圖大小:
下面兩個巨集定義設定地圖大小
#define h 10
//高
#define w 20
//寬
地圖標誌:
三種輸出分別為「 」 、「 o 」和「#」,開發板上可以設定為led亮滅
void
drawmap()
//畫地圖
else
if(i==
0||i==w-
1||j==
0||j==h-1)
//為1輸出#
else
}printf
("\n");
//別忘了換行
}}
移植測試:
修改為其他值可以使用,不影響程式執行
4、c語言貪吃蛇程式的鍵盤介面
下面是按鍵獲取函式
int
keyread
(key *key)}}
return keyreadflag;
}
移植測試:
先簡單換成鍵盤上其它鍵,確保這段函式是鍵盤介面函式。
修改介面值後按鍵無反應,修改函式列印按鍵的值。按下左鍵先檢測到224,然後檢測到75。數字小鍵盤獲得的值沒有224,直接輸出31(1鍵)。修改後,小蛇不動。
發現是程式沒有檢測到,因為這裡做移植測試是為了測試該函式是否封裝完善,所以暫時略過不管。
5、c語言貪吃蛇的頻率介面
地圖顯示頻率:
該c程式模板沒有設定地圖顯示頻率,但led的話肯定要有考慮顯示頻率的問題,簡單些可以在 drawmap() 裡面加延時函式
void
drawmap()
//畫地圖
else
if(i==
0||i==w-
1||j==
0||j==h-1)
//為1輸出#
else
}printf
("\n");
//別忘了換行
// printf("%d\n",flag_key);
}}
蛇的移動頻率:
該c程式模板沒有設定難度級——蛇的移動速率不變,可以重新寫乙個延時函式設定為難度級別
void
snakemove
(key key,snake *gamesnake,
int keywork)
else
if(i==
0||i==w-
1||j==
1||j==h-1)
else
c = c<<1;
buf_led[0]
=c;// column
} c =1;
r = r<<1;
}}
(2)、鍵盤
初始化程式:巨集定義和標頭檔案沒寫
#include
// open() close()
#include
// read() write()
#define device_name_key "/dev/keypad"
int fd_key;
fd_key =
open
(device_name_key, o_rdwr)
;buf_key[0]
=0x22
;
應用程式:將原來case的值改變即可
int
keyread
(key *key)}}
return keyreadflag;
}
(3)、頻率
根據顯示效果調整延時長短即可。
1、 warning:getch(); printf() ; scanf()等函式不可移植 ;注釋掉。
2、報錯內容:
[root@localhost drivers]# make
arm-linux-gcc -o eatingsnake eatingsnake.o
/usr/local/arm-linux/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: eatingsnake.o: relocations in generic elf (em: 3)
eatingsnake.o: could not read symbols: file in wrong format
collect2: ld returned 1 exit status
make: *** [eatingsnake] error 1
解決方法:
因為是「eatingsnake.o」報的錯誤,刪除這個檔案,將.c檔案和makefile放在新建資料夾snake下,重新編譯。
實驗總結:
可以實現貪吃蛇基本功能:led矩陣顯示小蛇, 鍵盤1、5、3、2分別控制方向左、上、右、下。
課程總結:
貪吃蛇實驗
總的來說共分為三個部分 遊戲介面 食物 蛇。遊戲介面很簡單,不多贅述。食物要實現隨機出現在介面內。蛇部分是重難點,要實現其移動 吃食物 身體的移動 碰撞檢測等等。我運用了for迴圈來列印出整個遊戲介面,以下為 部分 void print wall cout for int i 1 i n i cou...
貪吃蛇遊戲實驗報告
使用教材 c語言課程設計與遊戲開發實踐 一 實驗目的 熟悉實驗環境vc 或dev c 熟悉console的輸入和輸出 通過遊戲的需求,進一步掌握陣列的使用。二 實驗環境 dev c vc 三 實驗記錄 實驗思路 以實驗教材p87至p91頁的 為基礎,加入計分功能,計命功能,變速功能,遊戲成功和失敗出...
ARM嵌入式實驗
問題 在startup.s中增加函式,由c程式呼叫,以此取得彙編中相關引數的設定值。獲取pll中m,p值,c程式呼叫彙編函式 在c語言中,要extern 乙個函式宣告即可,然後這個函式在彙編裡面實現。在彙編裡面,用export 把c語言定義的函式名引進來,再開始編寫函式名開始的段 實現 c程式呼叫 ...