微型計算機課程設(shè)計報告_第1頁
微型計算機課程設(shè)計報告_第2頁
微型計算機課程設(shè)計報告_第3頁
微型計算機課程設(shè)計報告_第4頁
微型計算機課程設(shè)計報告_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

微型計算機技術(shù)課程設(shè)計報告專業(yè):通信工程班級:通信072班姓名:xxxx學號:200727067指導教師:xxxx時間:2010-通信與電子工程學院鍵盤接口和顯示設(shè)計課程設(shè)計報告一、1.課設(shè)目的為了進一步穩(wěn)固學習的理論知識,增強學生對所學知識的實際應(yīng)用能力和運用所學的知識解決實際問題的能力,開始為期兩周的課程設(shè)計。通過設(shè)計使學生在穩(wěn)固所學知識的根底之上具有初步的單片機系統(tǒng)設(shè)計與應(yīng)用能力。1、通過本設(shè)計,使學生綜合運用《微型計算機技術(shù)》、《C語言程序設(shè)計》以及《數(shù)字電路》、《模擬電路》等課程的內(nèi)容,為以后從事電子產(chǎn)品設(shè)計、軟件編程、系統(tǒng)控制等工作奠定一定的根底。2、學會使用KEILC和PROTEUS等軟件,用C語言或匯編語言編寫一個較完整的實用程序,并仿真運行,保證設(shè)計的正確性。3、了解單片機接口應(yīng)用開發(fā)的全過程:分析需求、設(shè)計原理圖、選用元器件、布線、編程、調(diào)試、撰寫報告等。2.課設(shè)內(nèi)容設(shè)計并實現(xiàn)一個4×4鍵盤的接口,并在兩個數(shù)碼管上顯示鍵盤所在的行與列。二、1.問題分析、方案的提出鍵盤可以分為獨立聯(lián)接式和行列式兩類,每一類有可根據(jù)對鍵盤的譯碼方法分為編碼鍵盤和非編碼鍵盤兩種類型。編碼鍵盤主要是通過硬件電路產(chǎn)生被按按鍵的鍵碼和一個選通脈沖,這種鍵盤使用方便,但硬件電路復雜,常常不被微型計算機采用。在非編碼鍵盤中,每個按鍵的作用只是使相應(yīng)節(jié)點接通和斷開,每個按鍵的鍵碼并非由硬件電路產(chǎn)生,而是由相應(yīng)掃描處理程序?qū)λ鼟呙栊纬傻摹R虼?,非編碼鍵盤硬件電路極為簡單。在獨立聯(lián)接式非編碼鍵盤中,每個啊年都是彼此獨立的,均需占用CPU的一條I/O輸入數(shù)據(jù)線。4×4鍵盤的每個按鍵菌核單片機的P1口的兩條相連。假設(shè)沒有按鍵按下時,單片機從P1口讀得的引腳電平為“1〞;假設(shè)某一按鍵被按下,那么該鍵所對應(yīng)的端口線變?yōu)榈仉娖健纹瑱C定時對P1口進行程序查詢,即可發(fā)現(xiàn)鍵盤上是否有按鍵按下以及哪個按鍵被按下。實現(xiàn)4×4鍵盤的接口需要用到單片機并編寫相應(yīng)的程序來識別鍵盤的十六個按鍵中哪個按鍵被按下。因為此題目還要求將被按下的按鍵顯示出來,因此可以用兩個數(shù)碼管來分別顯示被按下的按鍵的行與列。我們可以將4×4鍵盤的八個接口與單片機的P1端口相連,兩個數(shù)碼管分別與單片機的P0口和P2口相連。從而編寫相應(yīng)的程序使P1口能夠識別出4×4鍵盤中的哪個按鍵被按下并且將被按下的按鍵的這一信息通過P0口和P2口的兩個數(shù)碼管顯示出來?!参覀冞x擇P1口作為輸入口〔將按鍵信息從此端口輸入〕和選擇P0口和P2口作為輸出口〔從該端口將哪個按鍵被按下的信息傳出來送到數(shù)碼管上〕是根據(jù)PROTEUS軟件所提供的芯片的引腳排列及布線方便美觀來考慮的。其實P1端口、P2端口和P3端口都是輸入輸出端口,都可以輸入輸出數(shù)據(jù)!〕對于數(shù)碼管的連接,采用了共陽極的接法,其下拉電阻應(yīng)保證芯片不會因為電流過大而燒壞。2.設(shè)計思路及原因?qū)τ?×4鍵盤,共有十六個按鍵。如果每個按鍵與單片機的一個引腳相連,就會占用16個引腳,這樣會使的單片機的接口不夠用〔即使夠用,也是對單片機端口的極大浪費〕。因此我們應(yīng)該行列式的接法。行列式非編碼鍵盤是一種吧所有按鍵排列成行列矩陣的鍵盤。在這種鍵盤中,每根行線和列線的交叉處都接有一個按鍵,每當某個按鍵被按下時,與這個按鍵相連的行線和列線就會接通,否那么是斷開狀態(tài)。。因此4×4行列式非編碼鍵盤只需4條行線和4條列線,總共占用8條I/O端口線。大大減少了I/O端口線的利用。假設(shè)沒有按鍵按下時,單片機從P1口讀得的引腳電平為“1〞;假設(shè)某一按鍵被按下,那么該鍵所對應(yīng)的端口線變?yōu)榈仉娖?。因?xEX(X表示任意一個十六進制數(shù))表示4×4鍵盤的第一行中的某個按鍵被按下,相應(yīng)的0xDX、0xBX、0x7X(X表示任意一個十六進制數(shù))分別表示鍵盤的第二行、第三行、第四行;0xXE、0xXD、0xXB、0xX7(X表示任意一個十六進制數(shù))那么分別表示鍵盤的第一列、第二列、第三列和第四列。例如0xD7是鍵盤的第二行第四列的按鍵三、1.電路設(shè)計及功能說明4×4鍵盤的十六個按鍵分成四行四列分別于P1端口的八條I/O數(shù)據(jù)線相連;兩個七段數(shù)碼管分別與單片機的P0口和P2口的低七位I/O數(shù)據(jù)線相連。數(shù)碼管采用共陽極的接法,所以需要下拉電阻來分流?!苍趩纹瑱C的P3端口上安裝了一個喇叭,通過編程實現(xiàn)當有按鍵按下的時候喇叭出現(xiàn)響聲予以提示?!辰Y(jié)合軟件程序,即可實現(xiàn)4×4鍵盤的接口及顯示的設(shè)計。當按下鍵盤其中的一個按鍵時,數(shù)碼管上會顯示出該按鍵在4×4鍵盤上的行值和列值。所以實現(xiàn)了數(shù)碼管顯示按鍵位置的功能。2.硬件原理框圖及電路圖(包括接口芯片簡介);電路原理框圖電路圖接口芯片簡介at89c51芯片管腳圖引腳圖AT89C51內(nèi)部功能圖AT89C51簡介AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,俗稱單片機。單片機的可擦除只讀存儲器可以反復擦除100次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器。1.主要特性:?與MCS-51兼容?4K字節(jié)可編程閃爍存儲器?全靜態(tài)工作:0Hz-24MHz?三級程序存儲器鎖定?128×8位內(nèi)部RAM?32可編程I/O線?兩個16位定時器/計數(shù)器?5個中斷源?可編程串行通道?低功耗的閑置和掉電模式?片內(nèi)振蕩器和時鐘電路2.主要管腳說明:VCC:供電電壓。GND:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1〞時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1〞時,它利用內(nèi)部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能存放器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1〞后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流〔ILL〕這是由于上拉的緣故。

P3口也可作為AT89C51的一些特殊功能口,如下表所示:

口管腳備選功能

P3.0RXD〔串行輸入口〕

P3.1TXD〔串行輸出口〕

P3.2/INT0〔外部中斷0〕

P3.3/INT1〔外部中斷1〕

P3.4T0〔記時器0外部輸入〕

P3.5T1〔記時器1外部輸入〕

P3.6/WR〔外部數(shù)據(jù)存儲器寫選通〕

P3.7/RD〔外部數(shù)據(jù)存儲器讀選通〕

P3口同時為閃爍編程和編程校驗接收一些控制信號。ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時,ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。3.芯片擦除:整個PEROM陣列和三個鎖定位的電擦除可通過正確的控制信號組合,并保持ALE管腳處于低電平10ms來完成。在芯片擦操作中,代碼陣列全被寫“1〞且在任何非空存儲字節(jié)被重復編程以前,該操作必須被執(zhí)行。此外,AT89C51設(shè)有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下靜態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM,定時器,計數(shù)器,串口和中斷系統(tǒng)仍在工作。在掉電模式下,保存RAM的內(nèi)容并且凍結(jié)振蕩器,禁止所用其他芯片功能,直到下一個硬件復位為止。數(shù)碼管簡介數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個發(fā)光二極管單元〔多一個小數(shù)點顯示〕;按能顯示多少個“8〞可分為1位、2位、4位等等數(shù)碼管;按發(fā)光二極管單元連接方式分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管。共陽數(shù)碼管在應(yīng)用時應(yīng)將公共極COM接到+5V,當某一字段發(fā)光二極管的陰極為低電平時,相應(yīng)字段就點亮。當某一字段的陰極為高電平時,相應(yīng)字段就不亮。。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管。共陰數(shù)碼管在應(yīng)用時應(yīng)將公共極COM接到地線GND上,當某一字段發(fā)光二極管的陽極為高電平時,相應(yīng)字段就點亮。當某一字段的陽極為低電平時,相應(yīng)字段就不亮。數(shù)碼管的驅(qū)動方式數(shù)碼管要正常顯示,就要用驅(qū)動電路來驅(qū)動數(shù)碼管的各個段碼,從而顯示出我們要的數(shù)字,因此根據(jù)數(shù)碼管的驅(qū)動方式的不同,可以分為靜態(tài)式和動態(tài)式兩類。①靜態(tài)顯示驅(qū)動:靜態(tài)驅(qū)動也稱直流驅(qū)動。靜態(tài)驅(qū)動是指每個數(shù)碼管的每一個段碼都由一個單片機的I/O端口進行驅(qū)動,或者使用如BCD碼二-十進制譯碼器譯碼進行驅(qū)動。靜態(tài)驅(qū)動的優(yōu)點是編程簡單,顯示亮度高,缺點是占用I/O端口多,如驅(qū)動5個數(shù)碼管靜態(tài)顯示那么需要5×8=40根I/O端口來驅(qū)動,要知道一個89S51單片機可用的I/O端口才32個呢:〕,實際應(yīng)用時必須增加譯碼驅(qū)動器進行驅(qū)動,增加了硬件電路的復雜性。②動態(tài)顯示驅(qū)動:數(shù)碼管動態(tài)顯示接口是單片機中應(yīng)用最為廣泛的一種顯示方式之一,動態(tài)驅(qū)動是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨立的I/O線控制,當單片機輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單片機對位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制翻開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。通過分時輪流控制各個數(shù)碼管的的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示過程中,每位數(shù)碼管的點亮時間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實際上各位數(shù)碼管并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。四、軟件局部的程序流程圖,算法和使用的編程技巧1.程序流程圖開始開始掃描P1端口有按鍵按下NYYN確定鍵盤的行列值行列值正確數(shù)碼管顯示按鍵行列值結(jié)束2.編程技巧1.在按鍵掃描程序中,通過for循環(huán)語句實現(xiàn)被按下的按鍵的行值確實定,用switch語句實現(xiàn)列值確實定。0xEX(X表示任意一個十六進制數(shù))表示4×4鍵盤的第一行中的某個按鍵被按下,相應(yīng)的0xDX、0xBX、0x7X(X表示任意一個十六進制數(shù))分別表示鍵盤的第二行、第三行、第四行;0xXE、0xXD、0xXB、0xX7(X表示任意一個十六進制數(shù))那么分別表示鍵盤的第一列、第二列、第三列和第四列;2.ucRow+ucLine+1即為被按下的按鍵的行列值;3.用十六個switch語句實現(xiàn)對單片機P0端口和P2口的I/O數(shù)據(jù)線的控制,來控制數(shù)碼管顯示被按下按鍵的行值和列值;4.硬件設(shè)備中還在AT89C51芯片的P3口安裝一喇叭,并且在源程序中編寫了相應(yīng)程序段使當按鍵被按下時喇叭會發(fā)出聲音來提示按鍵被按下。五、源程序代碼〔C語言編寫〕#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint#defineSCANPORTP1sbitspk=P3^0;ucharcodetable[]={0xF9,0xA4,0xB0,0x99}; //1,2,3,4的共陽字形碼ucharuca_LineScan[]={0xEF,0xDF,0xBF,0x7F}; //ucharucKeyScan(){ ucharTemp=0; ucharucRow=0,ucLine=0; // 給行列值賦初值0 for(ucLine=0;ucLine<4;ucLine++) //對P1端口掃描來確定鍵盤行值 { SCANPORT=uca_LineScan[ucLine]; Temp=SCANPORT&0x0F; if(Temp!=0x0F) { switch(Temp) { case0x0E:ucRow=10;break; //假設(shè)為0x0E,那么選中鍵盤第一列 case0x0D:ucRow=20;break; //假設(shè)為0x0D 那么選中鍵盤第二列 case0x0B:ucRow=30;break; case0x07:ucRow=40;break; default:ucRow=50;break; //未選中鍵盤列值 } break; } } SCANPORT=0x0F; returnucRow+ucLine+1; //返回被按下鍵盤的行列值,即確定被按下的按鍵的位置}voidvKeyProcess(unsignedcharucKeyCode){ switch(ucKeyCode) { case11:P0=table[0];P2=table[0];spk=1;break; //按鍵K1-1被按下 case12:P0=table[1];P2=table[0];spk=1;break; case13:P0=table[2];P2=table[0];spk=1;break; case14:P0=table[3];P2=table[0];spk=1;break; case21:P0=table[0];P2=table[1];spk=1;break; //按鍵K2-1被按下 case22:P0=table[1];P2=table[1];spk=1;break; case23:P0=table[2];P2=table[1];spk=1;break; case24:P0=table[3];P2=table[1];spk=1;break; //按鍵K2-4被按下 case31:P0=table[0];P2=table[2];spk=1;break; case32:P0=table[1];P2=table[2];spk=1;break; //按鍵K3-2被按下 case33:P0=table[2];P2=table[2];spk=1;break; case34:P0=table[3];P2=table[2];spk=1;break; case41:P0=table[0];P2=table[3];spk=1;break; case42:P0=table[1];P2=table[3];spk=1;break; //按鍵K4-2被按下 case43:P0=table[2];P2=table[3];spk=1;break; //按鍵K4-3被按下 case44:P0=table[3];P2=table[3];spk=1;break; default:break; }}voidmain() //主程序{ spk=0; while(1) // 開始循環(huán) { vKeyProcess(ucKeyScan()); //調(diào)用掃描鍵盤并確定按鍵行列值的子程序 spk=0; }}六、仿真過程綜述1.按照設(shè)計思路在PROTEUS軟件中找到相應(yīng)元器件,按照正確的連線方法將各個元器件連起來。再用PROTEUS軟件仿真時,為防止連線的復雜性,可以使用在要連線的引腳上標注相同的符號的方法。這樣可以使PROTEUS軟件窗口中的連線少一些,使電路圖更加清晰;2.按照硬件電路在KEILC軟件中編寫程序,對編寫的程序進行編譯,在確定沒有錯誤后生成十六進制文件并加載到PROTEUS軟件中原理圖的AT89C51芯片中;3.在PROTEUS軟件中點擊運行按鈕,實現(xiàn)仿真:按下鍵盤上的按鍵,觀察數(shù)碼管顯示的是否正確。七、調(diào)試過程中的主要難點(自己遇到的)及解決思路和方法因為上網(wǎng)查到的資料與題目要求的有一定的差異,自己需要修改其硬件電路局部和程序,這樣就會產(chǎn)生一定的問題:1.在硬件電路連線時用到了總線,造成了單線與總線虛連和錯連的現(xiàn)象。使得自己感覺硬件與軟件都沒問題但就是仿真不出來。2.程序?qū)懞茫幾g好后忘記加載到單片機芯片上就開始仿真,走了不少的彎路,3.單線與總線連接時應(yīng)該確保單線準確的連在總線上,而且應(yīng)該防止兩條單線連在總線的同一點處。否那么產(chǎn)生的錯誤是非常致命的,而且還不容易找出;因此在單線與總線連接時一定要注意連接是否正確得當,并且將該標注的標號正確標注;4.為防止電路圖中連線過多,可以采用將需要連線的引腳標注上相同的符號的方法。這樣可以盡可能少的減少連線錯誤,并是電路圖清晰,美觀;5.因為該數(shù)碼管是用的共陽極的接法,其下拉電阻起到分流的作

溫馨提示

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

評論

0/150

提交評論