基于51單片機(jī)的六位十進(jìn)制計數(shù)器論文_第1頁
基于51單片機(jī)的六位十進(jìn)制計數(shù)器論文_第2頁
基于51單片機(jī)的六位十進(jìn)制計數(shù)器論文_第3頁
基于51單片機(jī)的六位十進(jìn)制計數(shù)器論文_第4頁
基于51單片機(jī)的六位十進(jìn)制計數(shù)器論文_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 序號: 學(xué)號: 10446234 實 習(xí) 報 告實習(xí)課程名稱: 硬 件 綜 合 設(shè) 計 學(xué) 生 姓 名: 朱京 學(xué) 院(系): 信息科學(xué)與工程 專 業(yè) 班 級: 電子102班 校內(nèi)指導(dǎo)教師: 周炯如 專業(yè)技術(shù)職務(wù): 高級實驗師 _實 習(xí) 單 位: 信息科學(xué)與工程學(xué)院實驗中心 校外指導(dǎo)教師: 職務(wù)/職稱: 實習(xí)時間: 2013 年 6 月 14 日 2013 年 6 月 28 日 硬件實習(xí)任務(wù)書1、 設(shè)計題目六位十進(jìn)制計數(shù)器設(shè)計(led顯示計數(shù)值)二、設(shè)計背景七段led顯示屏在很多場合有著廣泛的應(yīng)用,led顯示產(chǎn)品的使用存在于社會的各個角落。如銀行利率電子顯示屏,價格表電子顯示屏,車站班次時刻

2、表,安全天數(shù)電子顯示屏等。了解led顯示技術(shù)及其相關(guān)的電路組成和顯示控制方法非常重要,在很多智能化儀表中,鍵盤和顯示器是不可能缺少的一部分。三、設(shè)計內(nèi)容及目的設(shè)計內(nèi)容:利用8255鍵盤顯示接口電路,設(shè)計一個十進(jìn)制計數(shù)器,對外部脈沖進(jìn)行計數(shù),計滿即清0,用小鍵盤設(shè)置計數(shù)值及計數(shù)器的啟、停.顯示器由右向左為個,十,百,千,萬。1、c鍵:清零.2、a鍵:開始計數(shù),3、d鍵:停止計數(shù),4、b鍵:設(shè)置計數(shù)值。5、e鍵:程序退出。設(shè)計目的:1. 進(jìn)一步撐握8255鍵盤顯示電路的編程方法。2. 進(jìn)一步撐握定時器的使用和編程方法。 3. 進(jìn)一步撐握中斷處理程序的編程方法。 四、進(jìn)度安排周次工 作 內(nèi) 容預(yù) 定

3、 目 標(biāo)第1周周一選題,圖書館查閱相關(guān)資料寫出該題的過去、現(xiàn)在、未來及應(yīng)用場合第1周周二系統(tǒng)硬件設(shè)計及軟件設(shè)計書面畫出系統(tǒng)框圖、軟件框圖并上交第1周周三設(shè)計成果檢查及指導(dǎo)組長匯報方案,完善設(shè)計方案第1周周四、周五完善硬件及軟件設(shè)計;畫出系統(tǒng)硬件原理圖、軟件詳細(xì)框圖第2周一至周二完成硬件靜態(tài)測試、軟件調(diào)試調(diào)試好系統(tǒng),寫出硬件實習(xí)報告第2周三周至四完成實習(xí)任務(wù);完善實習(xí)報告。第2周五答辯并驗收實習(xí)報告答辯并上交實習(xí)報告五、設(shè)計時間:12 年 4 月 20 到 12 年 6 月 20 日 通信工程 系 指導(dǎo)教師: 周炯如 1. 前言11.1 設(shè)計背景12. 設(shè)計要求12.1 設(shè)計內(nèi)容12.2 硬件實

4、習(xí)的目的13. 硬件設(shè)計13.1 設(shè)計方案13.2 芯片介紹23.2.1 mcs-51芯片介紹23.2.2 8255可編程芯片33.2.3 74ls138譯碼器53.2.4 74ls373鎖存器63.3 硬件原理圖設(shè)計83.3.1 并行i/o口擴(kuò)展83.3.2 led數(shù)碼管驅(qū)動及顯示設(shè)計83.3.3 鍵盤接口113.3.4 最小系統(tǒng)圖124. 軟件設(shè)計134.1 程序流程圖設(shè)計134.2程序代碼分析144.2.1匯編程序代碼分析144.2.2 c語言代碼分析235. 系統(tǒng)調(diào)試及分析296. 實物圖297.心得體會308.參考文獻(xiàn)301. 前言1.1 設(shè)計背景七段led顯示屏在很多場合有著廣泛的

5、應(yīng)用,led顯示產(chǎn)品的使用存在于社會的各個角落。如銀行利率電子顯示屏,價格表電子顯示屏,車站班次時刻表,安全天數(shù)電子顯示屏等。了解led顯示技術(shù)及其相關(guān)的電路組成和顯示控制方法非常重要,在很多智能化儀表中,鍵盤和顯示器是不可能缺少的一部分。利用數(shù)字電路技術(shù)數(shù)出給定時間內(nèi)所通過的脈沖數(shù)并顯示計數(shù)結(jié)果的數(shù)字化儀器。電子計數(shù)器是其他數(shù)字化儀器的基礎(chǔ)。在它的輸入通道接入各種模數(shù)變換器,再利用相應(yīng)的換能器便可制成各種數(shù)字化儀器。電子計數(shù)器的優(yōu)點是測量精度高、量程寬、功能多、操作簡單、測量速度快、直接顯示數(shù)字,而且易于實現(xiàn)測量過程自動化,在工業(yè)生產(chǎn)和科學(xué)實驗中得到廣泛應(yīng)用。電子計數(shù)器可具有以下三種基本功能

6、: 頻率測量周期或時間間隔測量 累加計數(shù) 在這些功能的基礎(chǔ)上再增加某些輔助電路或裝置,計數(shù)器還可完成多周期平均、時間間隔平均、頻率比值和頻率擴(kuò)展等功能。電子計數(shù)器性能指標(biāo)主要包括:頻率、周期、時間間隔測量范圍、輸入特性(靈敏度、輸入阻抗和波形)、精度、分辨度和誤差(計數(shù)誤差、時基誤差和觸發(fā)誤差)等。電子計數(shù)器按功能可分三類:通用計數(shù)器:可測頻率、周期、多周期平均、時間間隔、頻率比和累計等。頻率計數(shù)器:專門用于測量高頻和微波頻率的計數(shù)器,主要用于測頻率。計算計數(shù)器:一種帶微處理器的具有計算功能的計數(shù)器,除了具有通用計數(shù)器的功能之外,還能進(jìn)行數(shù)學(xué)運算,求解比較復(fù)雜的方程式,可靠程序控制進(jìn)行測量計算

7、和顯示等全部工作。2. 設(shè)計要求2.1 設(shè)計內(nèi)容利用8255鍵盤顯示接口電路,設(shè)計一個十進(jìn)制計數(shù)器,對外部脈沖進(jìn)行計數(shù),計滿即清0,用小鍵盤設(shè)置計數(shù)值及計數(shù)器的啟、停。顯示器由左向右為個,十,百,千,萬,十萬。1、c鍵:清零.2、a鍵:開始計數(shù),3、d鍵:停止計數(shù),4、b鍵:設(shè)置計數(shù)值。4、e鍵:程序退出。2.2 硬件實習(xí)的目的(1)進(jìn)一步撐握8255鍵盤顯示電路的編程方法。(2)進(jìn)一步撐握定時器的使用和編程方法。 (3)進(jìn)一步撐握中斷處理程序的編程方法。(4)進(jìn)一步掌握8255多個七段碼的動態(tài)顯示方法。3. 硬件設(shè)計3.1 設(shè)計方案本計數(shù)器系統(tǒng)以atmel公司生產(chǎn)的單片微處理器at89c51

8、為核心,外接擴(kuò)展接口、晶振電路、復(fù)位電路、led驅(qū)動電路、鍵盤接口,外部脈沖等構(gòu)成,硬件結(jié)構(gòu)框圖如圖2-6所示。本系統(tǒng)利用單片機(jī)的內(nèi)部振蕩器外加石英晶體構(gòu)成時鐘源,為了工作可靠,晶體振蕩頻率選為11.0592mhz。本系統(tǒng)的計數(shù)脈沖信號從外部獲取,選用計數(shù)器0,t0(p3.4)接手動脈沖,高電平計數(shù)。六位數(shù)碼管單片機(jī) 8255擴(kuò)展芯片鍵盤掃描圖3-1 六位十進(jìn)制計數(shù)系統(tǒng)框圖3.2 芯片介紹3.2.1 mcs-51芯片介紹單片微型計算機(jī)簡稱為單片機(jī),又稱為微型控制器,是微型計算機(jī)的一個重要分支。單片機(jī)是70年代中期發(fā)展起來的一種大規(guī)模集成電路芯片,是cpu、ram、rom、i/o接口和中斷系統(tǒng)于

9、同一硅片的器件。80年代以來,單片機(jī)發(fā)展迅速,各類新產(chǎn)品不斷涌現(xiàn),出現(xiàn)了許多高性能新型機(jī)種,現(xiàn)已逐漸成為工廠自動化和各控制領(lǐng)域的支柱產(chǎn)業(yè)之一。mcs-51是標(biāo)準(zhǔn)的40引腳雙列直插式集成電路芯片,引腳分布如圖3-2。圖3-2 mcs-51芯片引腳圖按照引腳功能可分為電源引腳vcc與vss;外接晶振引腳xtal1與xtal2;控制和復(fù)位引腳ale,psen,ea,rst;32個i/o引腳。其中p2與p0作為地址總線,p2作為地址線的高8位,p0作為地址線的低八位,p0還可以作為數(shù)據(jù)總線負(fù)責(zé)傳出或傳入數(shù)據(jù),p1為用戶自定義i/o引腳,p3主要作為控制總線,包括了串行輸入與輸出端,外部中斷0,1觸發(fā)端

10、,定時器0,1外部脈沖計數(shù)端,允許讀寫信號端。 8051單片機(jī)內(nèi)部有4kb的程序存儲器,地址范圍為0000h到0fffh,當(dāng)ea引腳為高電平時,程序存儲空間的0000h到0fffh在單片機(jī)內(nèi)部,1000h到ffffh在單片機(jī)外部;8051單片機(jī)內(nèi)部有128b的數(shù)據(jù)存儲器,地址范圍為00h到7fh 8051單片機(jī)內(nèi)部地址范圍從80h到ffh為特殊功能寄存區(qū),單片機(jī)的輸入輸出端口,計數(shù)器/定時器,串行通信口,累加器以及一些控制寄存器等都在這個地址空間。 8051單片機(jī)有5個中斷源,分別為外部中斷0,外部中斷1,時鐘中斷0,時鐘中斷1和串行通信中斷,這些中斷分為兩個優(yōu)先級,每個中斷源的優(yōu)先級都是可編

11、程的 8051單片機(jī)有兩個16位定時/計數(shù)器,通過編程可以實現(xiàn)4中工作方式,內(nèi)部ram開設(shè)了4個通用工作寄存區(qū),共32個通用寄存器,以適應(yīng)多種中斷或子程序嵌套的使用。 8051單片機(jī)有一個功能齊全的指令系統(tǒng)。包括加、減、乘、除等算術(shù)運算指令,邏輯運算指令,位操作指令,數(shù)據(jù)傳送指令及多種程序轉(zhuǎn)移指令。3.2.2 8255可編程芯片8255a是目前應(yīng)用最廣的可編程并行接口電路。不可編程并行接口電路的特點是電路簡單,使用方便。但是,它們在硬件連接好了之后,功能就很難改變。可編程并行接口電路的特點就在于使用靈活,可以在不改變硬件的情況下通過軟件編程來改變芯片的功能。8255a可以與mcs-51系統(tǒng)單片

12、機(jī)以及外設(shè)直接相連,廣泛用作外部并行i/o擴(kuò)展接口。其內(nèi)部結(jié)構(gòu)圖及引腳圖如下圖3-3。圖3-3 8255內(nèi)部結(jié)構(gòu)與引腳圖引腳介紹由圖可見,8255由以下幾個部分組成:數(shù)據(jù)端口a、b、c(其中,c口被分成c口上半部分和c口下半部分兩個部分),a組和b組控制邏輯,數(shù)據(jù)總線緩沖器和讀/寫控制邏輯。8255部包含3個8位的輸入輸出端口a、b和c,通過外部的24根輸入輸出線與外設(shè)交換數(shù)據(jù)或進(jìn)行通信聯(lián)絡(luò)。端口a和端口b都可以用作一個8位的輸入口或8位的輸出口,c口既可以作為一個8位的輸入口或輸出口用,又可作為兩個4位的輸入輸出口(c口上半部分和c口下半部分)使用,還常常用來配合a口和b口工作,分別用來產(chǎn)生

13、a口和b口的輸出控制信號和輸入a口和b口的端口狀態(tài)信號。內(nèi)部結(jié)構(gòu)8255a由數(shù)據(jù)總線緩沖器、讀/寫控制邏輯電路、a組和b組控制電路以及數(shù)據(jù)端口a、b和c組成。數(shù)據(jù)總線緩沖器是8255a與系統(tǒng)數(shù)據(jù)總線的接口,cpu輸入輸出的數(shù)據(jù)、cpu輸出的控制字和外設(shè)的狀態(tài)信息都是通過這個緩沖器傳送的。讀/寫控制邏輯電路把cpu的控制命令或輸出數(shù)據(jù)送至相應(yīng)的端口,把外設(shè)的狀態(tài)信息或輸入數(shù)據(jù)通過相應(yīng)的端口送至cpu。數(shù)據(jù)端口pa和pb都包含一個8位輸出鎖存器/緩沖器和一個8位輸入鎖存器,pc口包含一個8位輸出鎖存器/緩沖器和一個8位輸入緩沖器(不鎖存輸入信號)。在工作方式1或方式2下,pc口分成高4位和低4位兩

14、個輸入口作為pa和pb的控制信號輸出或狀態(tài)信號輸入。、a0、a1、和決定端口的地址。引腳功能 8255a的引腳功能如表3-1所示。數(shù)據(jù)總線(8條):d0d7,用于傳送cpu和8255a間的數(shù)據(jù)、命令和狀態(tài)字。 控制總線(6條):reset:復(fù)位信號,高電平有效。該信號有效時,將8255控制寄存器內(nèi)容都清0,并將所有的端口(a、b和c)都置成輸入方式。 cs:片選信號,低電平有效,由地址總線經(jīng)i/o端口譯碼電路產(chǎn)生。只有當(dāng)該信號有效時,cpu與8255之間才能進(jìn)行通信,也就是cpu可對8255進(jìn)行讀/寫等操作。 /rd、/wr:/rd為讀命令線,/wr為寫命令線,皆為低電平有效。a0、a1:用于

15、選中pa、pb、pc口和控制寄存器中哪一個工作。當(dāng)a1a0=000時,選中端口a;a1a0=01時,選中端口b;a1a0=10時,選中端口c;a1a0=11時,選中控制字寄存器端口。并行i/o總線(24條):用于和外設(shè)相連,共分a、b、c三組。 表3-1 8255引腳功能表8255a控制字8222a有兩類控制字,一類控制字用于定義各端口的工作方式,稱為方式選擇控制字;另一類控制字用于對c端口的任一位進(jìn)行置位或復(fù)位操作,稱為置位復(fù)位控制字。對8255a進(jìn)行編程時,這兩種控制字都被寫入控制字寄存器中。但方式選擇控制字的d7位總是1,而置位復(fù)位控制字的d7位總是0。8255a正是利用這一位來區(qū)分這兩

16、個寫入同一端口的不同控制字的,d7位也稱為這兩個控制字的標(biāo)志位。8255a具有3種基本的工作方式,在對8255a進(jìn)行初始化編程時,應(yīng)向控制字寄存器寫入方式選擇控制字,用來規(guī)定8255a各端口的工作方式。這3種基本工作方式是:方式0基本輸入輸出方式;方式1選通輸入輸出方式;方式2雙向總線i/o方式。 當(dāng)系統(tǒng)復(fù)位時,8255a的reset輸入端為高電平,使8255a復(fù)位,所有的數(shù)據(jù)端口都被置成輸入方式;當(dāng)復(fù)位信號撤除后,8255a繼續(xù)保持復(fù)位時預(yù)置的輸入方式。如果希望它以這種方式工作,就不用另外再進(jìn)行初始化。 通過用輸出指令對8255a的控制字寄存器編程,寫入設(shè)定工作方式的控制字,可以讓3個數(shù)據(jù)口

17、以不同的方式工作。其中,端口a可工作于3種方式中的任一種;端口b只能工作于方式0和方式1,而不能工作于方式2;端口c常被分成兩個4位的端口,除了用作輸入輸出端口外,還能用來配合a口和b口工作,為這兩個端口的輸入輸出操作提供聯(lián)絡(luò)信號。方式選擇控制字的格式如圖3-4所示:圖3-4 方式選擇控制字格式其中,d7位為標(biāo)志位,它必須等于1;d6d5位用于選擇a口的工作方式;d2位用于選擇b口的工作方式;其余4位分別用于選擇a口、b口、c口高4位和c口低4位的輸入輸出功能,置1時表示輸入,置0表示輸出。3.2.3 74ls138譯碼器當(dāng)一個選通端(s1)為高電平,另兩個選通端(/s2和/s3)為低電平時,

18、可將地址端(a0、a1、a2)的二進(jìn)制編碼在y0至y7對應(yīng)的輸出端以低電平譯出。比如:a2a1a0=110時,則y6輸出端輸出低電平信號,引腳功能如表3-2.。利用 e1、e2和e3可級聯(lián)擴(kuò)展成 24 線譯碼器;若外接一個反相器還可級聯(lián)擴(kuò)展成 32 線譯碼器。若將選通端中的一個作為數(shù)據(jù)輸入端時,74ls138還可作數(shù)據(jù)分配。 圖3-5 74ls138引腳圖 表3-2 三八譯碼器真值表3.2.4 74ls373鎖存器373為三態(tài)輸出的八 d 透明鎖存器,共有54s373 和 74ls373 兩種線路。我們使用的是74ls373,其引腳圖如下圖3-6。 表3-3 74ls373真值表 圖3-6 7

19、4ls373引腳圖引出端符號:d0d7是數(shù)據(jù)輸入端;/oe是三態(tài)允許控制端(低電平有效);le是鎖存允許端;q0q7是輸出端。其引腳功能如表3-3所示。當(dāng)三態(tài)允許控制端 /oe 為低電平時,q0q7為正常邏輯狀態(tài),可用來驅(qū)動負(fù)載或總線。當(dāng) /oe 為高電平時,q0q7 呈高阻態(tài),即不驅(qū)動總線,也不為總線的負(fù)載,但鎖存器內(nèi)部的邏輯操作不受影響。 當(dāng)鎖存允許端 le 為高電平時,q 隨數(shù)據(jù) d 而變。當(dāng) le 為低電平時,d 被鎖存在已建立的數(shù)據(jù)電平。當(dāng) le 端施密特觸發(fā)器的輸入滯后作用,使交流和直流噪聲抗擾度被改善 400mv。3.2.5 74ls04反相器74ls04是反相器。其結(jié)構(gòu)圖和真值

20、表如圖3-7。 圖3-7 74ls04結(jié)構(gòu)圖和真值表 由真值表可知,當(dāng)輸入為高電平時,輸出為低電平;當(dāng)輸入為低電平時,輸出為高電平。3.3 硬件原理圖設(shè)計3.3.1 并行i/o口擴(kuò)展8255a可以工作在3種工作方式,圖3-8是其一種接口邏輯。圖3-8 i/o接口擴(kuò)展電路 單片機(jī)的p0口作數(shù)據(jù)總線,引到8255芯片的數(shù)據(jù)輸入端d0d7,用于傳送cpu和8255a間的數(shù)據(jù)、命令和狀態(tài)字。p0經(jīng)過鎖存器用作地址總線,鎖存器的q0,q1接到8255的口地址選擇信號線a0,a1,用來選擇8255的輸出端口pa、pb和pc;鎖存器的q3、q4、q5接到譯碼器的地址端(a、b、c),譯出q3、q4、q5的編

21、碼信號;q6和q7接譯碼器的使能端/e2和/e3。p2.7接譯碼器的使能端e1,高電平有效??刂凭€有/rd、/wr、reset、/cs。 3.3.2 led數(shù)碼管驅(qū)動及顯示設(shè)計 led數(shù)碼管介紹按發(fā)光二極管單元連接方式分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(com)的數(shù)碼管,共陽數(shù)碼管在應(yīng)用時應(yīng)將公共極com接到+5v,當(dāng)某一字段發(fā)光二極管的陰極為低電平時,相應(yīng)字段就點亮,當(dāng)某一字段的陰極為高電平時,相應(yīng)字段就不亮。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(com)的數(shù)碼管,共陰數(shù)碼管在應(yīng)用時應(yīng)將公共極com接到地線gnd上,當(dāng)

22、某一字段發(fā)光二極管的陽極為高電平時,相應(yīng)字段就點亮,當(dāng)某一字段的陽極為低電平時,相應(yīng)字段就不亮。數(shù)碼管的外形及其結(jié)構(gòu)如圖3-9及3-10。 圖3-9數(shù)碼管外形圖 圖3-10數(shù)碼管結(jié)構(gòu)圖此次使用到的是共陽極數(shù)碼管,低電平點亮,每個字符對應(yīng)的編碼如下圖所示:表3-4 led字符編碼表驅(qū)動設(shè)計方案靜態(tài)顯示驅(qū)動靜態(tài)驅(qū)動也稱直流驅(qū)動。靜態(tài)驅(qū)動是指每個數(shù)碼管的每一個段碼都由一個單片機(jī)的i/o端口進(jìn)行驅(qū)動,或者使用如bcd碼二-十進(jìn)制譯碼器譯碼進(jìn)行驅(qū)動。靜態(tài)驅(qū)動的優(yōu)點是編程簡單,顯示亮度高,缺點是占用i/o端口多,如驅(qū)動6個數(shù)碼管靜態(tài)顯示則需要68=48根i/o端口來驅(qū)動。實際應(yīng)用時必須增加譯碼驅(qū)動器進(jìn)行驅(qū)

23、動,增加了硬件電路的復(fù)雜性。動態(tài)顯示驅(qū)動動態(tài)驅(qū)動是將所有數(shù)碼管的顯示的每一段a,b,c,d,e,f,g,dp的同名端連在一起,另外為每個數(shù)碼管的公共極com增加位選通控制電路,位選通由各自獨立的i/o線控制,當(dāng)單片機(jī)輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單片機(jī)對位選通com端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。通過分時輪流控制各個數(shù)碼管的的com端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示過程中,每位數(shù)碼管的點亮?xí)r間為12ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng)

24、,盡管實際上各位數(shù)碼管并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的i/o端口,而且功耗更低。需要點亮6個數(shù)碼管,經(jīng)以上論證分析,我們選用更為靈活的動態(tài)顯示。led驅(qū)動及顯示8255a的pa口用來段選,以控制每個數(shù)碼管顯示的字形。pa后接反相器,所以當(dāng)pa口輸出高電平時led被點亮,如圖3-11所示。圖3-11 led驅(qū)動原理圖8255a的pc口的pc3pc5后接3-8譯碼器用來位選,位選表3-5如下:pc5pc4pc3pc口選中的數(shù)碼管00000h8(個位)00108h7(十位)01010h6(百位)01

25、118h5(千位)10020h4(萬位)10128h3(十萬位)表3-5 led位選表3.3.3 鍵盤接口如圖3-12所示,8255a的pc口作掃描線,輸出鍵盤的掃描信號,pb口作輸入口,用來接收鍵盤讀入的信號。先給pc0賦值0,掃描鍵盤第一行,若pb口不全為高電平,則先延時10ms去抖動,然后接著讀b口,若仍不全為高,說明確實有鍵按下,由b口的低電平可確定按鍵。圖3-12 鍵盤接口電路3.3.4 最小系統(tǒng)圖 圖3-13 最小系統(tǒng)圖4. 軟件設(shè)計4.1 程序流程圖設(shè)計 開始調(diào)用keyscan()函數(shù),判斷按鍵值按下b鍵,設(shè)置計數(shù)值外部脈沖計數(shù)按下c鍵,計數(shù)器清零按下e鍵,退出程序按下d鍵,停止

26、計數(shù)調(diào)用ending()函數(shù),關(guān)外部中斷調(diào)用exit()函數(shù),退出所有程序數(shù)碼管顯示調(diào)用clear()函數(shù),數(shù)碼管清零 調(diào)用zhishu()函數(shù),鍵盤掃描置數(shù)值 結(jié)束按下a鍵,開始計數(shù)調(diào)用start()函數(shù),開外部中斷,對外部脈沖計數(shù)(1) 主程序 圖4-1 主程序流程圖(2) 置數(shù)按鍵掃描 置數(shù) 數(shù)碼管顯示 i6 轉(zhuǎn)主程序 n y y圖4-2 置數(shù)模塊框圖4.2程序代碼分析 4.2.1匯編程序代碼分析c8255 equ 0f22bh ;8255命令口地址p8255a equ 0f228h ;8255 pa口地址p8255b equ 0f229h ;8255 pb口地址p8255c equ 0

27、f22ah ;8255 pc口地址org 0000h ljmp main org 0020hmain:mov sp,#60hmov tmod,#05h ;p3.4脈沖:設(shè)定定時器t0為計數(shù)模式mov th0,#00hmov tl0,#00hmov 36h,#00h ;存tl0,判斷是否加1mov 30h,#00h ;個位mov 31h,#00h ;十位mov 32h,#00h ;百位mov 33h,#00h ;千位mov 34h,#00h ;萬位mov 35h,#00h ;十萬位 panduan: mov dptr,#c8255 ;寫8255控制字mov a,#82hmovx dptr,amo

28、v a,#01h ;掃描鍵盤第二行mov dptr,#p8255cmovx dptr,amov dptr,#p8255bmovx a,dptrcjne a,#0ffh,keya ;有鍵按下則判斷功能ljmp disp ;無鍵則顯示當(dāng)前計數(shù)值keya:cjne a,#0fbh,keyblcall start ;開始計數(shù)ljmp dispkeyb:cjne a,#0f7h,keycljmp zhsh ;置數(shù)keyc:cjne a,#0efh,keydlcall clear ;清零ljmp dispkeyd:cjne a,#0dfh,keyelcall ending ;停止計數(shù)ljmp dispke

29、ye:cjne a,#0bfh,panduanljmp exit ;程序退出;*start:setb tr0ret;-zhsh:key_l0: mov a,#02h ;鍵盤掃描第一行 mov dptr,#p8255c movx dptr,a mov dptr,#p8255b movx a,dptr cjne a,#0ffh,j_key_l0;判鍵是否按下,有鍵轉(zhuǎn)j_key_l0 sjmp key_l1 ;無鍵掃描第二行 j_key_l0: lcall delay0 ;延時消抖 mov dptr,#p8255b ;讀鍵值 movx a,dptr mov r1,#00h ;鍵值從0開始 sjmp

30、keycal ;計算鍵值 key_l1: mov a,#01h ;掃描第二行 mov dptr,#p8255c movx dptr,a mov dptr,#p8255b movx a,dptr cjne a,#0ffh,key8 ljmp xianshi ;無按鍵則顯示key8: cjne a,#0feh,key9 mov r1,#08 ;給個位賦值8 sjmp calc key9: cjne a,#0fdh,panduan mov r1,#09 ;給各位賦值9 ljmp calc ;讀取鍵值keycal: ;計算鍵碼 mov r0,#08h ;最多右移8次shift: rrc a ;a右移,

31、最低位進(jìn)入c jnc calc ;c為0轉(zhuǎn)calc inc r1 ;r1的值就是鍵值 djnz r0,shiftcalc: ;當(dāng)前值左移,r1的值給個位 mov 35h,34h mov 34h,33h mov 33h,32h mov 32h,31h mov 31h,30h mov 30h,r1 sjmp keywait keywait:mov dptr,#p8255b ;等待鍵釋放movx a,dptrcjne a,#0ffh,keywait xianshi:mov dptr,#p8255c;位選mov a,#00hmovx dptr,amov dptr,#ledmov a,30hmovc a

32、,a+dptrmov dptr,#p8255amovx dptr,alcall delay0mov dptr,#p8255c;位選mov a,#08hmovx dptr,amov dptr,#ledmov a,31hmovc a,a+dptrmov dptr,#p8255amovx dptr,alcall delay0mov dptr,#p8255c;位選mov a,#10hmovx dptr,amov dptr,#ledmov a,32hmovc a,a+dptrmov dptr,#p8255amovx dptr,alcall delay0mov dptr,#p8255c;位選mov a,#

33、18hmovx dptr,amov dptr,#ledmov a,33hmovc a,a+dptrmov dptr,#p8255amovx dptr,alcall delay0mov dptr,#p8255c;位選mov a,#20hmovx dptr,amov dptr,#ledmov a,34hmovc a,a+dptrmov dptr,#p8255amovx dptr,alcall delay0mov dptr,#p8255c;位選mov a,#28hmovx dptr,amov dptr,#ledmov a,35hmovc a,a+dptrmov dptr,#p8255amovx dp

34、tr,alcall delay0ljmp key_l0 ;-clear:mov 30h,#00hmov 31h,#00hmov 32h,#00hmov 33h,#00hmov 34h,#00hmov 35h,#00hmov th0,#00hmov tl0,#00hmov 36h,#00hret;-ending:clr tr0ret;-disp:mov dptr,#p8255c;位選mov a,#00hmovx dptr,amov dptr,#ledmov a,30hmovc a,a+dptrmov dptr,#p8255amovx dptr,alcall delay0mov dptr,#p82

35、55c;位選mov a,#08hmovx dptr,amov dptr,#ledmov a,31hmovc a,a+dptrmov dptr,#p8255amovx dptr,alcall delay0mov dptr,#p8255c;位選mov a,#10hmovx dptr,amov dptr,#ledmov a,32hmovc a,a+dptrmov dptr,#p8255amovx dptr,alcall delay0mov dptr,#p8255c;位選mov a,#18hmovx dptr,amov dptr,#ledmov a,33hmovc a,a+dptrmov dptr,#

36、p8255amovx dptr,alcall delay0mov dptr,#p8255c;位選mov a,#20hmovx dptr,amov dptr,#ledmov a,34hmovc a,a+dptrmov dptr,#p8255amovx dptr,alcall delay0mov dptr,#p8255c;位選mov a,#28hmovx dptr,amov dptr,#ledmov a,35hmovc a,a+dptrmov dptr,#p8255amovx dptr,alcall delay0loop:mov a,tl0cjne a,36h,d0 ;判斷是否要加1ajmp pa

37、nduan ;沒有脈沖則判斷有無功能鍵按下 d0:mov 36h,a ;tl0的值給36h供下一次判斷mov a,30hcjne a,#09h,d1 ;因為是十進(jìn)制計數(shù)器所以要滿10高位進(jìn)位,低 位清零。mov a,31hcjne a,#09h,d2mov a,32hcjne a,#09h,d3mov a,33hcjne a,#09h,d4mov a,34hcjne a,#09h,d5mov a,35hcjne a,#09h,d6mov 30h,#00hmov 31h,#00hmov 32h,#00hmov 33h,#00hmov 34h,#00hmov 35h,#00hajmp pandua

38、nd1:mov a,30hinc amov 30h,aajmp panduand2:mov a,31hinc amov 31h,amov 30h,#00hajmp panduand3:mov a,32hinc amov 32h,amov 30h,#00hmov 31h,#00hajmp panduand4:mov a,33hinc amov 33h,amov 30h,#00hmov 31h,#00hmov 32h,#00hajmp panduand5:mov a,34hinc amov 34h,amov 30h,#00hmov 31h,#00hmov 32h,#00hmov 33h,#00ha

39、jmp panduand6:mov a,35hinc amov 35h,amov 30h,#00hmov 31h,#00hmov 32h,#00hmov 33h,#00hmov 34h,#00hajmp panduandelay0:mov r0,#80h ;延時20ms子程序delay1: mov r3,#05h djnz r3,$ djnz r0,delay1retled: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhexit: end4.2.2 c語言代碼分析#include#include#define pa xbyte0xf228 /8255 p

40、a口地址#define pb xbyte0xf229 /8255 pb口地址#define pc xbyte0xf22a /8255 pc口地址#define com xbyte0xf22b /8255 命令口地址unsignedcharcode dofly_duanma=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 顯示段碼值09unsigned char code dofly_weima=0x28,0x20,0x18,0x10,0x08,0;/分別對應(yīng)相應(yīng)的數(shù)碼管點亮,即位碼unsigned char tempdata6=0x3f,

41、0x3f,0x3f,0x3f,0x3f,0x3f;/存儲顯示值的全局變量unsigned int num1;unsigned char a;void display(unsigned char firstbit,unsigned char num); /顯示函數(shù)unsigned char keyscan(void); /鍵盤掃描void delayus2x(unsigned char t); /us級延時函數(shù)void delayms(unsigned char t);/ms級延時函數(shù)void start(void);/開始計數(shù)void zhishu(void);/置數(shù)void clear(vo

42、id);/清零void ending(void);/停止計數(shù)void exit(void);/退出程序unsigned char zhsh(void);void main()unsigned char i;while(1)switch(keyscan()casea: start(); break;caseb: zhishu(); break;casec: clear(); break;cased: ending(); break;casee: exit(); break;default: break;i=10;while(i-)display(0,6);unsigned char keysca

43、n(void) /鍵盤掃描函數(shù),使用行列逐級掃描法unsigned char val;com=0x82;pc|=0x01;/掃描第二行pb=0xff;if(pb!= 0xff & pc=0x01)delayms(10);if( pb!=0xff)switch(pb)case 0xfe: val=8; break;case 0xfd: val=9; break;case 0xfb: val=a; break;case 0xf7: val=b; break;case 0xef: val=c; break;case 0xdf: val=d; break;case 0xbf: val=e; break

44、;case 0x7f: val=e; break;default: break;while( pb!=0xff);return val;pc|=0x02;/掃描第一行pb=0xff;if(pb!=0xff & pc=0x02)delayms(10);if(pb!=0xff)switch(pb)case 0xfe: val=0; break;case 0xfd: val=1; break;case 0xfb: val=2; break;case 0xf7: val=3; break;case 0xef: val=4; break;case 0xdf: val=5; break;case 0xbf: val=6; break;case 0x7f: val=7; break;default: break;while(pb!=0xff);return val;return 0xff;void delayus2x(unsigned char t) wh

溫馨提示

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

最新文檔

評論

0/150

提交評論