51單片機畢業(yè)論文---基于單片機的進制換算_第1頁
已閱讀1頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  畢 業(yè) 論 文</b></p><p>  基于單片機的進制換算</p><p><b>  2012年6月5日</b></p><p><b>  目錄</b></p><p><b>  摘要1</b></p>

2、;<p><b>  緒論2</b></p><p><b>  課題背景2</b></p><p><b>  課題意義2</b></p><p><b>  程序擴展2</b></p><p><b>  本章小節(jié)2&

3、lt;/b></p><p>  第一章 系統(tǒng)功能及操作3</p><p>  1.1系統(tǒng)功能的確定3</p><p>  1.2 基本功能9</p><p>  1.3本章小結10</p><p>  第二章 系統(tǒng)模塊介紹11</p><p>  2.1 主控模塊11<

4、/p><p>  2. 2 引腳說明11</p><p>  2.3 主控模塊設計13</p><p>  2.3.1 電源電路模塊設計13</p><p>  2.3.2 時鐘電路模塊設計14</p><p>  2.3.3 復位電路模塊設計14</p><p>  2.4 LCD顯示

5、模塊15</p><p>  2. 5 按鍵模塊17</p><p>  第三章 系統(tǒng)硬件設計—實驗板介紹18</p><p>  3.1 硬件總圖18</p><p>  3.2主控硬件模塊19</p><p>  3.3按鍵硬件模塊化20</p><p>  3.4 LCD顯示硬

6、件模塊化21</p><p>  3.5本章小結21</p><p>  第四章 系統(tǒng)軟件設計22</p><p>  4.1數據單元分配22</p><p>  4.2主程序設計流程圖24</p><p>  4.3程序說明25</p><p>  4.3.1包含數據庫25<

7、;/p><p>  4.3.2 程序初始化25</p><p>  4.3.3 字符串顯示25</p><p>  4.3.4 實現(xiàn)計算設定25</p><p>  4.4本章小結26</p><p>  第五章 系統(tǒng)調試27</p><p>  5.1硬件調試27</p>

8、<p>  5.2軟件調試28</p><p>  5.3本章小結28</p><p><b>  結束語29</b></p><p><b>  致 謝30</b></p><p>  附錄:程序清單31</p><p><b>  參考文獻

9、37</b></p><p><b>  摘 要</b></p><p>  本次設計是基于單片機的進制換算,在設計中需要進行進制間的轉換。所需要MCS-51單片機、LCD1602型液晶顯示。在此設計中主控模塊我們選要的是AT89S52芯片。AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。使用Atmel公司高

10、密度非易失性存儲器技術制造,與工業(yè)80C51 產品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。</p><p>  設計當中顯示采用LCD液晶顯示,其特點是:1、顯示質量高2、沒有電磁輻射 3、可視面積大 4、應用范圍廣 5、畫面效果好 6、數字式接

11、口 7、“身材”勻稱小巧 8、功率消耗小等。點陣字符型LCD是專門用于顯示數字、字母、圖形符號及少量自定義符號的液晶顯示器。這類顯示器把LCD控制器、點陣驅動器、字符存儲器、顯示體及少量的阻容元件等集成為一個液晶顯示模塊。鑒于字符型液晶顯示模塊目前在國際上已經規(guī)范化,其電特性及接口特性是統(tǒng)一的。</p><p>  所以在本設計中采用AT89S52主控、LCD1602顯示。不僅功能能實現(xiàn)而且經濟實惠。</

12、p><p>  關鍵詞:單片機 AT89S52 進制換算 LCD液晶顯示 </p><p><b>  緒 論</b></p><p><b>  課題背景</b></p><p>  本文討論的單片機多功能時鐘系統(tǒng)的核心是目前應用極為廣泛的51系列單片機,配置了外圍設備,構成了一個可編

13、程的計時定時系統(tǒng),具有體積小,可靠性高,功能多等特點。不僅能滿足所需要求而且還有很多功能可供擴展,有著廣泛的應用領域。</p><p>  本課題是基于單片機的進制間換算,進制間換算比較復雜,有時需要快速計算二,八,十,十六之間的轉換。為了轉換快速所以專門制作了一種計算器。專門計算進制間的相互換算。當輸入相應的進制數是能夠轉換成自己想要的進制數。是一種快捷方便的設計。</p><p>&l

14、t;b>  課題意義</b></p><p>  通過用單片機最小系統(tǒng)開發(fā)一種進制見換算計算器,能夠以按鍵輸入0~9(十進制),0~G(十六進制)0~7(八進制),0~1(二進制)。學習了我們所學的按鍵掃描和LCD掃描。通過單片機中的程序計算進制間的換算,計算結果通過LCD顯示出來。實際意義是一種新型計算機,快速計算進制間的換算。在此設計中不僅得到進制換算的一種工具,同時通過親自焊接最小系統(tǒng),得

15、到了完全的最小系統(tǒng)。并且能夠完成程序的實現(xiàn),在此也是件非常值得高興之事。</p><p><b>  程序擴展</b></p><p>  在本程序中只涉及到了十進制轉二進制、八進制、十六進制。在以后的運行中可以開發(fā)成進制相互轉換,包括二轉八、二轉十、二轉十六、八轉二、八轉十、八轉十六等。同樣以AT89S52型開發(fā),通過修改程序,增加硬件上的按鍵,增加接線口等。既可以

16、完成設計的擴展。</p><p><b>  本章小節(jié)</b></p><p>  本章主要介紹了課題背景、設計任務和課題意義,對單片機的優(yōu)點及結構作了簡要敘述,也對本系統(tǒng)的應用及概況進行了說明。</p><p>  第一章 系統(tǒng)功能及操作</p><p>  1.1系統(tǒng)功能的確定</p><p>

17、;  進制間的轉換:1. 十 -----> 二</p><p>  一個十進制,比如:6,將它轉換成二進制數。 十進制數轉換成二進制數,是連續(xù)除2的過程: 把要轉換的數,除以2,得到商和余數, 將商繼續(xù)除以2,直到商為0。最后將所有余數倒序排列,得到數就是轉換結果。 </p><p>  比如要轉換6為二進制數。 “把要轉換的數,除以2,得到商和余數”。 </p>&l

18、t;p><b>  那么: </b></p><p>  圖1-1 十轉二示意圖</p><p>  要轉換的數是6, 6 ÷ 2,得到商是3,余數是0。 “將商繼續(xù)除以2,直到商為0……” 現(xiàn)在商是3,不是0,所以繼續(xù)除以2。 那就: 3 ÷ 2, 得到商是1,余數是1。 “將商繼續(xù)除以2,直到商為0……” 現(xiàn)在商是1,不是0,所以繼續(xù)除以

19、2。 那就: 1 ÷ 2, 得到商是0,余數是1 “將商繼續(xù)除以2,直到商為0……最后將所有余數倒序排列” ?,F(xiàn)在商已經是0。 三次計算依次得到余數分別是:0、1、1,將所有余數倒序排列,就是:110。</p><p>  6轉換成二進制,結果是110。</p><p><b>  表1 轉換方式</b></p><p> ?。ㄔ谟?/p>

20、算機中,÷用 / 來表示) </p><p>  2. 二 ----> 十</p><p>  二進制數轉換為十進制數 :二進制數第0位的權值是2的0次方,第1位的權值是2的1次方…… 所以,設有一個二進制數:0110 0100,轉換為10進制為: </p><p><b>  下面是豎式: </b></p>&l

21、t;p>  0110 0100 換算成 十進制 </p><p>  " ^ " 為次方 </p><p>  第0位 0 * 2^0 = 0 </p><p>  第1位 0 * 2^1 = 0 </p><p>  第2位 1 * 2^2 = 4 </p><p>  第3位 0 * 2^

22、3 = 0 </p><p>  第4位 0 * 2^4 = 0 </p><p>  第5位 1 * 2^5 = 32 </p><p>  第6位 1 * 2^6 = 64 </p><p>  第7位 0 * 2^7 = 0 + </p><p>  公式:第N位10^(N-1) </p><

23、p>  --------------------------- </p><p><b>  100 </b></p><p><b>  用橫式計算為: </b></p><p>  0 * 2 ^ 0 + 0 * 2 ^ 1 + 1 * 2 ^ 2 + 0 * 2 ^ 3 + 0 * 2 ^ 4 + 1 * 2

24、^ 5 + 1 * 2 ^ 6 + 0 * 2 ^ 7 = 100 </p><p>  0乘以多少都是0,所以我們也可以直接跳過值為0的位: </p><p>  1 * 2 ^ 2 + 1 * 2 ^ 5 + 1 * 2 ^ 6 = 100 </p><p>  3. 十 ----> 八</p><p>  10進制數轉換成8進制的

25、方法,和轉換為2進制的方法類似,唯一變化:除數由2變成8。 </p><p>  將十進制數120轉換成八進制數: </p><p><b>  用表格表1示:</b></p><p><b>  表2 轉換方式</b></p><p>  120轉換為8進制,結果為:170。 </p>

26、;<p>  4. 八 ----> 十</p><p>  八進制就是逢8進1。 八進制數采用 0~7這八數來表達一個數。 </p><p>  八進制數第0位的權值為8的0次方,第1位權值為8的1次方,第2位權值為8的2次方…… 所以,設有一個八進制數:1507,轉換為十進制為: </p><p><b>  用豎式表示: </

27、b></p><p>  1507換算成十進制。 </p><p>  第0位 7 * 8^0 = 7 </p><p>  第1位 0 * 8^1 = 0 </p><p>  第2位 5 * 8^2 = 320 </p><p>  第3位 1 * 8^3 = 512 </p><p>

28、;  -------------------------- </p><p><b>  839 </b></p><p>  同樣,也可以用橫式直接計算: 7 * 8^0 + 0 * 8^1 + 5 * 8^2 + 1 * 8^3 = 839 </p><p>  結果是,八進制數 1507 轉換成十進制數為 839 </p>

29、<p>  5. 十 ----> 十六</p><p>  10進制數轉換成16進制的方法,和轉換為2進制的方法類似,唯一變化:除數由2變成16。 同樣是120,轉換成16進制則為,如表2:</p><p><b>  表3 轉換方式</b></p><p>  120轉換為16進制,結果為:78。 </p>&

30、lt;p>  6. 十六----> 十</p><p>  16進制就是逢16進1,但我們只有0~9這十個數字,所以我們用A,B,C,D,E,F(xiàn)這六個字母來分別表示10,11,12,13,14,15。字母不區(qū)分大小寫。 </p><p>  十六進制數的第0位的權值為16的0次方,第1位的權值為16的1次方,第2位的權值為16的2次方…… </p><p&g

31、t;  所以,在第N(N從0開始)位上,如果是是數 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小為 X * 16的N次方。 </p><p>  假設有一個十六進數 2AF5, 那么如何換算成10進制呢? </p><p><b>  用豎式計算: </b></p><p>  2AF5換算成10進制: </p>

32、<p>  第0位: 5 * 16^0 = 5 </p><p>  第1位: F * 16^1 = 240 </p><p>  第2位: A * 16^2 = 2560 </p><p>  第3位: 2 * 16^3 = 8192 + </p><p>  ----------------------------------

33、--- </p><p><b>  10997 </b></p><p>  直接計算就是: 5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997 </p><p>  (在上面的計算中,A表示10,而F表示15) </p><p>  現(xiàn)在可以看出,所有進制換算成10進制

34、,關鍵在于各自的權值不同。 十進數 1234可以給這么一個算式: 1234 = 1 * 10^3 + 2 * 10^2 + 3 * 10^1 + 4 * 10^0 </p><p>  7. 二 ----> 八</p><p>  (11001.101)(二) </p><p>  整數部分: 從后往前每三位一組,缺位處用0填補,然后按十進制方法進行轉化, 則

35、有: </p><p><b>  001=1 </b></p><p><b>  011=3 </b></p><p>  然后將結果按從下往上的順序書寫就是:31,那么這個31就是二進制11001的八進制形式 </p><p>  小數部分: 從前往后每三位一組,缺位處用0填補,然后按十進制方

36、法進行轉化, 則有: 101=5 </p><p>  然后將結果部分按從上往下的順序書寫就是:5,那么這個5就是二進制0.101的八進制形式 所以:(11001.101)(二)=(31.5)(八) </p><p>  8. 八 ----> 二</p><p> ?。?1.5)(八) </p><p>  整數部分:從后往前每一位按十

37、進制轉化方式轉化為三位二進制數,缺位處用0補充 則有: </p><p>  1---->1---->001 </p><p><b>  3---->11 </b></p><p>  然后將結果按從下往上的順序書寫就是:11001,那么這個11001就是八進制31的二進制形式 ,小數部分:從前往后每一位按十進制轉化方式轉化

38、為三位二進制數,缺位處用0補充 則有: </p><p>  5---->101 </p><p>  然后將結果按從下往上的順序書寫就是:101,那么這個101就是八進制5的二進制形式 </p><p>  所以:(31.5)(八)=(11001.101)(二) </p><p>  9. 十六 ----> 二 ;二 ----&

39、gt; 十六</p><p>  二進制和十六進制的互相轉換。直接就能轉換為十六進制數,反之亦然。 </p><p>  首先一個二進制數:如:1111, </p><p>  計算:1 * 2^0 + 1 * 2^1 + 1 * 2^2 + 1 * 2^3 = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15。 </p><

40、;p>  由于1111才4位,所以必須直接記住它每一位的權值,并且是從高位往低位記,:8、4、2、1。即,最高位的權值為2^3 = 8,然后依次是 2^2 = 4,2^1=2, 2^0 = 1。 對于任意一個4位的二進制數,都可以很快算出它對應的10進制值。 </p><p>  下列列出四位二進制數 xxxx 所有可能的值 </p><p>  僅4位的2進制數 快速計算方法 十進

41、制值 十六進值 </p><p>  1111 = 8 + 4 + 2 + 1 = 15 F </p><p>  1110 = 8 + 4 + 2 + 0 = 14 E </p><p>  1101 = 8 + 4 + 0 + 1 = 13 D </p><p>  1100 = 8 + 4 + 0 + 0 = 12 C </p&g

42、t;<p>  1011 = 8 + 0 + 2+ 1 = 11 B </p><p>  1010 = 8 + 0 + 2 + 0 = 10 A </p><p>  1001 = 8 + 0 + 0 + 1 = 9 9 </p><p><b>  .... </b></p><p>  0001 =

43、0 + 0 + 0 + 1 = 1 1 </p><p>  0000 = 0 + 0 + 0 + 0 = 0 0 </p><p>  二進制數要轉換為十六進制,就是以4位一段,分別轉換為十六進制。 </p><p>  如(上行為二制數,下面為對應的十六進制): </p><p>  1111 1101 , 1010 0101 , 100

44、1 1011 </p><p>  F D , A 5 , 9 B </p><p>  反過來,當看到 FD時,如何迅速將它轉換為二進制數 ,先轉換F: F,需知道是15,然后15用8421湊,應該是8 + 4 + 2 + 1,所以四位全為1 :1111。 接著轉換 D: 看到D,知道它是13,13用8421湊,應該是:8 + 4 + 1,即:1101。 所以,FD轉換為二進制數,為:

45、1111 1101 </p><p>  由于十六進制轉換成二進制相當直接,所以,需要將一個十進制數轉換成2進制數時,也可以先轉換成16進制,然后再轉換成2進制。 比如,十進制數 1234轉換成二制數,如果要一直除以2,直接得到2進制數,需要計算較多次數。所以可以先除以16,得到16進制數。如表4: </p><p><b>  表4 轉換方式</b></p&

46、gt;<p>  結果16進制為: 0x4D2 </p><p>  然后可直接寫出0x4D2的二進制形式: 0100 1101 0010。 其中對映關系為: </p><p>  0100 -- 4 </p><p>  1101 -- D </p><p>  0010 -- 2 </p><p> 

47、 同樣,如果一個二進制數很長,需要將它轉換成10進制數時,除了前面學過的方法是,還可以先將這個二進制轉換成16進制,然后再轉換為10進制。 </p><p>  下面舉例一個int類型的二進制數: 01101101 11100101 10101111 00011011 </p><p>  按四位一組轉換為16進制: 6D E5 AF 1B 。再轉換為10進制:6*16^7+D*16^6+

48、E*16^5+5*16^4+A*16^3+F*16^2+1*16^1+B*16^0=1,843,769,115 </p><p><b>  1.2 基本功能</b></p><p>  在本設計中能夠實現(xiàn)按鍵輸入、軟件的數據處理、輸出顯示的基本功能。</p><p>  1、按鍵輸入:在硬件中有案件模塊。上面有4*4的按鍵矩陣。輸入的數據包括

49、0~9數字、確認、取消等鍵功能。當按下相應的數字或功能鍵時,信號會傳入單片機,單片機會做出相應的反應。再由顯示屏顯示出結果。</p><p>  2、數據處理:通過按鍵的輸入,數據傳入芯片。芯片會按照輸入的程序運行方式處理數據。最后將計算結果輸出給顯示屏。</p><p>  3、輸出顯示:通過按鍵的輸入軟件的處理。會將輸入的數字或者軟件計算的數據按照規(guī)定的方式顯示在相應的位置。</

50、p><p><b>  下圖為系統(tǒng)結構圖:</b></p><p>  圖1-2 系統(tǒng)結構框圖</p><p>  4、操作說明:當按下SB1~SB10中的鍵就輸入相應的數字,在LCD上也會顯示相應的數。當需轉換進制時先決定你輸入的數是那種類型,在此只涉及到了十進制轉換成二進制、十六進制。開發(fā)方向可以向二進制轉換成十進制、八進制、十六進制。八進制轉

51、換成二進制、十進制、十六進制。現(xiàn)在只需輸入相應的十進制數。數字輸入完后,按下轉換的“確認”鍵。則輸入的十進制就轉換成二進制和八進制。</p><p><b>  1.3本章小結</b></p><p>  本章主要介紹了本次設計的方向,以及確定轉換方式和轉換流程。同時也敘述了操作方式和得出的結果。</p><p>  第二章 系統(tǒng)模塊介紹<

52、;/p><p><b>  2.1 主控模塊</b></p><p>  在本次設計中使用AT89S52芯片:</p><p>  AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。使用Atmel公司高密度非易失性存儲器技術制造,與工業(yè)80C51 產品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)

53、可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。</p><p>  圖 2-1 AT89S52芯片以及引腳結構圖</p><p><b>  2. 2 引腳說明</b></p><p>  MCS單片機都采用40引腳的雙列直插封裝方式

54、。如圖為引腳排列圖,圖中引腳可以分為以下四類:電源類引腳2個、時鐘類引腳2個、并行I/O類引腳32個、控制類引腳4個。</p><p><b>  電源類引腳:</b></p><p>  Vss 20號引腳Vss為電源接地端。</p><p> ?、?Vcc 40號引腳Vcc是芯片電源的輸入端,接+5V電源。</p>

55、<p><b>  時鐘類引腳:</b></p><p> ?、?XTAL1內部振蕩電路反相放大器的輸入端,是外接晶體的一個引腳。當采用外部振蕩器時,此引腳接地。</p><p>  ② XTAL2內部振蕩電路反相放大器的輸出端,是外接晶體的另一端。當采用外部振蕩器時,此引腳接外部振蕩源。 </p><p><b&g

56、t;  控制類引腳:</b></p><p> ?、?RST/VPD當振蕩器運行時,在此引腳上出現(xiàn)兩個機器周期的高電平(由低到高跳變),將使單片機復位。</p><p> ?、?ALE 正常操作時為ALE功能(允許地址鎖存)提供把地址的低字節(jié)鎖存到外部鎖存器。 </p><p> ?、跴SEN 外部程序存儲器讀選通信號輸出端,在從外部程序存儲取指令(或

57、數據)期間,在每個機器周期內兩次有效。同樣可以驅動八LSTTL輸入。</p><p> ?、?/Vpp 為內部程序存儲器和外部程序存儲器的選擇端。當/Vpp為</p><p>  高電平時,訪 問內部程序存儲器;當/Vpp 為低電平時,則訪問外部程序存儲器。</p><p><b>  并行I/O類引腳:</b></p><

58、p> ?、?P0口(P0.0 - P0.7)</p><p>  P0口(P0.0 - P0.7)是一個8位漏極開路型雙向I/O口,在訪問外部存儲 器時,它是分時傳送的低字節(jié)地址和數據總線,P0口能以吸收電流的方式驅動八個LSTTL負載。</p><p>  ② P1口(P1.0 - P1.7)</p><p>  P1口(P1.0 - P1.7)是一個帶有內

59、部提升電阻的8位準雙向I/O口。能驅動(吸收或輸出電流)四個LSTTL負載。。</p><p>  ③ P2口(P2.0 - P2.7)</p><p>  P2口(P2.0 - P2.7)是一個帶有內部提升電阻的8位準雙向I/O口,在訪問外部存儲器時,它輸出高8位地址。P2口可以驅動(吸收或輸出電流)四個LSTTL負載。</p><p>  ④ P3口(P3.0

60、- P3.7)</p><p>  P3口(P3.0 - P3.7)是一個帶有內部提升電阻的8位準雙向I/O口。</p><p>  2.3 主控模塊設計</p><p>  電源、時鐘信號以及復位電路是單片機工作的基本條件,缺一不可。單片機基本系統(tǒng)——包括:電源電路、時鐘電路、復位電路。</p><p><b>  圖2-2 主控

61、電路</b></p><p>  2.3.1 電源電路模塊設計</p><p>  電源模塊:提供+5V電源,系統(tǒng)板為從USB接口獲?。?V電源,只要用相應配套的USB線從電腦主機獲?。?V直流電源。</p><p>  2.3.2 時鐘電路模塊設計</p><p>  單片機的時鐘信號用來為單片機芯片內部各種微操作提供時間基準。

62、</p><p>  MCS-51的時鐘信號產生方式:</p><p> ?、?內部時鐘方式,利用芯片內部的振蕩電路;</p><p> ?、?外部時鐘方式。</p><p>  圖 2-3 時鐘電路</p><p>  由于AT89S52單片機芯片內有時鐘振蕩電路,因此本項目中采用內部時鐘方式。只要在單片機的XT

63、AL1和XTAL2引腳外接石英晶體和微調電容,就構成了自激振蕩器并在單片機內部產生時鐘脈沖信號,具體電路設計如圖所示。圖中電容C1和C2的作用是穩(wěn)定頻率和快速起振,電容置在5~30pF,在此選擇30pF;晶振X1的振蕩頻率范圍在1.2~12MHz間選擇,本項目中選擇12MHz。</p><p>  時鐘電路為單片機產生時鐘脈沖序列,作為單片機工作的時間基準,典型的晶體振蕩頻率為12MHz。</p>

64、<p>  2.3.3 復位電路模塊設計</p><p>  圖 2-4 復位電路</p><p>  復位電路使單片機或系統(tǒng)中的其他部件處于某種確定的狀態(tài)。當在51單片機的RST引腳引入高電平并保持2個機器周期,單片機內部就執(zhí)行復位操作。</p><p><b>  復位操作基本形式:</b></p><p>

65、;<b>  上電復位;</b></p><p> ?、?另一種是按鍵復位。</p><p>  2.4 LCD顯示模塊</p><p>  圖 2-5 LCD引腳圖</p><p>  LCD1602型液晶顯示的外部接口信號有16條,與AT89S52芯片的接口有8條數據線DB0~DB7、3條控制線RS、RW、E,見表

66、5:</p><p>  表5 LCD液晶引腳功能表</p><p>  1602LCD 顯示模塊可以與AT89S52單片機直接接口,1602LCD的8位雙向數據線D0—D7連接P0口的P0.0—P0.7,1602LCD使能信號E連接P2口線的P2.2;1602LCD讀/寫選擇信號R/W連接P2口線的P2.1,當P2.1=0為寫數據信號,當P2.1=1為讀數據信號;1602LCD數據/命

67、令選擇信號RS連接P2口線的P2.0,當P2.0=0為命令信號;當P2.0=1為數據信號;1602LCD的VCC引腳接+5電源,引腳GND接地。見圖2-6:</p><p>  圖 2-6 LCD顯示模塊與單片機的接口電路原理圖</p><p><b>  2. 5 按鍵模塊</b></p><p>  AT89S52單片機的P1口用作鍵盤I

68、/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位。列線P1.0—P1.3分別接有4個上拉電阻到正電源+5V,并把列線P1.0—P1.3設置為輸入線,行線P1.4—P1.7設置為輸出線。4根行線和4根列線形成16個相交點。見圖2-7:</p><p>  圖2-7 鍵盤模塊與單片機的接口電路原理圖</p><p>  列線通過電阻接正電源,并將行線所接的單片機的I/O口作為

69、輸出端,而列線所接的I/O口則作為輸入端。這樣,當按鍵沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。</p><p>  圖 2-8 系統(tǒng)整體原理圖</p><p><b>  2.6 本章小結</b></p><p>  本章主要介紹了主

70、控模塊、按鍵模塊、顯示模塊和復位電路、時鐘電路。同時也說明了各個模塊的引腳的連接方法和引腳說明。</p><p>  第三章 系統(tǒng)硬件設計—實驗板介紹</p><p><b>  3.1 硬件總圖</b></p><p><b>  圖3-1硬件總圖</b></p><p>  通過焊接得到如圖的硬

71、件圖,按鍵是4*4鍵陣,LCD為1602A型</p><p><b>  3.2主控硬件模塊</b></p><p><b>  圖 3-2主控硬件</b></p><p>  主控模塊包括時鐘電路、復位電路、濾波電路、按鍵插排、LCD插排等。</p><p>  3.3按鍵硬件模塊化</p&

72、gt;<p><b>  圖3-3按鍵實物圖</b></p><p>  本電路采用4輸入與門用于產生鍵盤中斷,其輸入端與各行線相連,輸出端接至89s52的外部中斷輸入端。當有鍵閉合時,使某條列線為低電平,如果這條列線上沒有閉合鍵,則各行線的狀態(tài)都為高電平;如果列線上有鍵閉合,則相應的那條行線即變?yōu)榈碗娖?。于是就可以根據行線號與列線號計算出閉合鍵的鍵碼。</p>

73、<p>  3.4 LCD顯示硬件模塊化</p><p>  圖3-4 LCD顯示</p><p>  本設計采用1602型LCD,在初始狀態(tài)下LCD顯示hix: dec: bit:當鍵盤有輸入時dec:會顯示輸入相應的數字。當按鍵輸入有“確定”鍵時LCD上的hix:和bit:將會出現(xiàn)相應轉換的數字。</p><p><b>  3.5本章小結&

74、lt;/b></p><p>  本章主要介紹硬件。經過自己的努力焊接出來以上的硬件圖,并能夠調試成功,完成本次設計任務。不僅在其中獲得了知識,而且也使自己更加充實。在過程中雖然遇到了不少的阻礙,但自己依然克服困難完成了本次硬件設計、焊接。增強了信心也考驗了自己的個人能力。</p><p>  第四章 系統(tǒng)軟件設計</p><p><b>  4.1

75、數據單元分配</b></p><p><b>  表6 數據分配表</b></p><p><b>  LCD控制命令集</b></p><p>  表7 LCD指令表</p><p><b>  按鍵數據分配表</b></p><p> 

76、 表8 按鍵數據分配表</p><p>  4.2主程序設計流程圖</p><p>  圖 4-1 程序流程圖</p><p><b>  4.3程序說明</b></p><p>  在本設計中程序采用C語言編程。涉及到數學計算、數學公式以及數學符號。</p><p>  4.3.1包含數據庫&

77、lt;/p><p>  C語言編程涉及到數據庫的包含。在本程序中包含:</p><p>  #include <REG51.H> </p><p>  #include <math.H></p><p>  4.3.2 程序初始化</p><p>  程序初始化包括AT89S52的初始化、液晶

78、顯示屏初始化和清屏。芯片初始化包括:I\O輸入 sbit dec=P1^1; 時能端口sbit b=P1^2。液晶初始化包括:設置工作方式、顯示狀態(tài)設置、輸入工作方式、設置地址、清屏。(xzl(0x38);xzl(0x0c);xzl(0x06);xzl(0x80);xzl(0x01)</p><p>  4.3.3 字符串顯示</p><p>  在初始時LCD會顯示字符串hex、dec、

79、bit。(uc code nn[]={"hex:"};uc code qq[]={"dec:"};uc code wn[]={"bit:"};)。在輸入字符包括:1~9~f({uc code mm[]="0123456789ABCDEF";)</p><p>  4.3.4 實現(xiàn)計算設定</p><p>  在

80、本設計中將要涉及數學乘除法運算:十進制數轉換成二進制數,是連續(xù)除2的過程:把要轉換的數,除以2,得到商和余數, 將商繼續(xù)除以2,直到商為0。最后將所有余數倒序排列,得到數就是轉換結果。十進制數轉換成十六進制,同十進制轉換成二進制類似。(erjz[i]=m%2; m=m/2;“%”表示除法取余數,“/”表示除法。)</p><p><b>  4.4本章小結</b></p>&l

81、t;p>  通過畫程序流程圖,確定程序書寫的大體方向。再通過查閱資料、請教老師等之后書寫各個模塊的程序,在未完成所有程序時,可以用protuse仿真軟件試驗各個模塊程序是否正確。當完成程序書寫同樣用protuse仿真。首先需要建仿真硬件圖。照程序書寫的使能端和I\O口連接仿真電路圖。后寫入程序查看是否是自己想要的結果,如果不是。檢查程序書寫和仿真電路圖,確認無誤則程序書寫成功。硬件的焊接也可以仿照仿真電路圖焊接。能夠保證焊接無誤。

82、確定硬件和程序無誤時,可以通過燒寫軟件寫入單片機,并連接好硬件。接通電源,調試硬件的到相應效果即可。</p><p><b>  第五章 系統(tǒng)調試</b></p><p><b>  5.1硬件調試</b></p><p>  硬件焊接以模塊化的方法焊接,便于排錯。模塊分為主控模塊、按鍵模塊、LCD顯示模塊。各個模塊風別焊

83、接在三塊電路板中,用排線連接起來。在調試時首先在芯片上燒寫有關LCD顯示的程序,將主控模塊和LCD顯示模塊用排線連接好并接上電源。查看LCD顯示是不是程序中應有的顯示。如果是,則就說明主控模塊和LCD模塊都調試成功,如果不是或者不顯示著就要仔細排查焊接線路和排線連接線路。接著將按鍵模塊用排線連接與主控模塊連接,重新燒寫有關按鍵掃描并通過LCD顯示出相應的字符的程序。接通電源,查看按鍵是否能夠輸入相應字符或者按鍵是否靈敏等,在LCD上觀看

84、顯示是否正確。如果正確則調試成功。如果不正確則繼續(xù)調試。</p><p>  圖 5-1 LCD和按鍵調試圖</p><p><b>  5.2軟件調試</b></p><p>  軟件書寫前畫出程序流程圖,確定程序大體方向。并通過查閱教材、圖書書籍、咨詢老師、朋友等方式尋求幫助。也可以參照《單片機應用技術及項目化訓練》一書書寫。書中有關于案

85、件掃描程序、LCD顯示程序等,可以參考。在書寫程序完成時,可通過portues仿真軟件仿真。這樣可以查看程序是否正確,不正確則繼續(xù)修改。正確則可以燒寫進焊接的硬件中去,再次調試直至顯示、按鍵都能運行程序運行正確為止。</p><p>  圖 5-2 上圖為protues仿真</p><p><b>  5.3本章小結</b></p><p> 

86、 本章主要介紹了硬件系統(tǒng)和軟件系統(tǒng)的調試。硬件調試主要通過輸入顯示程序和按鍵掃描程序,再接通電源查看顯示是否合符要求。軟件調試通過使用portues仿真軟件檢查程序是否正確和能否取得相應效果。</p><p><b>  結束語</b></p><p>  在本設計中,通過自己辛勤的焊接自己出色的完成了硬件的焊接。并能夠調試成功運行相應的程序,自己倍感莫大的收獲和欣慰

87、!在老師、同學、朋友、網絡的幫助下,自己能夠順利完成程序的書寫。在書寫完成之后,自己能夠編輯到仿真軟件中測試程序是否有相應的效果。在程序完成調試完成后能夠通過燒寫軟件燒入芯片中,并通過自己焊接的硬件完成測試,最后在硬件操作中完成本次設計。</p><p>  在完成畢業(yè)設計過程中,認識到學習要勤奮,要多尋求幫助,多查閱資料。通過這一階段的畢業(yè)設計,我受益匪淺,不僅鍛煉了良好的邏輯思維能力,而且培養(yǎng)了棄而不舍的求學

88、精神和嚴謹作風。給我的業(yè)務素質、個人能力的培養(yǎng)提供了一個難得的機會,令我回顧這些天來的設計過程,我學到許多實際問題的解決方法,為以后在工作崗位上的繼續(xù)深造打下了基礎。此次畢業(yè)設計,也是大學三年所學知識很好的總結。</p><p>  此次編制招標文件不僅重溫了過去所學知識,而且學到了很多新的內容。相信這次畢業(yè)設計對我今后的工作會有一定的幫助。所以,我很用心的把它完成。在設計中體味艱辛,在艱辛中體味快樂。</

89、p><p>  最后,我要感謝我的指導老師洪震老師,他們對我的畢業(yè)設計進行了多次的參考與修改,我的畢業(yè)設計才得以順利完成。同樣我也要衷心的感謝教育過和指導過我的各位老師,感謝給予我?guī)椭呐笥褌?,謹獻上我最真摯的祝福。</p><p><b>  致 謝</b></p><p>  將近兩個月的畢業(yè)論文階段結束了,在這段時間里,我得到了許多老師和朋友

90、的關心和幫助。</p><p>  首先,我要對我的指導老師向老師誠摯的謝意,在整個做畢業(yè)論文期間,洪震老師無微不至的關心我的學習和生活,課題遇到困難時更是關注著課題的進程。洪震老師高深的學術造詣、嚴謹的治學態(tài)度和勤勉的工作精神以及他平易近人的態(tài)度使我受益終身。</p><p>  在我做畢業(yè)論文期間我的同學和朋友給予了我很大的幫助,在我遇到困難的時候,總是不斷給我提出許多有價值的意見,并

91、且經常鼓勵我。</p><p>  感謝我的帶領老師,在課題的進行階段給我提出了許多有創(chuàng)新的觀點。</p><p>  最后感謝在我的課題進行中給予我?guī)椭乃械呐笥褌儯?</p><p><b>  此致</b></p><p><b>  敬禮</b></p><p>&

92、lt;b>  附錄:程序清單</b></p><p>  #include <REG51.H> //包含數據庫</p><p>  #include <math.H></p><p>  #define keyport P1</p><p>  #define uc unsigned char&

93、lt;/p><p>  #define ui unsigned int</p><p>  sbit hex=P1^0; //I\O輸入</p><p>  sbit dec=P1^1;</p><p>  sbit b=P1^2; //時能端口</p><p>  sbit rs=P2^

94、0;</p><p>  sbit e=P2^2;</p><p>  sbit rw=P2^1;</p><p>  uc flag3,flag1=0,temp=0,shu=0;</p><p>  void xzl(uc temp);</p><p>  void xsj(uc temp);</p>

95、<p>  void delay(ui z)</p><p><b>  {</b></p><p><b>  ui x,y;</b></p><p>  for(x=z;x>0;x--)</p><p>  for(y=110;y>0;y--);</p>&l

96、t;p><b>  }</b></p><p>  void lcdinit(void) //液晶初始化</p><p><b>  {</b></p><p>  xzl(0x38);</p><p>  xzl(0x0c);</p><p>  xz

97、l(0x06);</p><p>  xzl(0x80);</p><p>  xzl(0x01);</p><p><b>  }</b></p><p>  void lcd(uc i,uc j,uc temp)//液晶顯示</p><p>  {uc code mm[]="012

98、3456789ABCDEF";</p><p>  xzl(0x80+i+0x40*(j-1));</p><p>  xsj(mm[temp]);</p><p><b>  }</b></p><p>  void lcdstring() //液晶顯示的字符串</p><p&g

99、t;<b>  {</b></p><p><b>  uc i;</b></p><p>  uc code nn[]={"hex:"};</p><p>  uc code qq[]={"dec:"};</p><p>  uc code wn[]={&q

100、uot;bit:"};</p><p>  xzl(0x80);</p><p>  for(i=0;i<4;i++)</p><p>  xsj(nn[i]);</p><p>  xzl(0x88);</p><p>  for(i=0;i<4;i++)</p><p>

101、;  xsj(qq[i]);</p><p>  xzl(0x80+0x40);</p><p>  for(i=0;i<4;i++)</p><p>  xsj(wn[i]);</p><p><b>  }</b></p><p>  uc key(void) //讀鍵盤

102、子程序</p><p><b>  {</b></p><p>  uc temp,key;</p><p>  temp=0xf0;</p><p>  keyport=temp;</p><p>  temp=keyport;</p><p>  temp=temp&a

103、mp;0xf0;</p><p>  if(temp==0xf0)</p><p><b>  {</b></p><p><b>  flag3=0;</b></p><p>  return(0xff);</p><p><b>  }</b><

104、;/p><p><b>  delay(5);</b></p><p>  temp=keyport;</p><p>  if(temp&0xf0==0x00)</p><p>  return(0xff);</p><p>  temp=0xfe;</p><p>

105、  keyport=temp;</p><p>  temp=keyport;</p><p>  temp=temp&0xf0;</p><p>  switch(temp)</p><p><b>  {</b></p><p>  case 0xe0:key=7;break;<

106、/p><p>  case 0xd0:key=8;break;</p><p>  case 0xb0:key=9;break;</p><p>  case 0x70:key=0xff;break;</p><p><b>  }</b></p><p>  temp=0xfd;</p>

107、<p>  keyport=temp;</p><p>  temp=keyport;</p><p>  temp=temp&0xf0;</p><p>  switch(temp)</p><p><b>  {</b></p><p>  case 0xe0:key=4

108、;break;</p><p>  case 0xd0:key=5;break;</p><p>  case 0xb0:key=6;break;</p><p>  case 0x70:key=0xff;break;</p><p><b>  }</b></p><p>  temp=0xfb

109、;</p><p>  keyport=temp;</p><p>  temp=keyport;</p><p>  temp=temp&0xf0;</p><p>  switch(temp)</p><p><b>  {</b></p><p>  case

110、 0xe0:key=1;break;</p><p>  case 0xd0:key=2;break;</p><p>  case 0xb0:key=3;break;</p><p>  case 0x70:key=0xff;break;</p><p><b>  }</b></p><p>

111、  temp=0xf7;</p><p>  keyport=temp;</p><p>  temp=keyport;</p><p>  temp=temp&0xf0;</p><p>  switch(temp)</p><p><b>  {</b></p><

112、p>  case 0xe0:key=0xff;break;</p><p>  case 0xd0:key=0x00;break;</p><p>  case 0xb0:key=20;break;</p><p>  case 0x70:key=0xff;break;</p><p><b>  }</b><

113、;/p><p><b>  if(flag3)</b></p><p>  return(0xff);</p><p><b>  flag3=1;</b></p><p>  return(key);</p><p><b>  }</b></p&g

114、t;<p>  void main(void) //主函數</p><p><b>  {</b></p><p>  uc mm,m,i=0,erjz[8],hex[2];</p><p><b>  rw=0;</b></p><p>  lcdini

115、t();</p><p>  lcdstring();</p><p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  mm=key();</b></p><p>  if(mm!=0xff)&l

116、t;/p><p><b>  {</b></p><p>  if(mm!=20)</p><p><b>  {</b></p><p>  shu=temp*10+mm;</p><p>  lcd(13,1,temp);</p><p>  lcd(

117、14,1,mm);</p><p><b>  temp=mm;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>

118、;  m=shu;</b></p><p><b>  i=0;</b></p><p>  while(i<8)</p><p><b>  {</b></p><p>  erjz[i]=m%2;</p><p><b>  i++;</

119、b></p><p><b>  m=m/2;</b></p><p><b>  }</b></p><p>  for(i=8;i>0;i--)</p><p><b>  {</b></p><p>  lcd(12-i,2,erjz[

120、i-1]);</p><p><b>  }</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p><b>  if(i<4)</b></p><p>  hex[0]=hex[

121、0]+erjz[i]*pow(2,i);</p><p><b>  else</b></p><p>  hex[1]=hex[1]+erjz[i]*pow(2,(i-4));</p><p><b>  }</b></p><p>  lcd(4,1,hex[1]);</p>&l

122、t;p>  lcd(5,1,hex[0]);</p><p><b>  hex[0]=0;</b></p><p><b>  hex[1]=0;</b></p><p><b>  }</b></p><p><b>  }</b></p&

123、gt;<p><b>  }</b></p><p><b>  }</b></p><p>  void xzl(uc temp) //液晶寫指令</p><p><b>  {e=0;</b></p><p><b>  rs=0;&

124、lt;/b></p><p><b>  P0=temp;</b></p><p><b>  delay(5);</b></p><p><b>  e=1;</b></p><p><b>  delay(5);</b></p>&

125、lt;p><b>  e=0;</b></p><p><b>  }</b></p><p>  void xsj(uc temp) //液晶寫數據</p><p><b>  {e=1;</b></p><p><b>  rs=1;</

126、b></p><p><b>  P0=temp;</b></p><p><b>  delay(5);</b></p><p><b>  e=1;</b></p><p><b>  delay(5);</b></p><p

127、><b>  e=0;</b></p><p><b>  參考文獻</b></p><p>  [1] 胡漢才.單片機原理及接口技術[M].北京:清華大學出版社,1996.</p><p>  [2] 胡健.單片機原理及接口技術[M].北京:機械工業(yè)出版社,2004.</p><p>  [

128、3] 胡健.單片機實用教程[M].北京:兵器工業(yè)出版社,2001.</p><p>  [4] 周行慈.單片機應用程序設計基礎[M].北京:北京航空航天大學出版社,1991.</p><p>  [5] 李廣弟.單片機基礎[M].修訂本,北京:北京航空航天大學出版社,2001.</p><p>  [6] 李朝青.單片機原理及接口技術[M],簡明修訂版.北京:北京航

129、空航天大學出版社,1999.</p><p>  [7] 李葉紫.MCS-51單片機應用教程[M].北京:清華大學出版社,2004.</p><p>  [8] 朱定華.單片機原理及接口技術[M].北京:電子工業(yè)出版社,2001.</p><p>  [9] 李庭貴.單片機應用技術及項目化訓練[M].西南交通大學出版社,2009 </p><p

溫馨提示

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

評論

0/150

提交評論