計(jì)時(shí)數(shù)字時(shí)鐘_第1頁(yè)
計(jì)時(shí)數(shù)字時(shí)鐘_第2頁(yè)
計(jì)時(shí)數(shù)字時(shí)鐘_第3頁(yè)
計(jì)時(shí)數(shù)字時(shí)鐘_第4頁(yè)
計(jì)時(shí)數(shù)字時(shí)鐘_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、微機(jī)原理課程設(shè)計(jì)- 24 -合肥學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系課程設(shè)計(jì)報(bào)告20082009 學(xué)年第一學(xué)期課程微型計(jì)算機(jī)原理與接口技術(shù)課程設(shè)計(jì)名稱計(jì)時(shí)數(shù)字時(shí)鐘學(xué)生姓名周杰學(xué)號(hào)0604032033專業(yè)班級(jí)06網(wǎng)絡(luò)工程(2)指導(dǎo)教師肖連軍老師2009 年 2月計(jì) 時(shí) 時(shí) 鐘一、題義分析及解決方案1題義與需求分析需要一個(gè)八位LED數(shù)碼管顯示器用于顯示時(shí)間(分,秒);顯示的初值在啟動(dòng)實(shí)驗(yàn)箱運(yùn)行程序后輸入;按任意鍵后時(shí)間開始走動(dòng),每隔一秒改變一次顯示值(每60秒為一分鐘,60分一小時(shí));能同時(shí)顯示分秒共四位;秒鐘為60時(shí),能自動(dòng)復(fù)位到零,并使分鐘加一;分鐘為60時(shí),能自動(dòng)復(fù)位到零。LED數(shù)碼管顯示器循環(huán)顯示分秒的

2、動(dòng)態(tài)值。現(xiàn)顯示過(guò)程中,按A鍵可重新置初值;按B鍵暫停時(shí)間,再按一次從當(dāng)前時(shí)間開始計(jì)時(shí);E、F鍵分別清除分鐘、秒鐘對(duì)應(yīng)兩位。最后,還有一個(gè)問(wèn)題就是如何控制計(jì)時(shí)信息能夠準(zhǔn)確無(wú)誤的顯示出來(lái),需要解決的就是選擇什么樣的外設(shè),即通過(guò)什么樣的外設(shè)來(lái)顯示時(shí)間?以上這些問(wèn)題都是我們?cè)O(shè)計(jì)計(jì)時(shí)時(shí)鐘需要解決的,現(xiàn)列舉如下:分、秒時(shí)鐘怎樣形成;計(jì)時(shí)控制;輸出顯示接口;外設(shè)。2解決問(wèn)題的方法及思路1)硬件部分單片機(jī)工作在單任務(wù)狀態(tài),時(shí)間充裕,速度不是主要矛盾,所以用軟件實(shí)現(xiàn)分、秒時(shí)鐘的形成和計(jì)時(shí)控制,以減少硬件開銷。 接口用硬件實(shí)現(xiàn)。根據(jù)實(shí)驗(yàn)平臺(tái)的具體情況,本課程設(shè)計(jì)選用了8279A芯片、LED發(fā)光二極管、十六進(jìn)制小鍵

3、盤。由于8279A的輸出電流與LED不匹配的問(wèn)題,需要驅(qū)動(dòng)電流,本實(shí)驗(yàn)中選擇74LS240。2)軟件部分計(jì)時(shí)器的初始時(shí)間設(shè)置:?jiǎn)?dòng)單片機(jī)并成功運(yùn)行程序后在十六進(jìn)制開關(guān)中輸入初值。錯(cuò)誤輸入時(shí)顯示ERROR信息。計(jì)時(shí):首先將秒位計(jì)時(shí)加1,判斷秒位是否為60,若不是,則直接顯示時(shí)間;若是,則將秒位置為00,且分位加1;分位同上。顯示:8279A芯片內(nèi)部有一個(gè)顯示RAM和一個(gè)FIFO RAM,可以暫存從小鍵盤中讀出的數(shù)據(jù),同時(shí)可以將內(nèi)存中的數(shù)據(jù)暫存到顯示RAM中,簡(jiǎn)化了程序復(fù)雜度。每次將各個(gè)位要顯示的數(shù)據(jù)處理好后到換碼表中找到對(duì)應(yīng)值,初始化8279后將值送到數(shù)據(jù)口即實(shí)現(xiàn)顯示的目的。1秒時(shí)間的設(shè)定:1秒

4、的等待時(shí)間由循環(huán)程序執(zhí)行的時(shí)間來(lái)決定,經(jīng)多次實(shí)驗(yàn)后來(lái)估計(jì)循環(huán)程序執(zhí)行的次數(shù)。3)功能擴(kuò)展考慮到實(shí)際情況,本實(shí)驗(yàn)除了完成任務(wù)書要求的分秒功能外,還增加了天和小時(shí)的功能。二、硬件設(shè)計(jì)1 8279A1)8279A在本設(shè)計(jì)中的作用 在本設(shè)計(jì)中用8279A芯片控制鍵盤輸入和LED顯示。2) 8279A的功能分析a)8279A主要特性8279A芯片是一種通用的可編程序的鍵盤/顯示接口器件,單個(gè)芯片就能完成鍵盤輸入和LED顯示控制兩種功能??膳c任何8位機(jī)接口。8279A芯片包括鍵盤輸入和顯示輸出兩個(gè)部分。若采用8279作為鍵盤/顯示器接口,則可以實(shí)現(xiàn)對(duì)鍵盤、顯示器自動(dòng)掃描,8279主要是管理鍵盤輸入和顯示器

5、輸出的。8279可編程鍵盤顯示器接口芯片具有動(dòng)態(tài)顯示驅(qū)動(dòng)電路簡(jiǎn)單、不占用CPU 的時(shí)間、可自動(dòng)進(jìn)行鍵盤掃描、與計(jì)算機(jī)接口方便、編程容易、系統(tǒng)靈活等特點(diǎn)當(dāng)今已成為設(shè)計(jì)計(jì)算機(jī)應(yīng)用系統(tǒng),特別是實(shí)時(shí)性較高的測(cè)控系統(tǒng)的首選器件之一。b)8279A的內(nèi)部結(jié)構(gòu)圖2-1 8279A的內(nèi)部結(jié)構(gòu)圖中,IRQ:中斷請(qǐng)求輸出線,DB0DB7:雙向數(shù)據(jù)總路線(傳送命令、數(shù)據(jù)、狀態(tài)),、:讀寫控制輸入端,RESET:復(fù)位輸入端,CLK:時(shí)鐘輸入端,:片選,C和/D(A0):片內(nèi)寄存器選址,OUTA0A1、OUTB0B3:8位顯示輸出端,:熄滅顯示輸出端,SL0SL3:公用掃描輸出線,RL0RL7:鍵盤回饋輸入線,SHIF

6、T:抵擋鍵輸入線,CNTL/STB:控制/選通輸入線。另外,8279的鍵盤接口部分內(nèi)部有一個(gè)8×8位先進(jìn)先出的堆棧(FIFO),用來(lái)存放鍵盤輸入代碼,顯示器接口部分內(nèi)部有一個(gè)16×8位顯示RAM,用來(lái)顯示段數(shù)據(jù),能為16位LED顯示器(或其它顯示器)提供多路掃描接口。c)8279A的引腳信號(hào)和功能8279可編程鍵盤顯示器接口芯片具有動(dòng)態(tài)顯示驅(qū)動(dòng)電路,不占用CPU 的時(shí)間、可自動(dòng)進(jìn)行鍵盤掃描、與計(jì)算機(jī)接口方便、編程容易、系統(tǒng)靈活等特點(diǎn)。 8279 是可編程的鍵盤/顯示接口芯片。它既具有按鍵處理功能,又具有自動(dòng)顯示功能,在單片機(jī)系統(tǒng)中應(yīng)用很廣泛。8279內(nèi)部有鍵盤 FIFO (

7、先進(jìn)先出堆棧)/傳感器,雙重功能的 8×8=64B RAM,鍵盤控制部分可控制 8×8=64 個(gè)按鍵或 8×8 陣列方式的傳感器。該芯片能自動(dòng)消抖并具有雙鍵鎖定保護(hù)功能。顯示 RAM容量為 16×8,即顯示器最大配置可達(dá) 16 位 LED數(shù)碼顯示。d)8279的命令字及其格式 8279有三種工作方式:鍵盤工作方式、顯示工作方式和傳感器工作方式。鍵盤工作方式:雙鍵互鎖和N鍵輪回。雙鍵互鎖是指當(dāng)有兩個(gè)以上按鍵同時(shí)按下時(shí),只能識(shí)別最后一個(gè)被釋放的按鍵,并把其鍵值送入內(nèi)部FIFO RAM中。N鍵輪回是指當(dāng)有多個(gè)按鍵同時(shí)按下時(shí),所有按鍵的鍵值均可按掃描順序依次存入

8、FIFO RAM中。顯示工作方式:是指CPU輸入至8279內(nèi)部FIFO RAM的數(shù)據(jù)的輸出格式,有8個(gè)字符左端入口顯示、16個(gè)字符左端入口顯示、8個(gè)字符右端入口顯示、16個(gè)字符右端入口顯示四種方式。傳感器方式:是指掃描傳感器陣列時(shí),一旦發(fā)現(xiàn)傳感器的狀態(tài)發(fā)生變化就置位INT向CPU申請(qǐng)中斷。選擇不同的工作方式均是通過(guò)CPU對(duì)8279送入命令來(lái)進(jìn)行控制。8279共有8種命令,命令寄存器為8位,其中D7D5為命令特征位,D4D0為命令的控制位。CPU對(duì)8279寫入的命令數(shù)據(jù)為命令字,讀出的數(shù)據(jù)為狀態(tài)字。8279共有八條命令,其功能及命令字格式分述如下。(1)鍵盤/顯示方式設(shè)置命令字命令格式: D7

9、D6 D5 D4 D3 D2 D1 D0 0 0 0 D D K K K其中:D7、D6、D5=000為方式設(shè)置命令特征位。DD(D4、D3):用來(lái)設(shè)定顯示方式,如表2-2所示。D4D3顯示方式008個(gè)字符顯示,左端入口0116個(gè)字符顯示,左端入口108個(gè)字符顯示,右端入口1016個(gè)字符顯示,右入口表2-2 顯示方式選擇所謂左入口 ,即顯示位置從最左一位(最高位)開始,以后逐次輸入的顯示字符逐個(gè)向右順序排列;所謂右入口,則是顯示位置從最右一位(最低位)開始,以后逐次輸入顯示字符時(shí),已有的顯示字符依次向左移動(dòng)。KKK(D2、D1、D0):用來(lái)設(shè)定七種鍵盤/顯示掃描方式,如表2-3所示。D2D1D

10、0鍵盤/顯示掃描方式000編碼掃描鍵盤,雙鍵鎖定001譯碼掃描鍵盤,雙鍵鎖定010編碼掃描鍵盤,N鍵輪回011譯碼掃描鍵盤,N鍵輪回100編碼掃描傳感器矩陣101譯碼掃描傳感器矩陣110選通輸入,編碼顯示掃描111選通輸入,譯碼顯示掃描表2-3 鍵盤/顯示掃描方式(2)時(shí)鐘編程命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 0 0 1 P P P P P其中:D7、D6、D5=001為時(shí)鐘命令特征位。PPPPP(D4、D3、D2、D1、D0)用來(lái)設(shè)定外部輸入CLK時(shí)鐘脈沖的分頻系數(shù)N。N取值范圍為231。如CLK輸入時(shí)鐘頻率為2MHZ,PPPPP應(yīng)被置為10100(N=20),

11、才可獲得8279內(nèi)部要求的100KHZ的時(shí)鐘頻率。(3)讀FIFO/傳感器RAM命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 0 1 0 AI X A A A其中:D7、D6、D5=010為讀FIFO/傳感器RAM命令特征位。該命令字只在傳感器方式時(shí)使用。在CPU讀傳感器RAM之前,必須用這條命令來(lái)設(shè)定所讀傳感器RAM中的地址。AAA(D2、D1、D0)為傳感器RAM中的八個(gè)字節(jié)地址。AI(D4)為自動(dòng)增量特征位。當(dāng)AI=1時(shí),每次讀出傳感器RAM后地址自動(dòng)加1使地址指向下一個(gè)存儲(chǔ)單元。這樣,下一個(gè)數(shù)據(jù)便從下一個(gè)地址讀出,而不必重新設(shè)置讀FIFO/傳感器RAM命令。在鍵盤工作

12、方式中,由于讀出操作嚴(yán)格按照先入先出順序,因此,不需使用這條命令。(4)讀顯示RAM命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 0 1 1 AI A A A A其中:D7、D6、D5=011為讀顯示RAM命令字的特征位。該命令字用來(lái)設(shè)定將要讀出的顯示RAM地址。AAAA(D3、D2、D1、D0)用來(lái)尋址顯示RAM中的存儲(chǔ)單元。由于位顯示RAM中有16個(gè)字節(jié)單元,故需要4位尋址。AI(D4)為自動(dòng)增量特征位。AI=1時(shí),每次讀出后地址自動(dòng)加1,指向下一地址。(5)寫顯示RAM命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 1 0 0 AI A A A A其中:

13、D7、D6、D5=100為寫顯示RAM命令字的特征位。在寫顯示RAM之前用這個(gè)命令字來(lái)設(shè)定將要寫入的顯示RAM地址。AAAA(D3、D2、D1、D0)為將要寫入的顯示RAM中的存儲(chǔ)單元地址。AI(D4)為自動(dòng)增量特征位。AI=1時(shí),每次寫入后地址自動(dòng)加1,指向下一次寫入地址。(6)顯示禁止寫入/消隱命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 1 0 1 X IW/A IW/B BL/A BL/B其中:D7、D6、D5=101為顯示禁止寫入/消隱命令特征位。IW/A、IW/ B(D3、D2)為A、B組顯示RAM寫入屏蔽位。當(dāng)A組的屏蔽位D3=1時(shí),A組的顯示RAM禁止寫入。因

14、此,從CPU寫入顯示器RAM數(shù)據(jù)時(shí),不會(huì)影響A的顯示。這種情況通常在采用雙4位顯示器時(shí)使用。因?yàn)閮蓚€(gè)四位顯示器是相互獨(dú)立的。為了給其中一個(gè)四位顯示器輸入數(shù)據(jù)而又不影響另一個(gè)四位顯示器,因此必須對(duì)另一組的輸入實(shí)行屏蔽。BL/A、BL/ B(D1、D0)為消隱設(shè)置位。用于對(duì)兩組顯示輸出消隱。若BL=1,對(duì)應(yīng)組的顯示輸出被消隱。當(dāng)BL=0,則恢復(fù)顯示。(7)清除命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 1 1 0 CD CD CD CF CA 其中:D7、D6、D5=110為清除命令特征位。清除顯示RAM方式如表2-4所示。D4D3D2清除方式10×將全部顯示RAM清

15、為00H110將全部顯示RAM置為20H,A組輸出0010,B組輸出0000111將全部顯示RAM置為FFH0××D0=0不清除,D0=1按上述方法清除表2-4 顯示RAM清除方式CF(D1)用來(lái)置空FIFO存儲(chǔ)器,當(dāng)CF=1時(shí),執(zhí)行清除命令后,F(xiàn)IFO RAM被置空,使INT輸出線復(fù)位。同時(shí),傳感器RAM的讀出地址也被置為0。CA (D0)為總清的特征位。它兼有CD和CF的聯(lián)合效能。在CF =1時(shí),對(duì)顯示的清除方式由D3、D2的編碼決定。顯示RAM清除時(shí)間約需160us。在此期間狀態(tài)字的最高位Du=1,表示顯示無(wú)效。CPU不能向顯示RAM寫入數(shù)據(jù)。(8)結(jié)束中斷/錯(cuò)誤方式

16、設(shè)置命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 1 1 1 E X X X X其中:D7、D6、D5=111為該命令的特征位。此命令有兩種不同的作用。作為結(jié)束中斷命令。在傳感器工作方式中使用。每當(dāng)傳感器狀態(tài)出現(xiàn)變化時(shí),掃描檢測(cè)電路就將其狀態(tài)寫入傳感器RAM,并啟動(dòng)中斷邏輯,使INT變高,向CPU 請(qǐng)求中斷,并且禁止寫入傳感器RAM。此時(shí),若傳感器RAM 讀出地址的自動(dòng)遞增特性沒有置位(AI=0),則中斷請(qǐng)求INT在CPU第一次從傳感器RAM讀出數(shù)據(jù)時(shí)就被清除。若自動(dòng)遞增特征已置位(AI=1),則CPU對(duì)傳感器RAM 的讀出并不能清除INT,而必須通過(guò)給8279寫入結(jié)束中斷/

17、錯(cuò)誤方式設(shè)置命令才能使INT變低。因此,在傳感器工作方式中,此命令用來(lái)結(jié)束傳感器RAM的中斷請(qǐng)求。作為特定錯(cuò)誤方式設(shè)置命令。在8279已被設(shè)定為鍵盤掃描N鍵輪回方式以后,如果CPU給8279又寫入結(jié)束中斷/錯(cuò)誤方式設(shè)置命令(E=1),則8279將以一種特定的錯(cuò)誤方式工作。這種方式的特點(diǎn)是:在8279的消抖周期內(nèi),如果發(fā)現(xiàn)多個(gè)按鍵同時(shí)按下,則FIFO狀態(tài)字中的錯(cuò)誤特征位S/E將置1,并產(chǎn)生中斷請(qǐng)求信號(hào)和禁止寫入FIFO RAM。上述八種用于確定8279操作方式的命令字皆由D7D6D5特征位確定,輸入8279后能自動(dòng)尋址相應(yīng)的命令寄存器。因此,寫入命令字時(shí)唯一的要求是使數(shù)據(jù)選擇信號(hào)A0 =1。e)

18、8279的狀態(tài)字及其格式 8279的FIFO狀態(tài)字,主要用于鍵盤和選通工作方式,以指示FIFO RAM中的字符數(shù)和有無(wú)錯(cuò)誤發(fā)生。其格式為: D7 D6 D5 D4 D3 D2 D1 D0 DU S/E O U F N N N其中:Du(D7)為顯示無(wú)效特征位。當(dāng) Du=1表示顯示無(wú)效。當(dāng)顯示RAM由于清除顯示或全清命令尚未完成時(shí),Du=1,此時(shí)不能對(duì)顯示RAM寫入。S/E(D6)為傳感器信號(hào)結(jié)束/錯(cuò)誤特征位。該特征位在讀出FIFO 狀態(tài)字時(shí)被讀出。而在執(zhí)行CF =1的清除命令時(shí)被復(fù)位。當(dāng)8279工作在傳感器工作方式時(shí),若S/E=1,表示傳感器的最后一個(gè)傳感器信號(hào)已進(jìn)入傳感器RAM;而當(dāng)8279

19、工作在特殊錯(cuò)誤方式時(shí),若S/E=1則表示出現(xiàn)了多鍵同時(shí)按下錯(cuò)誤。O、U(D5、D4)為超出、不足錯(cuò)誤特征位。對(duì)FIFO RAM 的操作可能出現(xiàn)兩種錯(cuò)誤:超出或不足。當(dāng)FIFO RAM 已經(jīng)充滿時(shí),其它的鍵盤數(shù)據(jù)還企圖寫入FIFO RAM ,則出現(xiàn)超出錯(cuò)誤,超出錯(cuò)誤特征位O(D5)置1;當(dāng)FIFO RAM已經(jīng)置空時(shí),CPU還企圖讀出,則出現(xiàn)不足錯(cuò)誤,不足錯(cuò)誤特征位U(D4)置1。F(D3)表示FIFO RAM中是否已滿標(biāo)志,若F=1表示已滿。NNN(D2、D1、D0)表示FIFO RAM中的字符數(shù)據(jù)個(gè)數(shù)。f)數(shù)據(jù)輸入/輸出格式對(duì)8279輸入/輸出數(shù)據(jù)不僅要先確定數(shù)據(jù)地址口,而且數(shù)據(jù)存放也要按一定

20、格式,其格式在鍵盤和傳感器方式有所不同。(1) 鍵盤掃描方式數(shù)據(jù)輸入格式鍵盤的行號(hào)、列號(hào)及控制鍵格式如下:圖2-2 鍵盤的行號(hào)、列號(hào)及控制鍵格式控制鍵CNTL、SHIFT為單獨(dú)的開關(guān)鍵。CNTL與其它鍵連用作特殊命令鍵,SHIFT可作上、下?lián)蹩刂奇I。(2)傳感器方式數(shù)據(jù)輸入格式此種方式8位輸入數(shù)據(jù)為RL0RL7的狀態(tài)。格式如下: D7 D6 D5 D4 D3 D2 D1 D0RL7 RL6 RL5 RL4 RL3 RL2 RL1 RL02.74LS138譯碼器1) 74LS138譯碼器在本設(shè)計(jì)中的作用 掃描計(jì)數(shù)器采用編碼工作方式2) 74LS138譯碼器的功能分析74LS138是3/8譯碼器,

21、即對(duì)3個(gè)輸入信號(hào)進(jìn)行譯碼。得到8個(gè)輸出狀態(tài)。G1,G2A,G2B,為數(shù)據(jù)允許輸出端,G2A,G2B低電平有效。G1高電平有效。A,B,C為譯碼信號(hào)輸出端,Y0Y7為譯碼輸出端,低電平有效。 圖2-3 74LS138 圖2-4 功能表 3) 74LS138譯碼器的技術(shù)參數(shù) 極限值 電源電壓-7V 輸入電壓 74LS138-7V 工作環(huán)境溫度 74LS138-070 貯存溫度- 65150 3. 74LS2401) 74LS240譯碼器在本設(shè)計(jì)中的作用本設(shè)計(jì)實(shí)驗(yàn)中主要是為增加LED的驅(qū)動(dòng)電流2) 74LS240譯碼器的功能分析74LS240 TTL 八反相三態(tài)緩沖器/線驅(qū)動(dòng)器引出端符號(hào): 1A,2

22、A 輸入端 , 三態(tài)允許端(低電平有效) 1Y8Y 輸出端 圖2-5 74LS240邏輯圖 輸入輸出AYLLHLHXHLZ表2-5 74LS240功能表3) 74LS240譯碼器的技術(shù)參數(shù) 極限值: 電源電壓 . 7V 輸入電壓 . 5.5V 輸出高阻態(tài)時(shí)高電平電壓 . 5.5V 工作環(huán)境溫度 74LS240 . 070 存儲(chǔ)溫度 . -65150 4. 小鍵盤1) 小鍵盤在本設(shè)計(jì)中的作用本設(shè)計(jì)中,小鍵盤用于輸入二進(jìn)制數(shù)字。2) 小鍵盤的功能分析通常使用的鍵盤是矩陣結(jié)構(gòu)的。對(duì)于4×4=16個(gè)鍵的鍵盤,采用矩陣方式只要用8條引線和2個(gè)8位端口便完成鍵盤的連接。如圖,這個(gè)矩陣分為4行4列

23、,如果鍵5按下,則第1行和第1列線接通而形成通路。如果第1行線接低電平,則鍵5的閉合,會(huì)使第1列線也輸出低電平。矩陣式鍵盤工作時(shí),就是按行線和列線的電平來(lái)識(shí)別閉合鍵的。 圖2-5 4×4鍵盤矩陣圖行掃描法識(shí)別按鍵的原理如下:先使第0行接低電平,其余行為高電平,然后看第0行是否有鍵閉合。這是通過(guò)檢查列線電位來(lái)實(shí)現(xiàn)的,即在第0行接低電平時(shí),看是否有哪條列線變成低電平。如果有某列線變?yōu)榈碗娖剑瑒t表示第0行和此列線相交位置上的鍵被按下;如果沒有任何一條列線為低電平,則說(shuō)明第0行沒有任何鍵被按下。此后,再將第1行接低電平,檢測(cè)是否有變?yōu)榈碗娖降牧芯€。如此重復(fù)地掃描,直到最后一行。在掃描過(guò)程中,

24、當(dāng)發(fā)現(xiàn)某一行有鍵閉合時(shí),也就是列線輸入中有一位為0時(shí),便退出掃描,通過(guò)組合行線和列線即可識(shí)別此刻按下的是哪一鍵。實(shí)際應(yīng)用中,一般先快速檢查鍵盤中是否有鍵按下,然后再確定按鍵的具體位置。為此,先使所有行線為低,然后檢查列線。這時(shí)如果列線有一位為0,則說(shuō)明必有鍵被按下, 采用掃描法可進(jìn)一步確定按鍵的具體位置。5.七段LED顯示器1) LED作用LED發(fā)光二級(jí)管(Light-Emitting Diode),在本設(shè)計(jì)中采用7段數(shù)字發(fā)光二級(jí)管,做為終端顯示。顯示時(shí)間的分秒。2)LED功能分析物理構(gòu)造:LED發(fā)光二級(jí)管,采用砷化鎵、鎵鋁砷、和磷化鎵等材料制成,其內(nèi)部結(jié)構(gòu)為一個(gè)PN結(jié),具有單向?qū)щ娦浴?圖2

25、-6 LED結(jié)構(gòu)圖數(shù)字成像:將七個(gè)發(fā)光管進(jìn)行組合,排列成數(shù)字圖形8,再根據(jù)需要控制七個(gè)管的亮與滅,即可顯示出定義數(shù)字。字型A B C Da b c d e f g bpOX00 0 0 01 1 1 1 1 1 0 03f10 0 0 10 1 1 0 0 0 0 00620 0 1 01 1 0 1 1 0 1 05b30 0 1 11 1 1 1 0 0 1 04f40 1 0 00 1 1 0 0 1 1 0 6650 1 0 11 0 1 1 0 1 1 0 6d60 1 1 00 0 1 1 1 1 1 07d70 1 1 11 1 1 0 0 0 0 00781 0 0 01 1

26、1 1 1 1 1 07f91 0 0 11 1 1 0 0 1 1 06fA1 0 1 01 1 1 0 1 1 1 077B1 0 1 10 0 1 1 1 1 1 0 7cC1 1 0 01 0 0 1 1 1 0 039D1 1 0 10 1 1 1 1 0 1 05eE1 1 1 01 0 0 1 1 1 1 079F1 1 1 11 0 0 0 1 1 1 071表2-6 LED數(shù)碼表3) LED技術(shù)參數(shù)表2-7 LED技術(shù)參數(shù)表6. 硬件總邏輯圖及其說(shuō)明 圖2-7 硬件接線圖圖中8279的地址由和A0決定,故數(shù)據(jù)口地址為7FFEH,命令口地址為7FFFH。所接的16個(gè)按鍵,掃描線

27、接在74HC138的譯碼輸出端和上,當(dāng)為0(SL2SL1SL0=000)時(shí),掃描第1列按鍵,當(dāng)為0(SL2SL1SL0=001)掃描第2列按鍵,故07號(hào)按鍵的鍵值為00H07H,815號(hào)按鍵鍵值為08H0FH。當(dāng)某一按鍵被按下后,鍵值就自動(dòng)進(jìn)入緩沖區(qū),當(dāng)8279內(nèi)部RAM不空時(shí)由INT輸出高電平告知CPU取走,故INT連接CPU的中斷輸入需加一反向器。8279鍵盤配置最大為8×8,若要配置64個(gè)按鍵,其它列掃描線可分別連至至上,形成8行8列的按鍵掃描電路。圖中顯示部分段選碼由8279的OUTA3OUTA0、OUTB3OUTB0通過(guò)驅(qū)動(dòng)器74LS240提供,位選碼由SL2SL0 經(jīng)3-

28、8譯碼器通過(guò)驅(qū)動(dòng)器74LS240提供。三、控制程序設(shè)計(jì)1. 控制程序設(shè)計(jì)思路1)主程序部分本程序主要實(shí)現(xiàn)的功能包括時(shí)間初值設(shè)置,輸入錯(cuò)誤則會(huì)提示ERROR,并按任意鍵重新輸入。正確輸入完按任意鍵開始計(jì)時(shí)。A、B、C、D、E、F鍵為功能鍵,用于時(shí)間重置,時(shí)間暫停及清除時(shí)分秒各位。程序開始條件查詢是否有按鍵,當(dāng)按鍵按下,8279狀態(tài)字低三位為此時(shí)按鍵按下次數(shù),由此判斷是否從8279數(shù)據(jù)端口讀入數(shù)據(jù),當(dāng)有按鍵按下時(shí),從8279讀數(shù)據(jù)到內(nèi)存中,同時(shí)COUNT變量加一,當(dāng)COUNT增加到9時(shí),停止檢查是否有按鍵按下。CALL SCAN_KEY ;鍵掃描JNC START2;沒有按鍵XCHG AL,KEY

29、COUNTINC ALCMP AL,9JZ START4XCHG AL,KEYCOUNTCALL KEY_NUM ;鍵值轉(zhuǎn)換為鍵號(hào)STOSB數(shù)據(jù)存入內(nèi)存的HOUR,MIN,SED共八個(gè)字節(jié)單元中,每個(gè)單元對(duì)應(yīng)一個(gè)數(shù)據(jù),首先判斷輸入的天、時(shí)、分、秒是否在合理的范圍內(nèi),如果不在,顯示出錯(cuò)信息,并跳回到程序初始化部分,等待重新輸入。如果輸入正確,則開始計(jì)時(shí),每次顯示前將數(shù)據(jù)從內(nèi)存讀到不同的寄存器中,如將秒鐘兩位讀到AX中,比較AL是否到10,沒有則跳出判斷,直接從內(nèi)存中讀出時(shí)間顯示;若到10了,則將秒鐘個(gè)位清零,并對(duì)AH加一后再寫回到內(nèi)存中。如此類推,判斷分鐘時(shí)鐘各個(gè)位。應(yīng)注意的是,在判斷時(shí)鐘個(gè)位時(shí)

30、,既要比較其是否到4,又要判斷是否到十,到十則清零,十位加一;到四則繼續(xù)判斷十位是否到2,若十位到2,清除時(shí)鐘兩位。判斷天數(shù)時(shí),規(guī)定天數(shù)的最大值為30,天數(shù)個(gè)位到十清零,十位加一,天數(shù)十位大于2且個(gè)位大于0則出錯(cuò)。必須保證天數(shù)十位小于3,天數(shù)個(gè)位小于10.或者天數(shù)個(gè)位為10,個(gè)位為0.此時(shí)若天數(shù)加一,則天數(shù)的個(gè)位,十位同時(shí)清零。;秒鐘進(jìn)一,比較秒鐘個(gè)位是否到10MOVAL,SEC1;秒鐘SEC0,SEC1單元INCALMOVSEC1,ALCMPAL,10JNZCALL_SHOWMOVSEC1,0;比較秒鐘十位是否到6MOVAL,SEC0INCALMOVSEC0,ALCMPAL,6JNZCALL

31、_SHOWMOVSEC0,02)鍵盤掃描子程序時(shí)間顯示等待的一秒鐘,是通過(guò)循環(huán)執(zhí)行掃描子程序來(lái)實(shí)現(xiàn)的。判斷有按鍵通過(guò)讀8279狀態(tài)字的低三位是否全為零。若不全為零,向控制口寫讀FIFO RAM控制字,從數(shù)據(jù)口讀數(shù)據(jù)到AL中。AL為0AH,則置CF為1;AL為0BH,則將FLAG_B取反;AL為0CH,則清除天位;AL為0DH,則清除小時(shí)位;AL為0EH,則清除分鐘位;AL為0FH,則清除秒位。結(jié)束后主程序會(huì)判斷CF位,CF=1,則跳到程序初始化部分,重新開始;判斷FLAG_B位,為1則暫停計(jì)時(shí),不停掃描按鍵,直到B鍵再次按下,重新開始計(jì)時(shí)。3)顯示子程序首先清除上一次顯示的結(jié)果,清除完畢后將8

32、279位選碼復(fù)位。將指針指向時(shí)間所在單元的首地址,依次取出換碼,輸出到數(shù)據(jù)端口,依次輸出天、時(shí)、分、秒。2.程序流程圖程序主要由三四大功能塊組成:控制整個(gè)過(guò)程的主程序,初設(shè)時(shí)間、修改時(shí)間、計(jì)時(shí)等;顯示時(shí)間子程序,將內(nèi)存中的當(dāng)前時(shí)間通過(guò)8279顯示到LED上;按鍵掃描子程序,判斷當(dāng)前按鍵值,并執(zhí)行相應(yīng)的計(jì)時(shí)清零工作。時(shí)間加一秒并處理和顯示開始板卡的初始化設(shè)定初始時(shí)間時(shí)間設(shè)置合法輸出錯(cuò)誤信息時(shí)間初值寫入8279CX = 40延時(shí)20毫秒有功能鍵按下CX = 0退出退出CX = CX - 1功能處理模塊YYYYNNNN圖3-1 主控程序流程圖3.控制程序24.MODELTINYPCIBAR3EQU1

33、CH;8位I/O空間基地址(它就是實(shí)驗(yàn)儀的基地址,也為DMA & 32 BIT RAM板卡上的8237提供基地址)Vendor_IDEQU10EBH;廠商ID號(hào)Device_IDEQU8376;設(shè)備ID號(hào).STACK100.DATAIO_Bit8_BaseAddress DW?msg0DB'BIOS不支持訪問(wèn)PCI $'msg1DB'找不到Star PCI9052板卡 $'msg2DB'讀8位I/O空間基地址時(shí)出錯(cuò)$'DAY DB 2 DUP(?)HOUR DB 2 DUP(?);時(shí),分,秒MIN DB 2 DUP(?);XX:XX:XX

34、SEC DB 2 DUP(?) TEMP DB 8 DUP(?)KEYCOUNTDB?FLAG_BDB0LED_TABDB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 080H,90H,88H,83H,0C6H,0A1H,86H,8EHERRORDB086H,88H,88H,0C0H,88HCMD_8279 DW 00B1H;8279命令字、狀態(tài)字地址DATA_8279 DW 00B0H;8279讀寫數(shù)據(jù)口的地址.CODESTART: MOVAX,DATAMOVDS,AXNOPCALLInitPCICALLModifyAddress;根據(jù)PCI提供的基地址,

35、將偏移地址轉(zhuǎn)化為實(shí)地址CALL INIT8279 ;初始化子程序MOV KEYCOUNT,0LEADI,DAYSTART2:CALL SCAN_KEY ;鍵掃描 JNC START2;沒有按鍵 XCHGAL,KEYCOUNT INCAL CMP AL,9 JZ START4 XCHG AL,KEYCOUNT CALL KEY_NUM ;鍵值轉(zhuǎn)換為鍵號(hào)STOSB LEA BX,LED_TAB;字型碼表 XLAT CALL WRITE_DATA JMP START2 START4:LEA SI,DAYLODSBMOV AH,ALLODSBCMPAX,0301HJGESTART9CMPAL,0AHJ

36、GESTART9CMPAX,0JBESTART9LODSBMOVAH,ALLODSBCMPAX,0204HJGESTART9LODSBMOVAH,ALLODSBCMPAL,0AHJGESTART9MOV CX,2START8:LODSBMOVAH,ALLODSBCMPAX,0600HJGESTART9CMPAL,0AHJGESTART9LOOPSTART8MOVAX,0 JMPSTART5START9:CALLINIT8279_1PUSHCXMOVCX,5LEASI,ERRORSTART10:LODSBCALLWRITE_DATALOOPSTART10POPCXCALLDL2SCALLINIT

37、8279_1MOV KEYCOUNT,0LEADI,DAYJMPSTART2START5:MOVCX,40LOOP_1:CALLDL20MSCALLSCAN_KEY_CHJNCSCAN_NEXTCALLINIT8279_1 ;A鍵MOVAX,0MOVKEYCOUNT,0LEADI,DAYJMPSTART2SCAN_NEXT:CMPFLAG_B,1JNELOOP_2JMPLOOP_1LOOP_2:LOOPLOOP_1MOVAL,SEC1;比較秒鐘個(gè)位是否到10INCALMOVSEC1,ALCMPAL,10JNZSKIP_1MOVSEC1,0MOVAL,SEC0;比較秒鐘十位是否到6INCALMO

38、VSEC0,ALCMPAL,6JNZSKIPJMPGO_ONSKIP_1:JMPSKIPGO_ON:MOVSEC0,0MOVAL,MIN1;比較分鐘個(gè)位是否到10INCALMOVMIN1,ALCMPAL,10JNZSKIPMOVMIN1,0MOVAL,MIN0;比較分鐘十位是否到6INCALMOVMIN0,ALCMPAL,6JNZSKIPMOVMIN0,0MOVAL,HOUR1;比較時(shí)鐘個(gè)位是否到4INCALMOVHOUR1,ALCMPAL,4JNZSTART6MOVAL,HOUR0CMPAL,2JNZSKIPMOVHOUR0,0MOVHOUR1,0JMPSTART13SKIP:JMPCALL

39、_SHOWSTART6:CMPAL,10;比較時(shí)鐘個(gè)位是否到10JNZCALL_SHOWMOVHOUR1,0MOVAL,HOUR0INCALMOVHOUR0,ALJMPCALL_SHOWSTART13:MOVAL,DAY1INCALCMPAL,1JZSTART11CMPAL,10JNZCALL_SHOWMOVDAY1,0MOVAL,DAY0INCALMOVDAY0,ALJMPCALL_SHOWSTART11:MOVAL,DAY0CMPAL,3JNZSTART12MOVDAY1,1MOVDAY0,0JMPCALL_SHOWSTART12:MOVAL,DAY0INCALMOVDAY0,ALJNZC

40、ALL_SHOWCALL_SHOW:CALLSHOW;顯示CALLIfExit;判斷是否退出JNZSTART_EXITSTART7:JMPSTART5;無(wú)鍵盤按鍵按下,循環(huán)顯示START_EXIT:JMPNEAR PTR EXITCOPYPROCNEARPUSHCXPUSHSIPUSHDXMOVCX,8MOVSI,0DO:MOVDL,DAYSIMOVTEMPSI,DLINCSILOOPDOPOPDXPOPSIPOPCXRETCOPYENDPCOPY_1PROCNEARPUSHCXPUSHSIPUSHDXMOVCX,8MOVSI,0DO_1:MOVDL,TEMPSIMOVDAYSI,DLINCS

41、ILOOPDO_1POPDXPOPSIPOPCXRETCOPY_1ENDPINIT8279PROC NEAR;8279初始化 MOV DX,CMD_8279;CMD_8279為寫命令地址、讀狀地址 MOV AL,34H ;可編程時(shí)鐘設(shè)置,設(shè)置分頻系數(shù)(20分頻) OUT DX,AL MOV AL,10H;8*8字符顯示,左邊輸入,外部譯碼鍵掃描方式 OUT DX,AL CALL INIT8279_1 RETINIT8279 ENDPINIT8279_1PROC NEAR CALL CLEAR;清顯示 MOV AL,90H;從第一個(gè)數(shù)碼管開始移位顯示 OUT DX,AL RETINIT8279_

42、1 ENDPCLEAR PROC NEAR MOV DX,CMD_8279 MOV AL,0DEH ; 清除命令 OUT DX,ALWAIT1: IN AL,DX TEST AL,80H JNZ WAIT1; 顯示RAM清除完畢嗎? RETCLEAR ENDPSCAN_KEY PROC NEARMOV DX,CMD_8279 IN AL,DX;讀狀態(tài)READ_FIFO:ANDAL,7 JZ NO_KEY ;是否有鍵按下READ:MOV AL,40HOUT DX,AL;讀FIFO RAM MOV DX,DATA_8279IN AL,DX STC;有鍵JMP SCAN_KEY1NO_KEY: CL

43、C;無(wú)鍵按下,清CF SCAN_KEY1:RETSCAN_KEY ENDPSCAN_KEY_CHPROC NEARMOV DX,CMD_8279PUSHCX IN AL,DX;讀狀態(tài)ANDAL,7 JZ NO_KEY_CH_1 ;是否有鍵按下MOV AL,40HOUT DX,AL;讀FIFO RAM MOV DX,DATA_8279IN AL,DXCMPAL,0CAH;A鍵按下JNESCAN_KEY_BSTCPOPCX;有A鍵JMPSCAN_CHNO_KEY_CH_1:JMPNO_KEY_CHSCAN_KEY_B:CMPAL,0CBH;B鍵第一次按下,暫停;再按一次,重新開始計(jì)時(shí)JNESCAN

44、_KEY_CCMPFLAG_B,0JEFLAGMOVFLAG_B,0JMPNO_KEY_CHFLAG:MOVFLAG_B,1JMPNO_KEY_CHSCAN_KEY_C:CMPAL,0CCHJNESCAN_KEY_DMOVCX,2LEADI,DAYCALLCOPYSCAN_DAY:CALLSCAN_KEYJNCSCAN_DAY;無(wú)按鍵按下CALLKEY_NUM;有按鍵,轉(zhuǎn)換鍵值STOSB;替換掉原來(lái)時(shí)鐘的兩位(先高后低)CALLINIT8279_1CALLSHOWLOOPSCAN_DAYMOVAH,DAY0MOVAL,DAY1CMPAX,0301HJGEER_1CMPAX,0JBEER_1CM

45、PAL,0AHJGEER_1JMPNO_KEY_CHSCAN_KEY_D:CMPAL,0CDH;D鍵按下JNESCAN_KEY_EMOVCX,2LEADI,HOURCALLCOPYSCAN_HOUR:CALLSCAN_KEYJNCSCAN_HOUR;無(wú)按鍵按下CALLKEY_NUM;有按鍵,轉(zhuǎn)換鍵值STOSB;替換掉原來(lái)時(shí)鐘的兩位(先高后低)CALLINIT8279_1CALLSHOWLOOPSCAN_HOURMOVAH,HOUR0MOVAL,HOUR1CMPAX,0204HJGEER_1CMPAL,0AHJGEER_1JMPNO_KEY_CHSCAN_KEY_E:CMPAL,0CEH;E鍵按下JNESCAN_KEY_FMOVCX

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論