設(shè)計報告點陣貪吃蛇_第1頁
設(shè)計報告點陣貪吃蛇_第2頁
設(shè)計報告點陣貪吃蛇_第3頁
設(shè)計報告點陣貪吃蛇_第4頁
設(shè)計報告點陣貪吃蛇_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

設(shè)計報告_16x16點陣貪吃蛇20XX-目錄16x16點陣貪吃蛇設(shè)計報告_16x16點陣貪吃蛇一、摘要................................................................2二、作品介紹............................................................21.作品簡介..........................................................22.(附)硬件連接......................................................3三、設(shè)計思路............................................................4設(shè)計報告_16x16點陣貪吃蛇1.硬件選擇..........................................................42.軟件設(shè)計..........................................................5四、代碼編寫............................................................61.管腳配置、數(shù)據(jù)傳輸與MAX7219初始化.................................62.圖案顯示..........................................................9設(shè)計報告_16x16點陣貪吃蛇3.點亮,熄滅單個LED................................................114.蛇的移動.........................................................135.食物的生成.......................................................146.定時器中斷內(nèi)容簡述...............................................157.按鍵中斷內(nèi)容簡述.................................................15設(shè)計報告_16x16點陣貪吃蛇8.其他細(xì)節(jié)設(shè)計.....................................................15五、效果測試...........................................................16六、設(shè)計總結(jié)...........................................................18七、參考文獻...........................................................1916x16點陣貪吃蛇116x16點陣貪吃蛇【摘要】該設(shè)計作品通過STM32F103單片機進行控制、MAX7219芯片驅(qū)動。由STM32平臺進行與游戲貪吃蛇相關(guān)的數(shù)據(jù)計算,并通過SPI將數(shù)據(jù)傳輸給MAX7219串行輸入/輸出共陰極顯示驅(qū)動器,由其控制16x16點陣LED屏幕的顯示,從而實現(xiàn)游戲貪吃蛇的效果【關(guān)鍵詞】STM32F103,MAX7219,SPI通信,貪吃蛇16x16點陣貪吃蛇作品介紹1.作品簡介該作品由MAX7219串行輸入/輸出共陰極顯示驅(qū)動器控制256個LED實現(xiàn)游戲貪吃蛇的效果,該芯片通過SPI方式與單片機STM32F103進行通信,由STM32平臺進行與游戲相關(guān)的計算,并將結(jié)果通過LED陣列顯示出來(具體的作品效果展示參見"五、效果測試"章節(jié),請?zhí)D(zhuǎn)至第頁)16x16點陣貪吃蛇2.(附)硬件連接16x16點陣貪吃蛇(MAX7219與STM32連接方式)16x16點陣貪吃蛇(LED點陣屏與MAX7219連接方式)16x16點陣貪吃蛇設(shè)計思路1.硬件選擇起初我們決定選擇制作游戲貪吃蛇時,最開始的方案是通過一個三-八譯碼器和一個移位寄存器實現(xiàn)對8x8的LED點陣的控制(思路來源于開發(fā)板上的數(shù)碼管)。通過譯碼器以及移位寄存器,可以實現(xiàn)單獨控制這個8x8陣列中的任意一個LED,從而可以在此基礎(chǔ)上編寫代碼,實現(xiàn)各式各樣的效果之后經(jīng)過與老師的討論,我了解到了MAX7219這款芯片,它專門用于控制類似于數(shù)碼管以及8x8的LED點陣這樣的模塊,能夠代替上述譯碼器和移位寄存器的功能通過單片機向MAX7219的各個寄存器中傳入數(shù)據(jù),就能夠?qū)崿F(xiàn)對一個8x8的LED點陣的控制很顯然,這種方案不僅比譯碼器+移位寄存器這種古早方案要先進的多,而且由于這款芯片的專用型更高、功能封裝的更好,使得它操作起來十分方便,通過SPI便能進行通信,大大降低了軟件編寫的難度16x16點陣貪吃蛇因此,STM32+MAX7219控制LED點陣實現(xiàn)貪吃蛇被定為了我們的最終方案考慮到MAX7219芯片同時還提供了DOUT引腳,方便對芯片進行級聯(lián)以實現(xiàn)更豐富的功能,我們后來決定將原計劃的8x8點陣貪吃蛇改為了16x16點陣貪吃蛇。通過將前一塊芯片的DOUT引腳與后一塊芯片的DIN引腳相連,并使所有芯片的CS、CLK、VCC、GND引腳相連,就能夠?qū)崿F(xiàn)芯片的級聯(lián)效果16x16點陣貪吃蛇(MAX7219及LED點陣)2.軟件設(shè)計軟件上,我總體上遵循從底層開始向上一層一層編寫的方式,這種方式不僅能夠方便我在需要時隨時調(diào)用上一層編寫的函數(shù),而且也使得代碼結(jié)構(gòu)十分清晰,后期找bug十分方便具體思路大致是從STM32的管腳配置、MAX7219與STM32的數(shù)據(jù)傳輸這類較為底層的代碼開始寫起,編寫各類初始化函數(shù)等16x16點陣貪吃蛇之后開始編寫下一層:通過向MAX7219的不同寄存器地址傳輸相應(yīng)的數(shù)據(jù),以實現(xiàn)在LED陣列中顯示各種各樣的圖案,將這些繁雜的代碼集成在一個個函數(shù)中,方便以后隨時調(diào)用最后就是與游戲貪吃蛇相關(guān)的內(nèi)容了:建立數(shù)組用于存儲蛇身體上各個點的坐標(biāo),并編寫與游戲運行相關(guān)的代碼并且補充定時器中斷和按鍵中斷的配置,通過中斷控制游戲進程(管腳配置、游戲進程等具體內(nèi)容參見"四、代碼編寫"章節(jié),請?zhí)D(zhuǎn)至第6頁)16x16點陣貪吃蛇代碼編寫1.管腳配置、數(shù)據(jù)傳輸與MAX7219初始化用于給MAX7219的DIN、CS、CLK傳輸信號的管腳PA1、PA3、PA5配置為推挽輸出模式、打開時鐘并初始化,這部分較為簡單,此處直接略過16x16點陣貪吃蛇接下來,根據(jù)MAX7219的時序圖編寫數(shù)據(jù)傳輸?shù)暮瘮?shù)。MAX7219的時序圖如下所示,由圖可知CS引腳拉低時數(shù)據(jù)進入,當(dāng)CS引腳被拉高時數(shù)據(jù)被鎖存;CLK為時鐘引腳,在CLK的上升沿時數(shù)據(jù)移入內(nèi)部移位寄存器;DIN則為數(shù)據(jù)輸入引腳由MAX7219數(shù)據(jù)手冊可以得知,在每次向芯片數(shù)據(jù)寄存器中傳入的16位串行數(shù)據(jù)中,高4位保留、接下來4位為地址位、最后8位為數(shù)據(jù)位。因此,每次需要向芯片的某個寄存器傳入數(shù)據(jù)時,僅需要通過SPI方式向MAX7219傳輸一個16位數(shù)據(jù)即可。另外,由于16x16點陣共使用了四個級聯(lián)的MAX7219芯片,這四塊芯片共用一個CS引腳,因此在CS引腳被拉低后,需要向該模塊中傳輸4個16位數(shù)據(jù),之后再拉高CS腳,以更新四塊芯片中的數(shù)據(jù)以此為基礎(chǔ),編寫向MAX7219寫入數(shù)據(jù)的函數(shù)16x16點陣貪吃蛇1.//

向MAX7219芯片寫入數(shù)據(jù)4.void

MAX7219_write_16bit(uint8_t

add,

uint8_t

dat)7.for(i=0;

i<8;

i++)2.//

add:

4位地址位5.{8.{3.//

dat:

8位數(shù)據(jù)位6.uint8_t

i=09.CLK_016x16點陣貪吃蛇10.if(add&0x80)

DIN_111.else

DIN_012.CLK_113.add

<<=

114.}15.for(i=0;

i<8;

i++)16.{17.CLK_018.if(dat&0x80)

DIN_116x16點陣貪吃蛇19.else

DIN_020.CLK_121.dat

<<=

122.}16x16點陣貪吃蛇23.}(由于每次傳輸數(shù)據(jù)時都需要調(diào)用四次該函數(shù),為了方便,CS引腳的上下拉并沒有寫在函數(shù)中,需要在每次傳輸數(shù)據(jù)的前后寫CS_0和CS_1)在此基礎(chǔ)上,便能夠編寫初始化函數(shù)了,該函數(shù)用于在單片機上電時配置MAX7219的工作模式,并將所有LED熄滅(寄存器地址)1.void

MAX7219_init(void)

//

LED點陣初始化函數(shù)16x16點陣貪吃蛇2.{3.//uint8_t

i=04.MAX7219_PinConf()5.MAX7219_clr()6.CS_07.MAX7219_write_16bit(0x09,

0x00);

//

無譯碼模式8.MAX7219_write_16bit(0x09,

0x00)9.MAX7219_write_16bit(0x09,

0x00)10.MAX7219_write_16bit(0x09,

0x00)16x16點陣貪吃蛇11.CS_112.CS_013.MAX7219_write_16bit(0x0A,

0x01);

//

配置亮度14.MAX7219_write_16bit(0x0A,

0x01)15.MAX7219_write_16bit(0x0A,

0x01)16.MAX7219_write_16bit(0x0A,

0x01)17.CS_118.CS_019.MAX7219_write_16bit(0x0B,

0x07);

//

配置可顯示位16x16點陣貪吃蛇20.MAX7219_write_16bit(0x0B,

0x07)23.CS_126.MAX7219_write_16bit(0x0C,

0x01)21.MAX7219_write_16bit(0x0B,

0x07)24.CS_027.MAX7219_write_16bit(0x0C,

0x01)22.MAX7219_write_16bit(0x0B,

0x07)25.MAX7219_write_16bit(0x0C,

0x01);

//

正常模式(開啟)28.MAX7219_write_16bit(0x0C,

0x01)16x16點陣貪吃蛇29.CS_130.CS_031.MAX7219_write_16bit(0x0F,

0x00);

//

測試模式(關(guān)閉)32.MAX7219_write_16bit(0x0F,

0x00)33.MAX7219_write_16bit(0x0F,

0x00)34.MAX7219_write_16bit(0x0F,

0x00)35.CS_136.}(以上工作模式的配置方式均按照數(shù)據(jù)手冊進行,這里不再詳細(xì)列出)16x16點陣貪吃蛇2.圖案顯示四個芯片級聯(lián),每次需要傳輸4個16位數(shù)據(jù),之后鎖存到各自芯片中,以實現(xiàn)數(shù)據(jù)的寫入。可以看到,由于每個芯片接受到的16位數(shù)據(jù)只能向一個寄存器中傳入信息,并且不能指定向某個芯片中單獨傳入16位數(shù)據(jù)(雖然可以將地址位全部置0以跳過個別芯片,實現(xiàn)對單獨一個芯片的操作,但這樣顯然效率較低),因此最終決定每次都向4個芯片的同一個寄存器傳輸信息,像這樣進行8輪,就能夠更改所有寄存器中原有的數(shù)據(jù),實現(xiàn)屏幕圖案的刷新這里直接采用向函數(shù)傳入數(shù)組的方式,數(shù)組中的每個元素都是要傳入MAX7219寄存器的數(shù)據(jù),按照特定的順序?qū)懭霐?shù)據(jù),就能將數(shù)組的每個元素跟一共32個寄存器一一對應(yīng)起來1.void

Display_Figure(uint8_t

*figure)

//

顯示圖形

參數(shù)figure:8位1*32數(shù)組16x16點陣貪吃蛇2.{3.uint8_t

i

=

04.for(i=0;

i<8;

i++)5.{6.CS_07.MAX7219_write_16bit(8-i,

figure[24+i])8.MAX7219_write_16bit(8-i,

figure[16+i])9.MAX7219_write_16bit(8-i,

figure[8+i])10.MAX7219_write_16bit(8-i,

figure[0+i])16x16點陣貪吃蛇11.CS_112.}13.}向函數(shù)中傳入的figure數(shù)組的形式大致如下1.uint8_t

startMenu[32]

=

{2.0x00,

0x00,

0x2E,

0x2A,

0x2E,

0x22,

0x62,

0x00,3.0x00,

0x00,

0x57,

0x55,

0x77,

0x25,

0x25,

0x00,4.0x00,

0x00,

0x80,

0x80,

0x00,

0xB0,

0xB0,

0x00,5.0x00,

0x00,

0x01,

0x01,

0x00,

0x0D,

0x0D,

0x00,16x16點陣貪吃蛇6.};

//

起始菜單3.點亮,熄滅單個LED關(guān)于貪吃蛇的游戲進程設(shè)計,我的方案是將每個LED用XY坐標(biāo)定位,由于游戲中的蛇一直都在按照上下左右的方向移動,因此這種定位方式能夠很方便后期進行游戲進程的編寫。在這部分,我編寫了一個函數(shù),用于通過某個LED在點陣中的XY坐標(biāo)來實現(xiàn)對該LED的點亮與熄滅1.uint8_t

data_in_resister_9_1[32]

=

{2.0x00,

0x00,

0x00,

0x00,

0x00,

0x00,

0x00,

0x00,3.0x00,

0x00,

0x00,

0x00,

0x00,

0x00,

0x00,

0x00,4.0x00,

0x00,

0x00,

0x00,

0x00,

0x00,

0x00,

0x00,16x16點陣貪吃蛇5.0x00,

0x00,

0x00,

0x00,

0x00,

0x00,

0x00,

0x00,6.};

//

用于存儲將要傳入MAX7219寄存器中的數(shù)據(jù)(切換圖形后記得清空!)1.void

Display_XY(uint8_t

x,

uint8_t

y)

//

點亮點陣中的一個LED2.{3.if(x<=0

||

x>16

||

y<=0

||

y>16)

return4.if(x<=8

&&

y<=8)5.{6.data_in_resister_9_1[y-1]

|=

1<<(x-1)7.CS_016x16點陣貪吃蛇8.MAX7219_write_16bit(0x00,

0x00)9.MAX7219_write_16bit(0x00,

0x00)10.MAX7219_write_16bit(0x00,

0x00)11.MAX7219_write

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論