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