目錄
1.1設(shè)計任務(wù)…………………………………………………………………………2
1.2設(shè)計要求…………………………………………………………………………2
1.3設(shè)計目的…………………………………………………………………………2
2.1鍵盤接口…………………………………………………………………………2
2.2顯示接口…………………………………………………………………………3
3.1總體設(shè)計框圖…………………………………………………………………4
3.2部分硬件設(shè)計及其原理 …………………………………………………4
4.1程序流程圖……………………………………………………………………6
4.2程序源代碼……………………………………………………………………7
5.1仿真結(jié)果截圖…………………………………………………………………11
5.2實物圖……………………………………………………………………………12
5.3設(shè)計及調(diào)試過程………………………………………………………………12
6.1在設(shè)計中遇到的困難………………………………………………………13
6.2課程設(shè)計總結(jié)…………………………………………………………………13
6.3收獲和體會 ……………………………………………………………………14
一 課程設(shè)計及任務(wù)要求
1.1 設(shè)計任務(wù)
鍵盤接口和顯示設(shè)計,設(shè)計并實現(xiàn)一4×4鍵盤的接口,并在兩個數(shù)碼管上顯示鍵盤所在的行與列。
1.2設(shè)計要求
① 掌握原理圖的畫法,在PROTEUS平臺上用單片機完成所選題目的原理圖設(shè)計;
② 在KEIL C平臺上使用C語言編程實現(xiàn)編程,并調(diào)試通過;
③ 在PROTEUS平臺上利用設(shè)計好的原理圖和調(diào)試好的程序完成整個仿真;
④ 在單片機最小系統(tǒng)板上實現(xiàn)仿真后軟硬件設(shè)計;
1.3設(shè)計目的
為了進一步鞏固學(xué)習(xí)的理論知識,增強對所學(xué)知識的實際應(yīng)用能力和運用所學(xué)的知識解決實際問題的能力,進行本次課程設(shè)計。通過設(shè)計使我在鞏固所學(xué)知識的基礎(chǔ)之上具有初步的單片機系統(tǒng)設(shè)計與應(yīng)用能力。
① 通過本設(shè)計,綜合運用《單片機技術(shù)原理與應(yīng)用》、《DSP原理與應(yīng)用》《C語言程序設(shè)計》以及《數(shù)字電路》、《模擬電路》等課程的內(nèi)容,為以后從事電子產(chǎn)品設(shè)計、軟件編程、系統(tǒng)控制等工作奠定一定的基礎(chǔ)。
② 學(xué)會使用KEIL C和PROTEUS等軟件,用C語言或匯編語言編寫一個較完整的實用程序,并仿真運行,保證設(shè)計的正確性。
③ 了解單片機接口應(yīng)用開發(fā)的全過程:分析需求、設(shè)計原理圖、選用元器件、布線、編程、調(diào)試、撰寫報告等。
二 總體方案介紹
2.1鍵盤接口:
鍵盤可以分為獨立式和矩陣式兩類,每一類有可根據(jù)對鍵盤的譯碼方法分為編碼鍵盤和非編碼鍵盤兩種類型。編碼鍵盤是鍵盤按下直接獲取按鍵的鍵號,當有按鍵按下時,能直接得到按下鍵的鍵號,這種鍵盤使用方便,但硬件電路復(fù)雜,常常不被微型計算機采用。在非編碼鍵盤中,利用按鍵直接與單片機的I/O口線(或外部擴展的I/O口線)相連接,鍵盤按下時不能直接得到按鍵號,還要通過編寫程序判斷I/O口線的電平求得鍵號。因此,非編碼鍵盤硬件電路極為簡單。
對于4×4鍵盤,共有十六個按鍵。如果每個按鍵與單片機的一個引腳相連,就會占用16個引腳,這樣會使的單片機的接口不夠用(即使夠用,也是對單片機端口的極大浪費)。因此我們應(yīng)該行列式的接法。行列式非編碼鍵盤是一種把所有按鍵排列成行列矩陣的鍵盤。在這種鍵盤中,每根行線和列線的交叉處都接有一個按鍵,每當某個按鍵被按下時,與這個按鍵相連的行線和列線就會接通,否則是斷開狀態(tài)。。因此4×4行列式非編碼鍵盤只需4條行線和4條列線,總共占用8條I/O端口線。大大減少了I/O端口線的利用。
去除按鍵的抖動,當判別出可能有鍵按下時,軟件延時一段時間(10ms左右)再判別鍵盤的狀態(tài),若仍有鍵閉合,則認為鍵盤上有確定的鍵按下,否則是鍵抖動。
矩陣式鍵盤的線反轉(zhuǎn)法掃描,主要操作步驟為:(1)讓行線編程為輸入線,列線編程為輸出線,并使輸出線輸出為全低電平,則行線中電平由高變低的所在行為按鍵的所在行;(2)再把行線編程為輸出線,列線編程為輸入線,并使輸出線輸出為全低電平,則列線中電平由高變低的所在行為按鍵的所在列。綜合上述兩步的結(jié)果,可確定按鍵所在的行和列,從而識別出所按的鍵。
2.2顯示接口:
實現(xiàn)4×4鍵盤的接口需要用到單片機并編寫相應(yīng)的程序來識別鍵盤的十六個按鍵中哪個按鍵被按下。要求將被按下的按鍵顯示出來,因此可以用兩個數(shù)碼管來分別顯示被按下的按鍵的行與列。單片機控制LED數(shù)碼管有兩種顯示方式:靜態(tài)顯示和動態(tài)掃描顯示。靜態(tài)顯示方式就是指無論多少位LED數(shù)碼管,都同時處于顯示狀態(tài),多位LED數(shù)碼管工作于靜態(tài)顯示方式時,各位的共陰極(或共陽極)連接在一起并接地(或接+5V),每位數(shù)碼管的段碼線分別與一個單片機控制的8位I/O口鎖存器輸出相連,如果送往各個LED數(shù)碼管所顯示的字符的段碼一經(jīng)確定,則相應(yīng)的I/O口鎖存器鎖存的段碼輸出將維持不變,直至送入下一個顯示字符的段碼。因此,靜態(tài)顯示方式送往顯示無閃爍,亮度較高,軟件控制比較容易。動態(tài)顯示用于顯示位數(shù)較多時,將所有的LED數(shù)碼管顯示器的段碼線的相應(yīng)段并聯(lián)在一起,由一個8位I/O端口控制,而各顯示位的公共端分別由另一單獨的I/O端口線控制。 每隔一段時間逐位的輪流點亮各數(shù)碼管(掃描),由于數(shù)碼管的余暉和人眼的“視覺暫留”作用,只要控制好每位數(shù)碼管點亮顯示的時間和間隔,則可造成“多位同時亮”的假象。發(fā)光二極管從導(dǎo)通到發(fā)光有一定的延時,如果點亮?xí)r間太短,發(fā)光太弱,人眼無法看清;時間太長,產(chǎn)生閃爍現(xiàn)象,而且此時間越長,占用單片機的時間也越多。另外,顯示位數(shù)增多,也將占用單片機的大量時間,因此動態(tài)現(xiàn)實的實質(zhì)是以執(zhí)行程序的時間來換取I/O端口數(shù)目的減少。因此選用靜態(tài)顯示,并且選擇共陰極數(shù)碼管,直接接地,不需要上拉電阻,方便了電路的連接。
三 硬件設(shè)計
3.1總體設(shè)計框圖
1.001.jpg (34.32 KB, 下載次數(shù): 117)
下載附件
2017-7-13 01:50 上傳
圖3-1總電路圖
3.2部分硬件設(shè)計及其原理
1.002.jpg (28.17 KB, 下載次數(shù): 97)
下載附件
2017-7-13 01:50 上傳
圖3-2 4*4按鍵硬件圖
每個按鍵都有它的行值和列值,行值和列值的組合就是識別這個按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。鍵盤的一端(列線)通過電阻接VCC,而接地是通過程序輸出數(shù)字“0”實現(xiàn)的。鍵盤處理程序的任務(wù)是:確定有無鍵按下,判斷哪一個鍵按下,還要消除按鍵在閉合或斷開時的抖動。兩個并行口中,一個輸出掃描碼,使按鍵逐行動態(tài)接地;另一個并行口輸入按鍵狀態(tài),由行掃描值和回饋信號共同形成鍵編碼而識別按鍵。
1.003.jpg (33.04 KB, 下載次數(shù): 67)
下載附件
2017-7-13 01:50 上傳
圖3-3 數(shù)碼管硬件圖
兩位數(shù)碼管靜態(tài)顯示,并且采用共陰極數(shù)碼管,直接接地,避免采用上拉電阻,與AT89C52的P2、P3口相連,按行列顯示按鍵,靜態(tài)顯示,顯示無閃爍,亮度較高,軟件控制較容易。
1.004.jpg (30.18 KB, 下載次數(shù): 67)
下載附件
2017-7-13 01:50 上傳
圖3-4 STC89C52芯片
(1)8位CPU
(2)數(shù)據(jù)存儲器(256RAM)程序存儲器(8KB Flash ROM)
(3)4個八位可編程并行I/O口(P0口、P1口、P2口、P3口)
(4)3個可編程的16位定時器/計數(shù)器(T0、T1、T2)
(5)1個全雙工的通用異步收發(fā)串行口(UART)
(6) 中斷系統(tǒng)具有6個中斷源、6個中斷向量
(8)1個看門狗定時器(WDT)
四 軟件設(shè)計
4.1程序流程圖
(在51hei附件里面)
圖4-1 總程序流程圖
1.043.jpg (40.45 KB, 下載次數(shù): 72)
下載附件
2017-7-13 01:50 上傳
圖4-3 鍵盤掃描流程圖
4.2程序源代碼
五 調(diào)試
5.1仿真結(jié)果截圖
1.044.jpg (42.97 KB, 下載次數(shù): 95)
下載附件
2017-7-13 01:50 上傳
圖5-1 初始狀態(tài)數(shù)碼管顯示為“00”
1.045.jpg (43.63 KB, 下載次數(shù): 114)
下載附件
2017-7-13 01:50 上傳
圖5-2 第三行第四列按鍵按下,顯示為“34”
5.2實物圖
1.046.jpg (32.51 KB, 下載次數(shù): 56)
下載附件
2017-7-13 01:50 上傳
圖5-3 第三行第二列按鍵按下,顯示為“32”
1.047.jpg (30.03 KB, 下載次數(shù): 85)
下載附件
2017-7-13 01:50 上傳
圖5-4 第四行第三列按鍵按下,顯示為“43”
5.3設(shè)計及調(diào)試過程
- 首先在keil軟件中編寫設(shè)計的程序,并通過編譯調(diào)試使程序能夠完全展現(xiàn)實驗要求,不斷修改直至沒有錯誤,編譯通過以后生成往單片機里下載的hex文件。
- 打開proteus軟件,設(shè)計硬件電路,根據(jù)自己設(shè)計的電路原理圖選擇元器件,并按照電路原理圖布局和連線。
- 電路連接好以后,并且檢查沒有任何錯誤,點擊STC89C52芯片,在“Program File”中選擇生成的hex文件,點擊OK,退出以后,點擊運行按鈕,調(diào)試電路是否能夠正常工作,并且檢查按鍵是否對應(yīng)數(shù)碼管上的數(shù)字。
六 總結(jié)
6.1設(shè)計中遇到的困難
- 在編寫程序的時候,考慮用匯編語言還是C語言編寫,最后選擇了C語言,在之前的各種實驗及設(shè)計中都是用的C語言進行編程,對C語言的理解比較深刻,匯編語言是單片機的主要設(shè)計語言,但由于剛剛接觸到這一語言,對各種指令、尋址方式的理解不太深刻,用錯各種指令,相對比而言,C語言更加得心應(yīng)手。
在用C語言進行編程的時候,也遇見了許多的問題,各種函數(shù)的調(diào)用,實體名、變量名的定義,通過對C語言課本的查閱,在老師的幫助下都解決了。
- 另外一個最大的難點就是在proteus中對原理圖的繪制,由于是第一次使用這個軟件,之前都是用的Multisim進行仿真,這次進行的是基于單片機的設(shè)計,所以在進行軟件仿真的時候有很大的困難,本次設(shè)計的大部分時間都用在了系統(tǒng)的仿真上,器件的選取、參數(shù)值的改動,還有最后下載完hex文件后的各種錯誤的修改。這些問題都對設(shè)計造成了很大的影響,通過對《單片機原理及應(yīng)用》附帶光盤的觀看,對proteus軟件的介紹及實際操作,使我對這個軟件有了一定的了解,通過上網(wǎng)查閱資料,了解了各種元器件的名稱及在軟件中的位置,通過不懈的努力,終于完成了設(shè)計的系統(tǒng)仿真。
6.2課程設(shè)計總結(jié)
通過本次課程設(shè)計,我運用所學(xué)知識,完成了整個課程設(shè)計的內(nèi)容,從電路原理圖的設(shè)計到硬件電路圖的連接,再到程序的編寫、電路原理圖的仿真,最后通過焊接完成了實物的設(shè)計,在這次課程設(shè)計中,運用了許多課程的內(nèi)容,通過查閱資料,以及與同學(xué)的探討,最終完成了4×4鍵盤的設(shè)計及按鍵的顯示。
通過本次單片機與接口課程設(shè)計,我學(xué)會了使用proteus軟件和keil軟件,基本上完成了所設(shè)計的課題,設(shè)計出了4×4鍵盤的接口,并且在兩個數(shù)碼管上能夠顯示鍵盤所在的行值與列值。通過本次課設(shè),首先,使我能夠綜合運用《單片機技術(shù)原理與應(yīng)用》、《DSP原理與應(yīng)用》《C語言程序設(shè)計》以及《數(shù)字電路》、《模擬電路》等課程中學(xué)到的知識做一些電路的仿真,其次,使我對C語言有了更好的掌握和運用,用其進行軟件編程更加得心應(yīng)手。初步掌握了keil 和proteus等軟件,可以用C語言編寫一個完整的程序,并且能夠在proteus中完成電路圖的設(shè)計,且能夠使程序與電路圖吻合,達到設(shè)計的目的,實現(xiàn)設(shè)計的要求,本次課設(shè)使我了解單片機接口應(yīng)用開發(fā)的全過程:分析需求、設(shè)計原理圖、選用元器件、布線、編程、調(diào)試、撰寫報告等。
6.3收獲和體會
這次課設(shè),使我認識到:無論是設(shè)計硬件電路還是編寫相應(yīng)的軟件程序,我們應(yīng)該極其認真的進行設(shè)計,在這個過程中哪怕是出現(xiàn)一個小小的錯誤,都會導(dǎo)致不能仿真出正確的結(jié)果甚至根本不會出結(jié)果。本專業(yè)要求我們應(yīng)該有基本的專業(yè)知識和較強的動手操作能力。因此能夠熟練使用proteus和keil等軟件對于我們未來的就業(yè)非常重要。本次課設(shè)僅僅使我們對proteus和keil等軟件有了一個簡單的了解,我們應(yīng)該利用業(yè)余時間了解一些對我們專業(yè)有用的軟件,做到能夠掌握并熟練使用。課余時間多多做一些電路的仿真,這對我們將來找工作有很大的方便。
通過這次課程設(shè)計我發(fā)現(xiàn)了自己有很大的不足,書本上的知識固然重要,但是真正應(yīng)用到實際當中才是最主要的,F(xiàn)在學(xué)習(xí)專業(yè)知識,只是為運用到實際中打下堅實的基礎(chǔ),我們應(yīng)該多鍛煉自己的動手能力,多練習(xí)自己的焊接技術(shù)、排版能力、接線技巧等,這對以后的工作將會是一個巨大的幫助,通過本次課程設(shè)計,對我各方面都具有一定的影響,在以后的學(xué)習(xí)生活中,我會更加努力的去學(xué)習(xí)各種關(guān)于專業(yè)的知識,充實自己,使自己有充分的的提高。
參考文獻
[1] 張毅剛. 單片機原理及應(yīng)用 [M]. 北京:高等教育出版社,2016
[2] 陳峰. DSP原理與系統(tǒng)設(shè)計 [M]. 北京:電子工業(yè)出版社,2010
[3] 張敏霞. C語言程序設(shè)計教程 [M]. 北京:電子工業(yè)出版社,2013
[4] 閆石. 數(shù)字電子技術(shù)基礎(chǔ) [M]. 北京: 高等教育出版社,1998
[5] 童詩白. 模擬電子技術(shù)基礎(chǔ) [M]. 北京: 高等教育出版社,2015