版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 硬件課程設(shè)計(jì)報(bào)告</b></p><p> --課題:簡(jiǎn)易電子書</p><p><b> 姓名:</b></p><p><b> 學(xué)號(hào):</b></p><p><b> 同組人姓</b></p>&
2、lt;p><b> 指導(dǎo)老師</b></p><p> 課設(shè)評(píng)價(jià): </p><p> 課設(shè)成績(jī): </p><p><b> 目錄</b></p><p><b> 1. 概述4</b></p><
3、p> 1.1 課程設(shè)計(jì)的核心任務(wù)4</p><p> 1.2 課程設(shè)計(jì)的工作進(jìn)程4</p><p><b> 2. 需求分析4</b></p><p> 2.1 功能分析4</p><p> 2.2 可行性分析5</p><p> 2.2.1 技術(shù)可行性分析5<
4、/p><p> 2.2.2 經(jīng)濟(jì)可行性5</p><p><b> 3. 概要設(shè)計(jì)5</b></p><p> 3.1 對(duì)MSP430F149單片機(jī)的使用5</p><p> 3.2 SD卡及FAT32文件系統(tǒng)的讀寫6</p><p> 3.3 菜單顯示6</p>&
5、lt;p> 3.4 電子書顯示6</p><p> 3.5 音樂播放功能7</p><p> 3.6 游戲功能7</p><p><b> 4. 詳細(xì)設(shè)計(jì)7</b></p><p> 4.1 SD卡及其結(jié)構(gòu)7</p><p> 4.2 12864液晶屏結(jié)構(gòu)及用法11&
6、lt;/p><p> 4.2.1 12864液晶屏的硬件結(jié)構(gòu)11</p><p> 4.2.2 12864內(nèi)部的數(shù)據(jù)緩存12</p><p> 4.2.3 12864液晶屏的指令13</p><p> 4.2.4 12864液晶屏驅(qū)動(dòng)函數(shù)14</p><p> 4.3 FAT32文件系統(tǒng)14</p
7、><p> 4.3.1 FAT32文件系統(tǒng)結(jié)構(gòu)簡(jiǎn)介14</p><p> 4.3.2 FAT32文件系統(tǒng)驅(qū)動(dòng)函數(shù)16</p><p> 4.4 VS1003音頻解碼芯片17</p><p> 4.5 整機(jī)結(jié)構(gòu)18</p><p> 4.5.1 MSP430開發(fā)板與12864液晶屏的連接19</p&
8、gt;<p> 4.5.2 MSP430開發(fā)板與SD卡的連接19</p><p> 4.5.3 MSP430開發(fā)板與VS1003芯片的連接20</p><p> 4.6 菜單功能20</p><p> 4.7 電子書顯示功能21</p><p> 4.7.1 實(shí)現(xiàn)顯示功能的基本函數(shù)21</p>
9、<p> 4.7.2 向下翻頁(yè)功能22</p><p> 4.7.3 向上翻頁(yè)功能22</p><p> 4.7.4 顯示閱讀時(shí)間23</p><p> 4.7.5 按百分比跳轉(zhuǎn)23</p><p> 4.7.6 書簽功能的實(shí)現(xiàn)23</p><p> 4.7.7 英文單詞的人性化顯示2
10、4</p><p> 4.8 音樂播放功能24</p><p> 4.9 俄羅斯方塊游戲功能25</p><p> 4.10 按鍵檢測(cè)27</p><p> 5. 系統(tǒng)測(cè)試28</p><p> 5.1 菜單功能的測(cè)試28</p><p> 5.2 電子書閱讀功能測(cè)試29
11、</p><p> 5.3 音樂播放功能測(cè)試31</p><p> 5.4 游戲功能的測(cè)試31</p><p> 6. 心得體會(huì)31</p><p> 7. 參考文獻(xiàn)32</p><p><b> 1. 概述</b></p><p> 1.1 課程設(shè)計(jì)的
12、核心任務(wù)</p><p> 隨著嵌入式技術(shù)的飛速發(fā)展,各種電子產(chǎn)品出現(xiàn)了小型化,智能化,多功能化方向發(fā)展的趨勢(shì)。在這種趨勢(shì)下,許多小型電子產(chǎn)品層出不窮,并且逐漸開始替代傳統(tǒng)的生活用品,并走近我們的生活。電子書閱讀器的出現(xiàn)就再圖書信息的承載和閱讀方式上有了很大的革新。本項(xiàng)目的目的就是制作一個(gè)電子閱讀器,可以讓人們方便的進(jìn)行隨身閱讀。同時(shí)在閱讀疲勞時(shí)還可以利用其中的mp3播放器和內(nèi)置的游戲進(jìn)行放松娛樂。</p
13、><p> 1.2 課程設(shè)計(jì)的工作進(jìn)程</p><p> 本課設(shè)由段經(jīng)璞,趙冰潔,張琢三人組隊(duì)共同完成。大家相互之間進(jìn)行分工合作,以取得快速的工作進(jìn)展和優(yōu)秀的最后結(jié)果。</p><p><b> 2. 需求分析</b></p><p><b> 2.1 功能分析</b></p>&
14、lt;p> 電子書,最出名的代表應(yīng)該是亞馬遜公司的kindle電子書閱讀器。Kindle使用電子墨水屏幕,可以提供接近紙質(zhì)書的閱讀體驗(yàn)。同時(shí)還可以進(jìn)行音樂播放,以及無(wú)線上網(wǎng)等功能。并且kindle通過和亞馬遜的網(wǎng)上書店整合,可以實(shí)現(xiàn)圖書的快速查找,購(gòu)買以及閱讀。而現(xiàn)在,單純的電子書幾乎不存在,電子書的功能幾乎都被整合在了各式各樣掌上終端中。這樣的掌上終端在進(jìn)行電子書閱讀的同時(shí),可以播放音樂,無(wú)線瀏覽網(wǎng)頁(yè)以及進(jìn)行游戲。因此單純的電
15、子書可以說是完全沒有市場(chǎng)的,它必須被整合其他的功能才能實(shí)現(xiàn)良好的效果。</p><p> 通過以上的分析可以發(fā)現(xiàn),電子書閱讀器必須與其他功能進(jìn)行整合才能被推入市場(chǎng)。當(dāng)然,在整合其他功能的同時(shí),我們更要把電子書閱讀的功能完善好。根據(jù)分析,我們決定在課設(shè)中實(shí)現(xiàn)電子書,音樂播放以及俄羅斯方塊游戲的功能。</p><p> 電子書閱讀部分,我們決定實(shí)現(xiàn)以下功能:</p><
16、p> 1. SD卡及FAT32文件系統(tǒng)的讀寫</p><p> 2.長(zhǎng)/短文件名的顯示</p><p><b> 3.電子書的顯示</b></p><p> 4.按閱讀進(jìn)度百分比直接跳轉(zhuǎn)</p><p><b> 5.閱讀時(shí)間顯示</b></p><p>&l
17、t;b> 6.書簽功能</b></p><p> 7.英文單詞的人性化顯示</p><p> 在音樂播放部分,我們決定實(shí)現(xiàn)以下功能:</p><p><b> 1.歌曲名稱的顯示</b></p><p><b> 2.歌曲音量的調(diào)節(jié)</b></p><
18、p> 3.歌曲的前進(jìn),后退,快進(jìn),快退及暫停的功能。</p><p><b> 2.2 可行性分析</b></p><p> 2.2.1 技術(shù)可行性分析</p><p> 在電子書閱讀部分,我們組使用msp430f149芯片作為主控芯片。使用SD卡作為存儲(chǔ)設(shè)備。因?yàn)閙sp430f149芯片自帶spi控制器,所以可以直接使用spi接
19、口,利用SD卡的spi模式與SD卡進(jìn)行數(shù)據(jù)交換。同時(shí)準(zhǔn)備使用12864液晶屏作為我們電子書的顯示部分。12864具有內(nèi)建的英文及中文字庫(kù),可以方便的顯示各種文字信息,從而實(shí)現(xiàn)電子書的顯示。</p><p> 在音樂播放部分,我們組使用vs1003音頻解碼芯片來進(jìn)行音頻解碼。Vs1003自帶spi接口,可以方便的利用spi總線與msp430f149主控芯片進(jìn)行連接。在進(jìn)行音樂播放時(shí),只要把音頻文件從SD卡中取出再
20、直接發(fā)送到vs1003中即可。</p><p> 在游戲部分,我們利用12864的繪圖功能實(shí)現(xiàn)俄羅斯方塊游戲。</p><p> 2.2.2 經(jīng)濟(jì)可行性</p><p> 因?yàn)槲覀冃〗M不具備自己焊接電路板的時(shí)間和能力,因此我們組直接從市場(chǎng)上購(gòu)買現(xiàn)成的開發(fā)板。最終購(gòu)買的開發(fā)板的價(jià)格如下:</p><p> 1、msp430f149開發(fā)板
21、:64元。</p><p> 2、12864液晶屏:56元。</p><p> 3、vs1003音頻解碼芯片:43元。</p><p> 4、1GB大小的SD卡:20元</p><p> 5、SD卡插座:6元。</p><p> 整體系統(tǒng)的總價(jià)格:179元。</p><p> 整體價(jià)
22、格在可以接受的范圍內(nèi)。而且如果可以自己直接購(gòu)買芯片并焊接電路板的話,就可以大幅度降低整體系統(tǒng)的價(jià)格。</p><p><b> 3. 概要設(shè)計(jì)</b></p><p> 3.1 對(duì)MSP430F149單片機(jī)的使用</p><p> MSP430F149單片機(jī)是由TI公司開發(fā)的一款高性能低功耗單片機(jī)。實(shí)驗(yàn)中主要使用F149的CPU內(nèi)核,SP
23、I控制器,IO端口及TimerA定時(shí)器。</p><p> 3.2 SD卡及FAT32文件系統(tǒng)的讀寫</p><p> 要想實(shí)現(xiàn)電子書閱讀功能,就必須實(shí)現(xiàn)SD卡的讀寫,因?yàn)殡娮訒耙魳窋?shù)據(jù)都是以SD卡作為存儲(chǔ)介質(zhì)的。為了使用SD卡,就必須實(shí)現(xiàn)SD卡的初始化功能,讀扇區(qū)功能及寫扇區(qū)功能。同時(shí),我們組在進(jìn)行設(shè)計(jì)時(shí),確定了使用FAT32文件系統(tǒng)作為SD卡上得文件系統(tǒng)。FAT32文件系統(tǒng)是一種
24、簡(jiǎn)單高效的文件系統(tǒng),在實(shí)現(xiàn)SD卡讀寫扇區(qū)功能的基礎(chǔ)上,我們需要基于FAT32文件系統(tǒng)的特性實(shí)現(xiàn)對(duì)FAT32文件系統(tǒng)的讀寫,這樣才能獲取SD卡上的文本文件及音樂文件數(shù)據(jù)。</p><p><b> 3.3 菜單顯示</b></p><p> 一個(gè)完整可用的電子書系統(tǒng)一定要有良好的菜單系統(tǒng)的支持。我們組設(shè)計(jì)了兩級(jí)菜單顯示,其設(shè)計(jì)思想如下:</p><
25、;p> 1、主菜單:當(dāng)進(jìn)入系統(tǒng)時(shí),會(huì)顯示主菜單,其中包含電子書,音樂,游戲三個(gè)選項(xiàng),用戶選擇這三個(gè)選項(xiàng)中的一個(gè)就可以進(jìn)入下一級(jí)菜單。</p><p> 2、目錄菜單:當(dāng)在主菜單中選擇電子書或音樂時(shí),就會(huì)進(jìn)入電子書或音樂的目錄菜單。在電子書目錄菜單中,會(huì)列出當(dāng)前SD卡中所存儲(chǔ)的所有電子書的文件名,用戶選擇項(xiàng)閱讀的文件即可進(jìn)行閱讀。同樣的,在音樂目錄菜單中,會(huì)列出當(dāng)前SD卡中所存儲(chǔ)的所有音樂文件的文件名,用
26、戶選擇項(xiàng)播放的音樂即可進(jìn)行音樂播放。</p><p><b> 3.4 電子書顯示</b></p><p> 電子書顯示功能是一個(gè)電子書閱讀器的核心,它以12864液晶顯示屏作為基礎(chǔ),從SD卡中讀取文件并顯示在屏幕上。整個(gè)電子書的顯示功能是為12864液晶屏量身設(shè)計(jì)的,它文本模式可以顯示4行文字,每行顯示8個(gè)漢字或16個(gè)英文字母。為了取得良好的閱讀體驗(yàn),我們組設(shè)計(jì)
27、了以下的功能:</p><p> 1、向上向下翻頁(yè)功能:當(dāng)人在閱讀電子書時(shí),如果翻來一頁(yè)新的文字時(shí),讀者有可能會(huì)因暫時(shí)性忘記上一頁(yè)最后一行的若干內(nèi)容而造成對(duì)下一頁(yè)起始內(nèi)容的理解困難。因此,我們決定在向下翻頁(yè)時(shí),僅會(huì)翻三行內(nèi)容,也就是說,我們會(huì)以當(dāng)前屏幕的最后一行,為新一頁(yè)的第一行。這樣就可以保證閱讀的流暢性。同理,在向上翻頁(yè)時(shí),我們會(huì)以當(dāng)前屏幕的第一行,為后一頁(yè)的最后一行。</p><p&g
28、t; 2、按比例跳轉(zhuǎn)功能:讀者在讀書的時(shí)候,有時(shí)會(huì)想直接跳轉(zhuǎn)到這本書的后面去進(jìn)行閱讀。這時(shí)候就需要一個(gè)按書內(nèi)容的百分比進(jìn)行跳轉(zhuǎn)的功能。本課設(shè)中實(shí)現(xiàn)了這個(gè)功能。</p><p> 3、英文單詞的人性化顯示功能:為了保證在閱讀英文文章時(shí)的流暢性,我們必須保證每一個(gè)詞都不會(huì)因?yàn)閾Q行而被截?cái)唷1菊n設(shè)就實(shí)現(xiàn)了這個(gè)功能,從而保證了閱讀英文文章時(shí)的流暢性。</p><p> 4、書簽功能:這個(gè)功能
29、對(duì)電子書至關(guān)重要,因?yàn)樽x者幾乎無(wú)法連續(xù)的讀完一本書,當(dāng)讀者退出閱讀時(shí),他需要保存當(dāng)前的閱讀進(jìn)度以便在下次方便的繼續(xù)閱讀。這也是本課設(shè)中所實(shí)現(xiàn)的關(guān)鍵功能。</p><p> 5、閱讀時(shí)間的顯示:大家都知道,閱讀時(shí)間過長(zhǎng)對(duì)視力不好。因此一個(gè)完善的電子書閱讀器必須可以顯示當(dāng)前電子書的閱讀時(shí)間,以使讀者可以清楚的知道自己何時(shí)需要休息。</p><p> 3.5 音樂播放功能</p>
30、<p> 在前面已經(jīng)討論過,一個(gè)成熟的電子書,一定要集成其他的附加功能才能提升整個(gè)系統(tǒng)的檔次。音樂播放功能就是非常重要的一個(gè)功能。本課設(shè)中利用vs1003制作了一個(gè)mp3播放器,可以播放高品質(zhì)的音樂。并且實(shí)現(xiàn)了調(diào)整音量,暫停,快進(jìn)快退,向前向后選擇歌曲的功能。這樣,當(dāng)閱讀電子書感到疲勞時(shí),就可以聽聽音樂放松一下心情。</p><p><b> 3.6 游戲功能</b><
31、;/p><p> 課設(shè)中利用12864的繪圖模式制作了俄羅斯方塊的游戲。這樣讀者可以在閱讀疲勞時(shí)玩玩俄羅斯方塊來放松心情。</p><p><b> 4. 詳細(xì)設(shè)計(jì)</b></p><p> 4.1 SD卡及其結(jié)構(gòu)</p><p> SD卡SPI模式下與單片機(jī)的連接圖:</p><p> S
32、D卡支持兩種總線方式:SD方式與SPI方式。其中SD方式采用6線制,使用CLK、CMD、DAT0~DAT3進(jìn)行數(shù)據(jù)通信。而SPI方式采用4線制,使用CS、CLK、DataIn、DataOut進(jìn)行數(shù)據(jù)通信。SD方式時(shí)的數(shù)據(jù)傳輸速度與SPI方式要快,采用單片機(jī)對(duì)SD卡進(jìn)行讀寫時(shí)一般都采用SPI模式。采用不同的初始化方式可以使SD卡工作于SD方式或SPI方式。這里只對(duì)其SPI方式進(jìn)行介紹。</p><p> 1、SP
33、I方式驅(qū)動(dòng)SD卡的方法</p><p> SD卡的SPI通信接口使其可以通過SPI通道進(jìn)行數(shù)據(jù)讀寫。從應(yīng)用的角度來看,采用SPI接口的好處在于,很多單片機(jī)內(nèi)部自帶SPI控制器,不光給開發(fā)上帶來方便,同時(shí)也見降低了開發(fā)成本。然而,它也有不好的地方,如失去了SD卡的性能優(yōu)勢(shì),要解決這一問題,就要用SD方式,因?yàn)樗峁└蟮目偩€數(shù)據(jù)帶寬。SPI接口的選用是在上電初始時(shí)向其寫入第一個(gè)命令時(shí)進(jìn)行的。以下介紹SD卡的驅(qū)動(dòng)方
34、法,只實(shí)現(xiàn)簡(jiǎn)單的扇區(qū)讀寫。</p><p><b> 1)命令與數(shù)據(jù)傳輸</b></p><p> SD卡自身有完備的命令系統(tǒng),以實(shí)現(xiàn)各項(xiàng)操作。命令格式如下:</p><p> 命令的傳輸過程采用發(fā)送應(yīng)答機(jī)制,過程如下:</p><p> 每一個(gè)命令都有自己命令應(yīng)答格式。在SPI模式中定義了三種應(yīng)答格式,如下表所
35、示:</p><p><b> 2)初始化</b></p><p> SD卡的初始化是非常重要的,只有進(jìn)行了正確的初始化,才能進(jìn)行后面的各項(xiàng)操作。在初始化過程中,SPI的時(shí)鐘不能太快,否則會(huì)造初始化失敗。在初始化成功后,應(yīng)盡量提高SPI的速率。在剛開始要先發(fā)送至少74個(gè)時(shí)鐘信號(hào),這是必須的。在很多讀者的實(shí)驗(yàn)中,很多是因?yàn)槭韬隽诉@一點(diǎn),而使初始化不成功。隨后就是寫入
36、兩個(gè)命令CMD0與CMD1,使SD卡進(jìn)入SPI模式</p><p><b> 初始化時(shí)序圖:</b></p><p> 在項(xiàng)目中,初始化SD卡的函數(shù)為:unsigned char InitMmc()。</p><p><b> 3)扇區(qū)讀</b></p><p> 扇區(qū)讀是對(duì)SD卡驅(qū)動(dòng)的目的
37、之一。SD卡的每一個(gè)扇區(qū)中有512個(gè)字節(jié),一次扇區(qū)讀操作將把某一個(gè)扇區(qū)內(nèi)的512個(gè)字節(jié)全部讀出。過程很簡(jiǎn)單,先寫入命令,在得到相應(yīng)的回應(yīng)后,開始數(shù)據(jù)讀取。</p><p><b> 扇區(qū)讀的時(shí)序:</b></p><p> 在項(xiàng)目中,讀SD卡扇區(qū)的函數(shù)由</p><p> ReadMmcSector(unsigned long lba,
38、unsigned int Bytes,unsigned char *buffer),調(diào)用</p><p> WriteMmcSectorAddress(unsigned long sector)和 MMC_get_data(unsigned int Bytes,unsigned char *buffer) 實(shí)現(xiàn)。其中ReadMmcSector輸入的參數(shù)為SD卡的物理扇區(qū)號(hào)lba,要讀出的字節(jié)數(shù)Bytes,以及讀
39、出后的數(shù)據(jù)所存放的數(shù)組的首地址buffer。</p><p><b> 4)寫扇區(qū)</b></p><p> 扇區(qū)寫是SD卡驅(qū)動(dòng)的另一目的。每次扇區(qū)寫操作將向SD卡的某個(gè)扇區(qū)中寫入512個(gè)字節(jié)。過程與扇區(qū)讀相似,只是數(shù)據(jù)的方向相反與寫入命令不同而已。</p><p><b> 扇區(qū)寫的時(shí)序:</b></p>
40、;<p> 在項(xiàng)目中,寫SD卡的函數(shù)為SD_write_sector(unsigned long addr,unsigned char *Buffer)。輸入?yún)?shù)為SD卡的物理扇區(qū)號(hào)以及寫入SD卡指定扇區(qū)中的內(nèi)容的數(shù)組的首地址。</p><p> 4.2 12864液晶屏結(jié)構(gòu)及用法 </p><p> 4.2.1 12864液晶屏的硬件結(jié)構(gòu) </p>
41、<p> 12864是一種具有具有4位/8位并行,2線或3線串行多種接口方式。在本課設(shè)中使用了8位并行方式與MSP430單片機(jī)進(jìn)行鏈接。該液晶屏內(nèi)部含有國(guó)標(biāo)一級(jí),二級(jí)簡(jiǎn)體中文字庫(kù)的點(diǎn)陣圖形液晶顯示模塊,其顯示分辨率為128x64。其漢字的分辨率為16x16。其ASCii字符的分辨率為16x8。也就是說12864液晶屏總共可以顯示四行字符,每一行可以顯示8個(gè)漢字或16個(gè)英文字母。其8位串行狀態(tài)下引腳接口如下表所示:</
42、p><p> 4.2.2 12864內(nèi)部的數(shù)據(jù)緩存</p><p> 下面僅介紹課設(shè)中使用倒的兩個(gè)數(shù)據(jù)緩存:</p><p> 1、顯示RAM(DDRAM)</p><p> 顯示RAM提供64x2字節(jié)的空間,最多可以顯示4行每行8個(gè)漢字,或4行每行16個(gè)ASCii字符。只要直接將漢字或ASCii的編碼寫入DDRAM中,屏幕中就會(huì)出現(xiàn)相應(yīng)
43、的文字。屏幕上第一行到第四行所對(duì)應(yīng)的DDRAM中的地址分別為0x80-0x87,0x90-0x97,0x88-0x8f,0x98-0x9f。其中,每一個(gè)地址對(duì)應(yīng)屏幕上分辨率為16x16的一個(gè)區(qū)域。在其中可以顯示兩個(gè)ASCii字符,或一個(gè)漢字。要將文字寫入顯存并顯示在屏幕中指定的位置上,就必須先向12864芯片寫入指定位置的地址,然后再連續(xù)的寫入兩字節(jié)的數(shù)據(jù)。然后這兩字節(jié)的數(shù)據(jù)所對(duì)應(yīng)的文字就會(huì)顯示在地址指定位置的16x16的點(diǎn)陣區(qū)域內(nèi)。因
44、為漢字編碼為兩個(gè)字節(jié),而ASCii編碼為1一個(gè)字節(jié)。所以屏幕上指定位置的16x16的點(diǎn)陣區(qū)域可以顯示兩個(gè)英文字符或一個(gè)漢字。</p><p> 12864屏幕上的位置以及其在DDRAM中所對(duì)應(yīng)的地址如下圖所示。注意,其中每一個(gè)位置均表示一個(gè)16x16的區(qū)域。</p><p> 2、繪圖RAM(GDRAM)</p><p> 繪圖RAM中每一位的值用來控制128
45、64液晶屏上每一個(gè)像素點(diǎn)的亮滅。值為1,對(duì)應(yīng)的像素點(diǎn)就被點(diǎn)亮,值為0,對(duì)應(yīng)的像素點(diǎn)就被熄滅。在設(shè)定繪圖RAM的值時(shí),先寫入垂直地址,再寫入水平地址。之后向繪圖RAM里連續(xù)寫入兩字節(jié)的數(shù)據(jù)。這樣可以完成12864液晶屏上連續(xù)16個(gè)像素點(diǎn)控制。繪圖RAM的地址所控制的像素點(diǎn)在屏幕上的對(duì)應(yīng)位置如下圖所示:</p><p> 4.2.3 12864液晶屏的指令</p><p> 以下僅僅列出程
46、序中所使用的指令:</p><p> 4.2.4 12864液晶屏驅(qū)動(dòng)函數(shù)</p><p> 寫數(shù)據(jù)函數(shù):void LCD_write_data(unsigned char data) </p><p> 2、讀數(shù)據(jù)函數(shù):unsigned char LCD_read_data()</p><p> 3、寫命令函數(shù):void LCD_w
47、rite_com(unsigned char com) </p><p> 4、文本顯示模式初始化函數(shù):void LCD_init(void) </p><p> 其初始化過程為,先發(fā)送兩次命令0x30,設(shè)置顯示模式為基本指令集。然后發(fā)送命令</p><p> 0x0c,打開液晶屏屏幕顯示。最后發(fā)送命令0x01,清屏。</p><p>
48、 將一個(gè)長(zhǎng)度為17的字符串顯示在屏幕指定行的函數(shù):void DisplayCgrom(uchar addr,uchar </p><p><b> *hz)</b></p><p> 繪圖模式初始化函數(shù):void Graph_Init(void)</p><p> 初始化好繪圖模式之后,就可以利用繪圖模式來進(jìn)行俄羅斯方塊游戲。</
49、p><p> 點(diǎn)亮屏幕上指定位置像素的函數(shù):void Put_Pixel( unsigned char row, unsigned char </p><p><b> column )</b></p><p> 該函數(shù)先將指定位置像素所在的GDRAM中的連續(xù)16個(gè)像素點(diǎn)的值讀出來,改變需要改變的那個(gè)像素點(diǎn)的值,在將這16個(gè)像素點(diǎn)的值寫回G
50、DRAM的原位置中。</p><p> 清楚屏幕上指定位置像素點(diǎn)的函數(shù):void Clear_Pixel( unsigned char row, unsigned char </p><p><b> column )</b></p><p> 該函數(shù)的實(shí)現(xiàn)機(jī)制和上一個(gè)函數(shù)相同。</p><p> 4.3 FAT
51、32文件系統(tǒng)</p><p> 4.3.1 FAT32文件系統(tǒng)結(jié)構(gòu)簡(jiǎn)介</p><p> 課設(shè)中選用了FAT32文件系統(tǒng)來存儲(chǔ)文件。下面簡(jiǎn)介FAT32文件系統(tǒng)</p><p> 主引導(dǎo)扇區(qū)(MBR):主引導(dǎo)扇區(qū)位于整個(gè)SD卡物理扇區(qū)的第0號(hào)扇區(qū)。從中可以讀取引導(dǎo)代碼以及文件系統(tǒng)的起始位置。在課設(shè)中,僅從MBR中讀取整個(gè)SD卡大小以及文件系統(tǒng)的其實(shí)扇區(qū)位置。&l
52、t;/p><p> 隱藏扇區(qū)(Hidden Sectors):從MBR一直到文件系統(tǒng)的起始扇區(qū)之間的扇區(qū)被稱為隱藏扇區(qū)。</p><p> 保留扇區(qū)(Reserved Sectors):文件系統(tǒng)的起始扇區(qū)及其后的若干扇區(qū)被稱為保留扇區(qū)。保留扇區(qū)中的第一個(gè)扇區(qū),也就是文件系統(tǒng)的起始扇區(qū)是整個(gè)SD卡中最重要的部分。這個(gè)扇區(qū)又被稱為DBR。DBR記錄了文件系統(tǒng)的基本信息,其中包括:每扇區(qū)字節(jié)數(shù),
53、每簇扇區(qū)數(shù),保留扇區(qū)數(shù),F(xiàn)AT表個(gè)數(shù),文件系統(tǒng)總扇區(qū)數(shù),每個(gè)FAT表的扇區(qū)數(shù),根目錄的其實(shí)簇號(hào)(通常為2)及其他一些附加信息。課設(shè)中,系統(tǒng)初始化時(shí),就需要讀取DBR扇區(qū),并在內(nèi)存中記錄其中的信息。</p><p> FAT表:位于保留扇區(qū)后的是FAT表區(qū),它由兩個(gè)完全相同的FAT表組成。FAT表有兩個(gè)重要的作用,分別是描述簇的分配狀態(tài)以及表明文件或目錄的下一簇的簇號(hào)。在FAT表中,每個(gè)簇由4個(gè)字節(jié)的FAT表項(xiàng)來
54、進(jìn)行代表。FAT表從第0號(hào)簇開始進(jìn)行劃分,每四個(gè)字節(jié)代表一個(gè)簇。其中第0號(hào)簇和第1號(hào)通常情況下不使用。如果某個(gè)簇未被分配使用,則它所對(duì)應(yīng)的FAT表內(nèi)的FAT表項(xiàng)值為0。當(dāng)某個(gè)簇已經(jīng)被分配使用時(shí),則它所對(duì)應(yīng)的FAT表項(xiàng)內(nèi)的FAT表項(xiàng)值也就是在該文件中,該簇的下一個(gè)簇的簇號(hào)。若這個(gè)簇號(hào)為0x0fffffff,則表明當(dāng)前簇為該文件的最后一個(gè)簇。</p><p> 5)根目錄:FAT表后面就是數(shù)據(jù)區(qū)。數(shù)據(jù)區(qū)的開始是整個(gè)
55、文件系統(tǒng)的根目錄。它由目錄項(xiàng)組成,用來記錄每個(gè)文件的文件名,大小,起始簇號(hào),類型,創(chuàng)建時(shí)間等信息。</p><p> 6)目錄項(xiàng):每個(gè)目錄項(xiàng)占32個(gè)字節(jié),其結(jié)構(gòu)如下圖所示:</p><p> 7)長(zhǎng)文件名目錄項(xiàng):FAT32系統(tǒng)在為文件分配一個(gè)普通目錄項(xiàng)時(shí),還會(huì)為那些文件名長(zhǎng)度超過8字節(jié)的文件分配長(zhǎng)文件名目錄項(xiàng),長(zhǎng)文件名目錄項(xiàng)專門用來記錄它所對(duì)應(yīng)的文件的文件名。長(zhǎng)文件名目錄項(xiàng)通常順序排列
56、在短文件名目錄項(xiàng)的上面,其結(jié)構(gòu)如下圖所示:</p><p> 4.3.2 FAT32文件系統(tǒng)驅(qū)動(dòng)函數(shù)</p><p> 1、unsigned char strcmp(char* string1, char* string2)</p><p> 這個(gè)函數(shù)主要是比較兩個(gè)字符串是否是相同的,相同就返回1,不相同就返回0;</p><p>
57、簡(jiǎn)單來說就是比較后綴的。</p><p> 2、void ReadMBR()</p><p> 這個(gè)函數(shù)主要是讀出文件系統(tǒng)的起始扇區(qū)號(hào)</p><p> 3、void ReadDBR()</p><p> DBR中保存的是文件系統(tǒng)的基本信息,每簇扇區(qū)數(shù),隱藏扇區(qū)數(shù)(起始扇區(qū)數(shù)前面的那 </p><p> 些
58、沒有讀的,)FAT表的個(gè)數(shù),F(xiàn)AT表扇區(qū)數(shù),保留扇區(qū)數(shù)等</p><p> 4、void ReadSectorFromCluster(unsigned long ClusterNumber,unsigned char SectorOffset)</p><p> 這個(gè)函數(shù)作用的是找到扇區(qū)的位置,然后讀出512字節(jié)</p><p> 5、void GetFile
59、Number(void)</p><p> 這里面是包含這種文件,只要不是被刪除的文件或者是長(zhǎng)文件名(特征是他的第11字節(jié)是0X0F)則所找到的文件都會(huì)是filenumber+1,同時(shí)各種文件類型各自加1.。同時(shí)比較文件名是不是convert,或者是dirtable,若果是convert,那么長(zhǎng)文件名轉(zhuǎn)碼文件是存在的,置一,以長(zhǎng)文件名顯示;若是dirtable,那么是存在書簽的,則在下次讀取文本信息的時(shí)候就會(huì)調(diào)
60、用書簽信息,實(shí)現(xiàn)書簽功能。</p><p> 7、unsigned long GetAudioFile(unsigned long AudioFileIndex)</p><p> 8、unsigned long GetTextFile(unsigned long TextFileIndex)</p><p> 這兩個(gè)函數(shù)的原理是有些相同的,第一,先在根目錄中
61、找每一個(gè)目錄項(xiàng),如果說是音頻文件且他的音頻索引是audiofileindex,那么這就是要找到的音頻文件。同理第八個(gè)函數(shù)就是所要找到的文本文件。</p><p> 對(duì)于第七個(gè)函數(shù),首先,要記住來兩個(gè)信息,1,記錄當(dāng)前目錄項(xiàng)在整個(gè)根目錄所有目錄的偏置信息,2,記錄當(dāng)前目錄項(xiàng)在整個(gè)音頻文件目錄項(xiàng)中的偏置位置。然后返回當(dāng)前音頻文件的起始簇號(hào)。</p><p> 對(duì)于第八個(gè)函數(shù),只用記錄當(dāng)前目
62、錄項(xiàng)在真整個(gè)根目錄所有目錄項(xiàng)中的偏置信息,然后返回當(dāng)前文本文件的起始簇號(hào)。</p><p> 9、unsigned long FindNextCluster(unsigned long ThisCluster)</p><p> 10、 unsigned long FindPreviousCluster(unsigned long ThisCluster)</p><
63、;p> 第九第十就是找一個(gè)文件中當(dāng)前讀的簇的下一個(gè)簇或是上一個(gè)簇,然后返回簇號(hào)</p><p> 11、void GetDirItem(unsigned long DirItemIndex)</p><p> 在根目錄項(xiàng)中找到DIRitemindex這個(gè)目錄項(xiàng),將這32字節(jié)值保存在全局?jǐn)?shù)組DIRitem[32]中。這個(gè)函數(shù)主要是給7 8 這兩個(gè)函數(shù)調(diào)用用的,7,8用這個(gè)函數(shù)找到
64、所需要的目錄項(xiàng)</p><p> 12、void ReadSectorFromFile(unsigned long ThisCluster,unsigned long offset)</p><p> Long offset 是扇區(qū)在整個(gè)文件的偏置 根據(jù)這個(gè)偏置信息找到相應(yīng)的扇區(qū),讀取相應(yīng)的信息</p><p> 13、void WriteSectorTo
65、File(unsigned long ThisCluster,unsigned long offset)</p><p> 這個(gè)就是12函數(shù)的一個(gè)寫操作。。</p><p> 15、void InitFAT()</p><p> 初試化FAT就是調(diào)用read MBR和read DBR這兩個(gè)函數(shù)</p><p><b> 4.
66、5 整機(jī)結(jié)構(gòu)</b></p><p> 課設(shè)的整機(jī)結(jié)構(gòu)由MSP430F149開發(fā)板與12864液晶屏,VS1003解碼芯片,SD卡及SD卡插座組成。整機(jī)結(jié)構(gòu)圖如下所示:</p><p> 4.5.1 MSP430開發(fā)板與12864液晶屏的連接</p><p> 液晶接口原理圖圖下圖所示:</p><p> 液晶模塊端口分配
67、資源如下表所示:</p><p> 4.5.2 MSP430開發(fā)板與SD卡的連接</p><p> 在spi模式下,SD卡與單片機(jī)的連接原理圖如下圖所示:</p><p> MSP430有兩個(gè)USART端口,分別為P3.1-P3.3以及P5.1-P5.3。課設(shè)中選用P3.1-P3.3端口來連接SD卡。其中P3.1為SIMO端,用來與SD卡在SPI模式下的MOS
68、I端相連。P3.2為SOMI端,用來與SD卡在SPI模式下的MISO端相連。而P3.3為UCLK端,用來與SD卡在SPI模式下的SCK端相連。使用P3.0為片選信號(hào),并直接使用開發(fā)板上的3.3V電源向SD卡供電。</p><p> 5、在本實(shí)驗(yàn)中,我主要負(fù)責(zé)俄羅斯方塊游戲部分:</p><p><b> 俄羅斯方塊游戲功能</b></p><p
69、> 本課設(shè)利用12864液晶屏的繪圖功能實(shí)現(xiàn)了俄羅斯方塊游戲的功能。該游戲時(shí)先初始化繪圖模式,然后通過在主菜單函數(shù)Main_Menu中調(diào)用game()函數(shù)來實(shí)現(xiàn)的。</p><p> 俄羅斯方塊的基本流程如下圖所示:</p><p> 俄羅斯方塊功能的代碼分析如下:</p><p> 1、typedef struct</p><p&
70、gt;<b> {</b></p><p> unsigned char * box;</p><p> unsigned char cube;</p><p> unsigned char state;</p><p> signed char row;</p><p> signe
71、d char column;</p><p><b> }block</b></p><p> 這是方塊的數(shù)據(jù)結(jié)構(gòu)的定義,它又記錄方塊的形狀的數(shù)組box,方塊形狀的編號(hào)cube,方塊的旋轉(zhuǎn)方向state,以及方塊形狀數(shù)組第0行,第0列在整個(gè)游戲位圖中的行數(shù)row和列數(shù)column組成。</p><p> unsigned char cub
72、eMap[MAXROW][2]</p><p> 這是游戲的位圖,整個(gè)游戲界面就保存在這個(gè)味圖中。游戲界面為20行10列。因此MAXROW被定義為20,同時(shí)表示一行的兩個(gè)字節(jié)值用到了第一字節(jié)和第二字節(jié)的高2位。</p><p> unsigned char cube[]</p><p> 這是保存游戲每一個(gè)方塊形狀位圖的數(shù)組。每一個(gè)方塊的形狀位圖由連續(xù)四個(gè)字節(jié)
73、的低四位組成。每一個(gè)方塊具有4個(gè)方向,同一個(gè)方塊的四個(gè)方向的位圖被連續(xù)保存。因此只要給出方塊編號(hào)cube,再給出方塊的旋轉(zhuǎn)方向state,就可以通過4*cube+state找出該方塊的形狀位圖。</p><p> unsigned char asii[]</p><p> 這是保存游戲中顯示的英文字母和數(shù)字的位圖。每一個(gè)英文字母或數(shù)字由連續(xù)的5個(gè)字節(jié)組成位圖、</p>&
74、lt;p> 5、unsigned char downok = 0;</p><p> unsigned int score=0;</p><p> unsigned char speed=1;</p><p> unsigned long downtime = 100;</p><p> unsigned char next;
75、</p><p> 這是5個(gè)全局變量。Downok表示著方塊在下落過程中觸底,無(wú)法繼續(xù)下落。Score表示當(dāng)前游戲的得分,speed表示當(dāng)前游戲速度。Downtime表示方塊隔100個(gè)時(shí)鐘中斷,即1秒鐘就會(huì)強(qiáng)制一格。Next表示下一個(gè)方塊的形狀編號(hào)。</p><p> void Put_Double_Pixel(unsigned char x, unsigned char y)<
76、/p><p> 因?yàn)樵谟螒蛑?,每一個(gè)方塊的每一個(gè)小格用兩行兩列的點(diǎn)陣來表示,因此這個(gè)函數(shù)的作用就是在游戲界面相對(duì)位置的第x行,第y列顯示一個(gè)方格。</p><p> void Clear_Double_Pixel(unsigned char x, unsigned char y)</p><p> 這個(gè)函數(shù)和上一個(gè)函數(shù)作用相似,只是它的作用是消除一個(gè)方格。<
77、/p><p> void showChar(unsigned char num, unsigned char x, unsigned char y)</p><p> 將ascii數(shù)組中保存的字符位圖顯示在屏幕第x行,第y列開始的位置上。</p><p> void Game_Init()</p><p> 該函數(shù)先打印游戲界面的邊框,然
78、后顯示next,speed,score。</p><p> void Show_Speed_Score()</p><p> 這個(gè)函數(shù)會(huì)將當(dāng)前的得分和速度顯示在屏幕上。</p><p> void createCube(unsigned char num) </p><p> 當(dāng)downok被置1時(shí),調(diào)用這個(gè)函數(shù)來重新創(chuàng)建一個(gè)方塊。&
79、lt;/p><p> void showCubeMap(void)</p><p> 當(dāng)消掉行時(shí),調(diào)用這個(gè)函數(shù)來在屏幕上刷新位圖中的內(nèi)容。</p><p> void writeCubeToMap(void)</p><p> 每當(dāng)向左,向右,向下移動(dòng)方塊或旋轉(zhuǎn)方塊后,最后都通過該函數(shù)將移動(dòng)后的方塊顯示在屏幕上,及寫入位圖中。</p
80、><p> void clearCubeFromMap(void)</p><p> 每當(dāng)向左,向右,向下移動(dòng)方塊或旋轉(zhuǎn)方塊前,最后都通過該函數(shù)將移動(dòng)后的方塊在屏幕上清除,及在位圖中清除。</p><p> unsigned char checkBorder(void)</p><p> 檢測(cè)當(dāng)前的方塊是否碰到邊框。如果碰到左邊框,就不能
81、向左移動(dòng),如果碰到右邊框,就不能向右移動(dòng)。如果觸底,就觸發(fā)downok。</p><p> unsigned char checkClask(void)</p><p> 檢測(cè)當(dāng)前的方塊是否碰到其他方塊.</p><p> void checkMap(void)</p><p> 檢測(cè)位圖中是否有被填滿的行,如果有就消掉該行,并且加響
82、應(yīng)的分,并根據(jù)當(dāng)前分?jǐn)?shù)調(diào)整速度。</p><p> 18、void moveRight(void) void moveLeft(void) </p><p> void moveDown(void) void cubeRotation(void)</p><p> 這四個(gè)函數(shù)分別表示向左,向右,向下移動(dòng)方塊及旋轉(zhuǎn)方塊。在這些函數(shù)中,先移動(dòng)方塊,再檢
83、測(cè)是否碰到邊框或者碰到其他方塊。若沒碰到,就退出函數(shù)。若碰到了,就返回原來的位置。對(duì)于moveDown。若在該函數(shù)中檢測(cè)到了碰到邊框或碰到其他方塊,就會(huì)置位downok標(biāo)識(shí)。</p><p> void game(void)</p><p> 該函數(shù)的流程就如一開始給出的程序流程圖。</p><p><b> 4.10 按鍵檢測(cè)</b>&
84、lt;/p><p> 本課設(shè)中利用定時(shí)器中斷檢測(cè)按鍵。在定時(shí)器中斷函數(shù),添加了一個(gè)有限狀態(tài)機(jī),可以判別短按鍵和長(zhǎng)按鍵。當(dāng)發(fā)生短按鍵時(shí),置位短按鍵標(biāo)志spress_flag,并給出鍵值key。當(dāng)發(fā)生長(zhǎng)按鍵時(shí),置位長(zhǎng)按鍵標(biāo)志位lpress_flag。并給出按鍵值key。這樣做使得按鍵檢測(cè)非常靈敏,并且可以利用長(zhǎng)短按鍵的組合產(chǎn)生各種功能,節(jié)省按鍵數(shù)量。</p><p><b> 系統(tǒng)測(cè)
85、試</b></p><p><b> 游戲功能的測(cè)試</b></p><p> 游戲功能可以正常初始化,方塊可以正常下落,左移右移及旋轉(zhuǎn)??梢哉5那宄惶顫M的行。當(dāng)方塊觸頂時(shí),會(huì)游戲結(jié)束而退出游戲。</p><p> 下面給出游戲過程中的截圖:</p><p><b> 心得體會(huì)</
86、b></p><p> 從確定課設(shè)題目開始,我們組就在老師的催促下開始做實(shí)驗(yàn),當(dāng)時(shí)心里有點(diǎn)不以為然,覺得沒有必要那么早開始,后來真正實(shí)踐的時(shí)候,問題不斷的時(shí)候,才知道,要做一個(gè)像樣的東西出來是多么不容易,慶幸當(dāng)初沒有拖到最后才開始做。</p><p> 實(shí)驗(yàn)過程中,從搜集資料到選定器件,都是非??简?yàn)信息搜索能力的。最困難的是,在測(cè)試的時(shí)候,bug不斷,都是要</p>
87、<p><b> 參考文獻(xiàn)</b></p><p> 【1】MSP430x1xx User Guide</p><p> 【2】12864液晶屏中文資料</p><p> 【3】FAT32文件系統(tǒng)詳解</p><p> 【4】SD卡在單片機(jī)上的應(yīng)用</p><p> 【5】
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)---基于web的電子書店購(gòu)物系統(tǒng)
- 翰林II型閱讀不耗電電子書硬件設(shè)計(jì).pdf
- 閱讀不耗電電子書硬件系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).pdf
- 課程設(shè)計(jì)報(bào)告--- 簡(jiǎn)易電子琴
- 電子書城畢業(yè)設(shè)計(jì)
- 硬件電子琴課程設(shè)計(jì)報(bào)告
- 電子書說明.txt
- 電子書出版策略
- dxp課程設(shè)計(jì)報(bào)告---簡(jiǎn)易電子鐘設(shè)計(jì)
- 電子書包使用現(xiàn)狀的調(diào)研報(bào)告
- 畢業(yè)設(shè)計(jì)-電子書店系統(tǒng)
- 兒童電子書版式設(shè)計(jì)研究.pdf
- 玉米栽培學(xué)電子書
- 美的集團(tuán)介紹電子書
- fpga課程設(shè)計(jì)報(bào)告--簡(jiǎn)易電子琴的設(shè)計(jì)
- 簡(jiǎn)易電子琴課程設(shè)計(jì)
- 簡(jiǎn)易電子琴課程設(shè)計(jì)
- 簡(jiǎn)易電子琴課程設(shè)計(jì)
- 電子書包使用現(xiàn)狀的調(diào)研報(bào)告.pdf
- 電子書包論文電子書包現(xiàn)狀與發(fā)展中面臨問題
評(píng)論
0/150
提交評(píng)論