一. 簡(jiǎn)介
將前面幾篇文章介紹的幾個(gè)小游戲整合在一起,加入了簡(jiǎn)陋的數(shù)字時(shí)鐘和圖片顯示功能,合在一起作為一個(gè)小項(xiàng)目分享給大家,希望大家喜歡。只需要兩個(gè)外設(shè)即可實(shí)現(xiàn)----顯示屏和紅外控制模塊
二. 功能介紹
作為一個(gè)小項(xiàng)目來說,功能還是比較齊全的。 1. 上電開機(jī)后,會(huì)進(jìn)行一段開機(jī)動(dòng)畫的加載。 2. 然后是主界面的顯示,一共包括三個(gè)部分,時(shí)鐘、游戲和相冊(cè)。 3. 通過紅外按鍵進(jìn)行選擇。 4. 時(shí)鐘 :一個(gè)簡(jiǎn)單的時(shí)分秒的顯示(#^.^#)。 5. 游戲 :游戲下面又有一個(gè)界面顯示,用來選擇對(duì)應(yīng)的游戲,貪吃蛇,俄羅斯方塊和2048,都是一些常規(guī)的游戲。 6. 相冊(cè):一個(gè)簡(jiǎn)單的二值相冊(cè)(經(jīng)過邊緣檢測(cè)后的圖像)顯示,包括了我預(yù)先存儲(chǔ)的三張圖片。 7. 貪吃蛇:貪吃蛇部分有必要單獨(dú)拿出來說說,其中加入了算法部分,利用A*算法,可以自動(dòng)尋找到食物的位置,并指導(dǎo)貪吃蛇的移動(dòng)。算法的學(xué)習(xí)與貪吃蛇結(jié)合也是一個(gè)值得學(xué)習(xí)的點(diǎn),同時(shí)也是一個(gè)難點(diǎn)。 以上就是本次小項(xiàng)目全部功能了。
三. 實(shí)現(xiàn)框架介紹
這次的設(shè)計(jì)為裸機(jī)程序,所以只能采用前后臺(tái)系統(tǒng)的方式來實(shí)現(xiàn)。
前臺(tái)為我們的應(yīng)用程序,后外為我們的中斷回調(diào)函數(shù),里面主要用來紅外模塊數(shù)據(jù)的接收,以及時(shí)間的產(chǎn)生(貪吃蛇的移動(dòng)以及俄羅斯方塊的下落)。
前臺(tái)程序簡(jiǎn)要介紹
以貪吃蛇部分為例,進(jìn)入到貪吃蛇部分后,就是清屏將上一個(gè)部分的顯示清除掉,然后是貪吃蛇的初始化以及使能定時(shí)器4,用來記錄數(shù)據(jù),然后就是一個(gè)while循環(huán)了。根據(jù)不同的按鍵狀態(tài)調(diào)用不同的函數(shù)。退出這個(gè)部分也很簡(jiǎn)單,修改當(dāng)前的狀態(tài),然后break就可以了。其他部分都是如此。
else if(CurrMode == Snake) //貪吃蛇游戲 { LCDDMAFullOn(BackGround); SnakeInit(); TIM_Cmd(TIM4,ENABLE); while(1) { if(KEYState == KEYLEFT) DirectionChange(MoveLeft); else if(KEYState == KEYRIGHT) DirectionChange(MoveRight); else if(KEYState == KEYUP) DirectionChange(MoveUp); else if(KEYState == KEYDOWN) DirectionChange(MoveDown); else if(KEYState == KEYRETURN) { CurrIndex = 0; SnakeDestory(); TIM_Cmd(TIM4,DISABLE); CurrMode = Main; break; } } }
2. 后臺(tái)程序簡(jiǎn)要介紹
本次主要用到了兩個(gè)后臺(tái)程序,一個(gè)是紅外數(shù)據(jù)的接收
void EXTI0_IRQHandler(void){ if(EXTI_GetITStatus(EXTI_Line0) != RESET) { uint8_t data; data = InfraredDataRecv(); if(data == InfraredLeft) KEYState = KEYLEFT; else if(data == InfraredRight) KEYState = KEYRIGHT; else if(data == InfraredUp) KEYState = KEYUP; else if(data == InfraredDown) KEYState = KEYDOWN; else if(data == InfraredReturn) KEYState = KEYRETURN; delay_ms(10); /*清除標(biāo)志位 */ EXTI_ClearITPendingBit(EXTI_Line0); }}另外一個(gè)是定時(shí)器中斷,其作用可以看注釋
void TIM4_IRQHandler(void){ if(TIM_GetITStatus(TIM4,TIM_IT_Update) == SET) //判斷是否發(fā)生中斷 { if(CurrMode == Snake)SnakeGame();//蛇的移動(dòng) else if(CurrMode == Tetris) { TetrisFlag = 1; //俄羅斯方塊下落標(biāo)志 } else if(CurrMode == Clock) {DClockFlag=1;//數(shù)字時(shí)鐘加一標(biāo)志 } TIM_ClearITPendingBit(TIM4,TIM_IT_Update); //清除中斷標(biāo)識(shí) }}
-
框架
+關(guān)注
關(guān)注
0文章
403瀏覽量
17475 -
程序
+關(guān)注
關(guān)注
117文章
3785瀏覽量
81002 -
數(shù)字時(shí)鐘
+關(guān)注
關(guān)注
2文章
150瀏覽量
20332
原文標(biāo)題:STM32小項(xiàng)目分享
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論