




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、60 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院2006級(jí)硬件課程設(shè)計(jì)報(bào)告 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院硬件課程設(shè)計(jì)報(bào)告姓 名: 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 班 級(jí): 設(shè)計(jì)題目: 可編程作息時(shí)間控制器 成 員: 指導(dǎo)教師: 職 稱: 2008年 6月30日 課程設(shè)計(jì)指導(dǎo)教師評(píng)閱書指導(dǎo)教師評(píng)語(yǔ):成 績(jī): 指導(dǎo)教師簽字: 年 月 日可可編程作息時(shí)間控制器摘 要在本次可編程作息時(shí)間控制器的設(shè)計(jì)的過(guò)程中我們?nèi)朔止ず献?,完成了?、鍵盤的掃描程序的設(shè)計(jì),利用8255a并行口做一個(gè)掃描鍵盤程序,把按鍵輸入的鍵碼,通過(guò)8255 pc口輸出顯示在七段數(shù)碼管上。8255pa口低4位做鍵盤行的輸入線,pb口低4位作為鍵盤的列輸入線,同時(shí)其高
2、4位讀取鍵盤的行信息,這樣一來(lái),用輸入指令讀取b口狀態(tài)時(shí),可同時(shí)讀取鍵盤的行列信息。8255 pa口高4位作為四位七段數(shù)碼管的位選線。編寫程序通過(guò)逐行逐列掃描,可獲得所按鍵的行列信息,及該鍵所對(duì)應(yīng)的鍵號(hào)并利用查表找出其所對(duì)應(yīng)的數(shù)碼管顯示碼。將該信息通過(guò)8255 pc口輸出到七段數(shù)碼管上,顯示當(dāng)前按鍵值。每次按鍵輸出鍵值時(shí),通過(guò)改變8255 pa口高4位狀態(tài),使四位七段數(shù)碼管輪流顯示不同的鍵值。 2、定時(shí)計(jì)時(shí)程序,通過(guò)上述所設(shè)計(jì)的鍵盤輸入定時(shí)時(shí)間,計(jì)算初值,利用可編程的計(jì)數(shù)/定時(shí)器8253a進(jìn)行計(jì)時(shí),實(shí)現(xiàn)定時(shí)報(bào)告。完成可編程作息時(shí)間控制器的設(shè)計(jì)。 本設(shè)計(jì)實(shí)現(xiàn)了設(shè)定時(shí)間的顯示,到時(shí)提示等功能,基本
3、上到達(dá)了我們最初設(shè)計(jì)的要求。 3、本設(shè)計(jì)中所用芯片:8255,8253,74ls138; 利用了44矩陣的小鍵盤,及指示燈。所用做圖工具:protell99se、word關(guān)鍵詞8255a ;8253 ;鍵盤 ;設(shè)置定時(shí)時(shí)間 ;計(jì)數(shù)定時(shí)目 錄總體設(shè)計(jì)部分1 設(shè)計(jì)任務(wù)與要求1 1.1、題目理解1 1.2、任務(wù)要求12 總體方案1 2.1、設(shè)計(jì)思路1 2.2、總體設(shè)計(jì)電路圖13硬件方案2 3.1、所用芯片簡(jiǎn)介2 3.1.1、8255芯片簡(jiǎn)介2 3.1.2、8253芯片簡(jiǎn)介4 3.2、各部分電路圖 7 3.2.1、鍵盤部分電路圖7 3.2.2、鍵盤及顯示部分電路圖9 3.2.3、計(jì)時(shí)部分電路圖10 4
4、軟件方案1041、設(shè)計(jì)的原理104.1.1、鍵盤的設(shè)計(jì)原理104.1.2、顯示部分的設(shè)計(jì)原理124.1.3、計(jì)時(shí)部分的設(shè)計(jì)原理134.2、程序流程圖144.2.1、鍵盤掃描流程圖144.2.2、顯示部分程序圖15專題設(shè)計(jì)部分1 硬件(軟件)詳細(xì)設(shè)計(jì)161.1、程序清單及相應(yīng)的說(shuō)明16 1.2、設(shè)計(jì)方案測(cè)試22 1.2.1、單個(gè)程序測(cè)試22 1.2.2、總體程序測(cè)試232總結(jié)23 2.1、本設(shè)計(jì)的可行性與優(yōu)點(diǎn)分析232.2、設(shè)計(jì)中的不足分析與改進(jìn)233.心得體會(huì)26參考文獻(xiàn)26總體設(shè)計(jì)部分1 設(shè)計(jì)任務(wù)與要求1.1、題目理解可編程作息時(shí)間控制器可理解為可編程即可設(shè)置且可重置的鬧鐘。設(shè)置一個(gè)時(shí)間,到
5、設(shè)置時(shí)間時(shí)機(jī)器自動(dòng)叫響且伴有指示燈亮。1.2、任務(wù)要求 利用鍵盤輸入預(yù)設(shè)定的時(shí)間,設(shè)計(jì)一個(gè)具有時(shí).分計(jì)時(shí),4位數(shù)字顯示的時(shí)鐘電路,能按設(shè)定時(shí)間自動(dòng)叫響且伴有指示燈亮.2 總體方案2.1、設(shè)計(jì)思路利用8255a設(shè)計(jì)4行4列的矩陣鍵盤,并與4位七段數(shù)碼管相連,實(shí)現(xiàn)按鍵的判斷及顯示。8255a是的a口低4位連接鍵盤的行,c口低4位連接鍵盤的列;a口高4位連接4位七段數(shù)碼管的位選端口,實(shí)現(xiàn)數(shù)碼管的選擇;b口8位連接七段數(shù)碼管的8個(gè)段信號(hào)引腳。輸入4個(gè)數(shù)字由4個(gè)七段數(shù)碼管分別顯示,前兩位為小時(shí),后兩位為分鐘。在由此及與系統(tǒng)時(shí)間的比較,判斷到時(shí)轉(zhuǎn)8253程序控制指示燈亮。選用8253的0、1、2計(jì)數(shù)器,0
6、計(jì)數(shù)器采用方式2,用系統(tǒng)時(shí)鐘脈沖f=1mhz,計(jì)數(shù)初值為2000,其輸出端作為1計(jì)數(shù)器的輸入脈沖,1計(jì)數(shù)器采用方式2,計(jì)數(shù)初值為2000,輸出一個(gè)周期為2s的時(shí)鐘脈沖。2計(jì)數(shù)器采用方式0,產(chǎn)生定時(shí)中斷,其out端連接一個(gè)發(fā)光二極管,到設(shè)定時(shí)間時(shí)發(fā)光。2.2、總體設(shè)計(jì)電路圖 cs 8253實(shí)現(xiàn)計(jì)數(shù)定時(shí) cs 8255實(shí)現(xiàn)鍵盤設(shè)置鬧鈴時(shí)間顯示時(shí)間300-307308-315cscs 3 硬件方案3.1、所用芯片簡(jiǎn)介3.1.1、8255芯片簡(jiǎn)介(1)、8255可編程并行接口芯片簡(jiǎn)介:8255是一種通用可變成并行輸入輸出接口芯片,通過(guò)對(duì)它進(jìn)行編程,芯片可工作于不同的工作方式,用8255作接口時(shí),通常不
7、需要附加外部邏輯電路就可直接為cpu與外設(shè)之間提供數(shù)據(jù)通道。8255可編程并行接口芯片有三個(gè)輸入輸出端口,即a口、b口和c口,對(duì)應(yīng)于引腳pa7pa0、pb7pb0和pc7pc0。其內(nèi)部還有一個(gè)控制寄存器,即控制口。通常a口、b口作為輸入輸出的數(shù)據(jù)端口。c口作為控制或狀態(tài)信息的端口,它在方式字的控制下,可以分成4位的端口,每個(gè)端口包含一個(gè)4位鎖存器。它們分別與端口a配合使用,可以用作控制信號(hào)輸出或作為狀態(tài)信號(hào)輸入。(2)、8255可編程并行接口芯片方式控制字格式說(shuō)明:8255有兩種控制命令字;一個(gè)是方式選擇控制字;另一個(gè)是c口按位置位復(fù)位控制字。其中c口按位置位復(fù)位控制字方式使用較為繁難,說(shuō)明也
8、較冗長(zhǎng),故在此不作敘述。方式控制字格式說(shuō)明如表1:表1 d7d6d5d4d3d2d1d0 d7:設(shè)定工作方式標(biāo)志,1有效。 d6、d5:a口方式選擇 0 0 方式0 0 1 方式1 1 方式2 d4:a口功能 (1=輸入,0=輸出) d3:c口高4位功能 (1=輸入,0=輸出) d2:b口方式選擇 (0=方式0,1=方式1) d1:b口功能 (1=輸入,0=輸出)d0:c口低4位功能 (1=輸入,0=輸出) (3)、8255可編程并行接口芯片工作方式說(shuō)明: 方式0:基本輸入輸出方式。適用于三個(gè)端口中的任何一個(gè)。每一個(gè)端口都可以用作輸入或輸出。輸出可被鎖存,輸入不能鎖存。 方式1:選通輸入輸出方
9、式。這時(shí)a口或b口的8位外設(shè)線用作輸入或輸出,c口的4條線中三條用作數(shù)據(jù)傳輸?shù)穆?lián)絡(luò)信號(hào)和中斷請(qǐng)求信號(hào)。方式2 :雙向總線方式。只有a口具備雙向總線方式,8位外設(shè)線用作輸入或輸出,此時(shí)c口的5條線用作通訊聯(lián)絡(luò)信號(hào)和中斷請(qǐng)求信號(hào)。3.1.2、8253芯片簡(jiǎn)介(1)、可編程計(jì)數(shù)器/定時(shí)器8253芯片簡(jiǎn)介8253是一種利用硬件電路和中斷方法控制定時(shí),定時(shí)時(shí)間和范圍完全由軟件來(lái)確定和改變,并有微處理器的時(shí)鐘信號(hào)提供時(shí)間基準(zhǔn)。但該時(shí)鐘信號(hào)頻率太高,所以還可用8253進(jìn)行分頻。8253內(nèi)部有3個(gè)獨(dú)立的16位計(jì)數(shù)器通道,通過(guò)對(duì)他進(jìn)行編程,每個(gè)計(jì)數(shù)器通道均可按6種不同的方式工作,并且都可以按2進(jìn)制或10進(jìn)制格式
10、進(jìn)行計(jì)數(shù),最高計(jì)數(shù)頻率能達(dá)到2mhz.8253還適用于許多其他場(chǎng)合,如用作可編程方波頻率產(chǎn)生器、分頻器、程控單脈沖發(fā)生器等等。(2)、8253a控制字的格式說(shuō)明在對(duì)8253進(jìn)行編程時(shí),由cpu用輸出指令向他寫入控制字,來(lái)選定計(jì)數(shù)器通道,規(guī)定各計(jì)數(shù)器通道的工作方式,讀寫格式和數(shù)制。控制字格式如表2:表2: -通道選擇位,00,01,10分別表示向8253的計(jì)數(shù)器通道0-2寫入控制字,11無(wú)效。-讀/寫操作位,01表示只讀/寫低8位字節(jié)數(shù)據(jù),只寫入低8位時(shí),高8位自動(dòng)置為0;10表示只讀/寫高8位字節(jié)數(shù)據(jù),只寫入高8位時(shí),低8位自動(dòng)置為0;11允許讀/寫16位數(shù)據(jù)。00把通道中當(dāng)前數(shù)據(jù)寄存器的值送
11、到16位鎖存器中,供cpu讀取該值。bcd-計(jì)數(shù)方式選擇位。1表示采用bcd碼計(jì)數(shù); 0表示采用二進(jìn)制格式計(jì)數(shù)。-工作方式選擇位。 000 方式0 001 方式1 x10 方式2 x11 方式3100 方式4101 方式5(3)、8253 六種工作方式的說(shuō)明8253有6種工作方式,對(duì)它們的操作遵守以下3條基本原則: (1)當(dāng)控制字寫入8253時(shí),所有的控制邏輯電路自動(dòng)復(fù)位,這時(shí)輸出端out進(jìn)入初始態(tài)。 (2)當(dāng)初始值寫入計(jì)數(shù)器以后,要經(jīng)過(guò)一個(gè)時(shí)鐘周期,減法計(jì)數(shù)器才開始工作,時(shí)鐘脈沖的下降沿使計(jì)數(shù)器進(jìn)行減1計(jì)數(shù)。計(jì)數(shù)器的最大初始值是0,用二進(jìn)制計(jì)數(shù)時(shí)0相當(dāng)于216,用bcd碼時(shí),0相當(dāng)于104。
12、 (3)對(duì)于一般情況下,在時(shí)鐘脈沖clk的上升沿時(shí),采樣門控信號(hào)。對(duì)門控信號(hào)(gate)的觸發(fā)方式是有具體規(guī)定的: 門控信號(hào)為電平觸發(fā)的有:方式0,方式4。 門控信號(hào)為上升沿觸發(fā)的有:方式1,方式5。 門控信號(hào)可為電平觸發(fā)也可為上升沿觸發(fā)的有:方式2,方式3。 計(jì)數(shù)方式的有:方式0,方式1,方式4,方式5 定時(shí)方式的有:方式2,方式3。8253的工作方式:方式0(計(jì)數(shù)結(jié)束產(chǎn)生中斷的計(jì)數(shù)器)- - -寫入方式控制字后,輸出端out為低電平;寫入計(jì)數(shù)常數(shù)后,開始計(jì)數(shù)。計(jì)數(shù)器減為0之前,輸出端out維持低電平。當(dāng)計(jì)數(shù)值為0時(shí),輸出端out才變?yōu)楦唠娖?,向cpu發(fā)出中斷請(qǐng)求,直到cpu寫入新的控制字或
13、者寫入新的計(jì)數(shù)值為止。方式0可由門控信號(hào)控制暫停,gate為低電平時(shí),計(jì)數(shù)器暫停,gate信號(hào)變高后,就接著計(jì)數(shù)。方式1(可重復(fù)編程的單脈沖)- -設(shè)定工作方式和寫入計(jì)數(shù)值后,out輸出高電平,gate(觸發(fā)信號(hào))變?yōu)楦唠娖胶螅琽ut變?yōu)榈碗娖?,開始計(jì)數(shù)。當(dāng)計(jì)數(shù)器減到0時(shí),out才輸出高電平。輸出低電平期間,寫入新計(jì)數(shù)值,不會(huì)影響原記數(shù)過(guò)程。只有第一次計(jì)數(shù)完,gate再來(lái)一個(gè)正跳變時(shí)才使用新的計(jì)數(shù)值計(jì)數(shù)若在第一次計(jì)數(shù)末完成之前,gate又產(chǎn)生正跳變(即下一個(gè)脈沖信號(hào)又到來(lái))時(shí),則從新的gate的上升沿以后,開始重新計(jì)數(shù),out端輸出的低電平保持不變,2次的計(jì)數(shù)過(guò)程合在一起,因此使輸出的負(fù)脈沖寬
14、度加寬了方式2 (分頻器)-寫入方式2的控制字后,out變高,設(shè)gate為高先到,計(jì)數(shù)器對(duì)clk計(jì)數(shù),設(shè)計(jì)數(shù)初值為n。當(dāng)計(jì)數(shù)器計(jì)到(n一1)個(gè)clk信號(hào)時(shí),out輸出變低,計(jì)數(shù)器的值為l。最后一個(gè)clk信號(hào)輸入后,計(jì)數(shù)器減到0,out回到高,計(jì)數(shù)器又自動(dòng)從初值開始計(jì)數(shù)。因此out端在每n個(gè)clk信號(hào)中輸出一個(gè)寬度等于clk信號(hào)周期的負(fù)脈沖。負(fù)脈沖的周期=計(jì)數(shù)值n時(shí)鐘clk的周期t。計(jì)數(shù)過(guò)程中要求門控脈沖gat置保持為高,當(dāng)gate為低電平時(shí),則計(jì)數(shù)被中止暫停,在gate再變高后,計(jì)數(shù)器又被置入初值,重新計(jì)數(shù)。方式3(方波發(fā)生器)-寫入方式3的控制字后,out變高,設(shè)gate為高電平,則在寫入計(jì)
15、數(shù)初值后的下一個(gè)時(shí)鐘脈沖時(shí),將計(jì)數(shù)初值裝入執(zhí)行部件,并開始計(jì)時(shí)。與方式2類似,但輸出端得到的是方波或基本對(duì)稱的矩形波。初值為偶數(shù)時(shí),每輸入一個(gè)時(shí)鐘脈沖,均使計(jì)數(shù)值減2,減為0時(shí),out輸出引腳由高電平變低電平,同時(shí)自動(dòng)重新裝入計(jì)數(shù)初值,繼續(xù)計(jì)數(shù)。初值為計(jì)數(shù)時(shí),第一個(gè)時(shí)鐘脈沖使計(jì)數(shù)器減1,以后均減2.方式4(軟件觸發(fā)選通)-寫入方式4的控制字后,out變高,設(shè)gate為高電平,則在寫入計(jì)數(shù)初值后的下一個(gè)時(shí)鐘脈沖時(shí),將計(jì)數(shù)初值裝入執(zhí)行部件,并開始計(jì)時(shí)。當(dāng)計(jì)數(shù)初值減為0時(shí),out端輸出變低,經(jīng)一個(gè)時(shí)鐘周期又回到高電平,形成一個(gè)負(fù)脈沖。一次計(jì)數(shù),重新裝入初值才可繼續(xù)計(jì)數(shù)。方式5(硬件觸發(fā)選通)-寫入方
16、式5的控制字后,out變高,裝入計(jì)數(shù)初值后,只有當(dāng)gate從到到高跳變時(shí)才能在下一個(gè)時(shí)鐘脈沖后把計(jì)數(shù)初值裝入執(zhí)行部件,并開始計(jì)時(shí)。當(dāng)計(jì)數(shù)初值減為0時(shí),out端輸出變低,經(jīng)一個(gè)時(shí)鐘周期又回到高電平,形成一個(gè)負(fù)脈沖。自動(dòng)重新裝入初值,當(dāng)再經(jīng)歷gate從低到高跳變時(shí)繼續(xù)減1計(jì)數(shù)。3.2、各分電路圖3.2.1、鍵盤部分電路圖.pa0pa1pa2pa38255apb7pb6pb5pb4pb3pb2pb1pb010k10k40159o637c28+5v鍵盤各鍵作用說(shuō)明:0-9數(shù)字鍵o(0a)四個(gè)數(shù)輸入完成,(小時(shí)、分鐘各兩位)執(zhí)行顯示程序c(0b)輸入顯示完成,執(zhí)行計(jì)數(shù)程序0c-0f未用3.2.2、鍵盤及
17、顯示部分電路圖3.2.3、計(jì)時(shí)部分電路圖4 軟件方案4.1、 設(shè)計(jì)的原理4.1.1、鍵盤的設(shè)計(jì)原理我們所設(shè)計(jì)的鍵盤是一個(gè)16位鍵的,分別為16進(jìn)制數(shù)字09和af,其中,f鍵為復(fù)位鍵,鍵盤的排列,連線及接口電路如下圖所示,16個(gè)鍵排成4行4列的矩陣,接到微機(jī)的一對(duì)端口上。端口由8255a構(gòu)成,其中端口a作輸出,端口b作為輸入,端口c作為輸出。矩陣4條行線到輸出端口a口的pa3pa0,用程序能改變這4條線上的電平。4條列線連到輸入端口b口的pb7pb4. 編寫程序通過(guò)逐行逐列掃描,可獲得所按鍵的行列信息,及該鍵所對(duì)應(yīng)的鍵號(hào)。在無(wú)鍵壓下時(shí),由于接到+5v上的上拉電阻的作用,列線被置成高電平。壓下某一
18、鍵后,該鍵所在列線和行線接通。這時(shí),如果向下鍵所在的行線上輸出一個(gè)低電平信號(hào),則對(duì)應(yīng)的列線也呈現(xiàn)低電平。當(dāng)從b口讀取列線信號(hào)時(shí),便能檢測(cè)到該列線的低電平。說(shuō)明該行列對(duì)應(yīng)的鍵即為所按下的鍵。 識(shí)別鍵盤上哪個(gè)鍵被壓下的過(guò)程稱為鍵盤掃描,上述鍵盤的掃描包含以下幾步:a 、檢測(cè)是否所有鍵都松開了,若沒(méi)有則反復(fù)檢測(cè)。b、當(dāng)所有鍵都松開了,再檢測(cè)是否有鍵壓下,若無(wú)鍵壓下則反復(fù)檢測(cè)。c、若有鍵壓下,要消除鍵抖動(dòng),確認(rèn)有鍵壓下。d、對(duì)壓下的鍵進(jìn)行編碼,將該鍵行列的信號(hào)轉(zhuǎn)換16進(jìn)制碼,由此確定哪一個(gè)鍵被壓下了。如出現(xiàn)多鍵重按的情況,只有在其他鍵均釋放后,僅剩下一個(gè)鍵閉合時(shí),才把此鍵當(dāng)作本次壓下的鍵。e、該鍵釋放
19、后,再回到b。檢測(cè)矩陣中是否有鍵壓下的一種簡(jiǎn)單方法,自輸出口a向所有行線輸出0電平,再通過(guò)b口的低4位讀取列值,若其中有0值,便是有鍵壓下了。 在開始一次掃描時(shí),先應(yīng)確認(rèn)上一次壓下的鍵是否已松開。既先向所有行線輸出低電平,再讀入各列線值,只有當(dāng)所有的行線和列線均為高電平,表示以前壓下的鍵都已釋放,才開始檢測(cè)是否有鍵壓下。 當(dāng)檢測(cè)到有鍵壓下后,必須消除鍵抖動(dòng)(debance)。即當(dāng)檢測(cè)到有鍵按下后,延長(zhǎng)一定時(shí)間(通常延遲20ms),再檢查該鍵是否仍被壓者。若是,才認(rèn)定該鍵確實(shí)被按下后,而不是其他的振動(dòng)干擾。確認(rèn)有鍵按下后,再確定被壓下鍵所在的行號(hào)。為獲取行列信息,先從a口輸出一個(gè)低電平到一行線上
20、,再?gòu)腷口讀入各列的值,若沒(méi)有一列為低電平,說(shuō)明壓下的鍵不在此行。于是,再向下一行輸出一個(gè)低電平,再檢測(cè)各列線上是否有低電平,依次對(duì)每一行重復(fù)這個(gè)過(guò)程,直至查到某一列線上出現(xiàn)低電平為止。被置成低電平的行和讀到該低電平的列,便是被壓下鍵所在的行列值。 已被壓下的鍵所在的行號(hào)(03)和列號(hào)(03)后,就能得到該鍵掃描碼。例如,對(duì)于數(shù)字0,它位于3行,3列,壓下“0”鍵時(shí),從b口可讀得d7位和d3為0,其余位為1,所以數(shù)字0的編碼為01110111b,即77h;對(duì)于數(shù)字6,處于2行,1列,壓下“6”鍵時(shí),d6為和d1位為0,其余位為1,所以數(shù)字6的編碼為10111101b=bdh。類似地,其余各鍵的
21、編碼也可一求得。將 這些編碼值列成鍵盤掃描表(table),放在數(shù)據(jù)段中,用查表程序來(lái)查對(duì),便能確定壓下的位置。鍵盤掃描碼表:表10123456777h7bh7dh7eh0b7h0bbh0bdh0beh89abcdef0d7h0dbh0ddh0deh0e7h0ebh0edh0eeh4.1.2、顯示部分的設(shè)計(jì)原理根據(jù)七段led顯示器的原理,對(duì)16進(jìn)制數(shù)字(0f)進(jìn)行編碼,根據(jù)下圖典型的七段led,例如,對(duì)于數(shù)字“0”,二極管a, b, c, d, e ,f亮,g,h(dp)滅 ,故數(shù)字”0”的編碼為0011111b,即為3fh,類似地,其余各鍵的編碼也可一一求得.將這些編碼值列成七段顯示代碼表(
22、led_code),通過(guò)編寫程序?qū)崿F(xiàn)鍵盤掃描表(table)與七段顯示代碼表(led_code)進(jìn)行轉(zhuǎn)換,并通過(guò)pc口輸出顯示到七段數(shù)碼管上。每次按鍵輸出鍵值時(shí),通過(guò)改變8255 pa口高4位狀態(tài),使四位七段數(shù)碼管輪流顯示不同的鍵值。 典型的七段led 圖2led顯示碼表:表2012345673fh06h5bh4fh66h6dh7dh0eh89abcdef7fh6fh77h7ch39h5eh79h71h要想使多位7段數(shù)碼管在盡量簡(jiǎn)單的接口電路驅(qū)動(dòng)下顯示不同的內(nèi)容,多數(shù)利用了逐位快速輪循顯示的方式。即在一個(gè)輪循顯示周期中讓每位數(shù)碼管顯示一次各自的數(shù)。當(dāng)輪循顯示周期的數(shù)目大于每秒50次時(shí),人的眼睛
23、就因視覺(jué)惰性而無(wú)法察覺(jué)顯示的變化,從而感覺(jué)到現(xiàn)實(shí)的事多位靜止的7段數(shù)。將四個(gè)數(shù)碼管的8個(gè)段信號(hào)引腳鏈接在一起,并共同由一個(gè)段驅(qū)動(dòng)器提供8位的段顯示碼數(shù)據(jù)。而每個(gè)數(shù)碼管則各自都有獨(dú)立的位選通信號(hào)。無(wú)論段驅(qū)動(dòng)器的輸出什么顯示碼數(shù)據(jù),只要位選通信號(hào)有效的數(shù)碼管才會(huì)發(fā)亮。所以只要先逐個(gè)送出每個(gè)數(shù)碼管將要顯示的段顯示碼數(shù)據(jù)后緊跟著僅送出使該位數(shù)據(jù)管位選信號(hào)有效的數(shù)據(jù),并且保持一個(gè)短暫的時(shí)間(幾毫秒到幾十毫秒),就會(huì)讓段碼數(shù)據(jù)在數(shù)碼管上顯示一個(gè)短暫的時(shí)間。當(dāng)每位數(shù)碼管顯示的內(nèi)容每秒輪循顯示的次數(shù)大于50次時(shí),我們就會(huì)看到每位數(shù)碼管都穩(wěn)定的地顯示各自的內(nèi)容4.1.3、計(jì)數(shù)部分設(shè)計(jì)原理利用8253的計(jì)數(shù)作用,
24、實(shí)現(xiàn)倒計(jì)時(shí)功能。通過(guò)設(shè)定時(shí)間與系統(tǒng)時(shí)間的比較,計(jì)算出計(jì)數(shù)初值。利用8253的0、1計(jì)數(shù)器實(shí)現(xiàn)時(shí)鐘的分頻,選擇工作方式2。8253的2計(jì)數(shù)器利用1計(jì)數(shù)器的輸出脈沖作為其輸入脈沖,選擇工作方式0,實(shí)現(xiàn)定時(shí)作用。在out2端連接一個(gè)發(fā)光二極管,當(dāng)定時(shí)結(jié)束時(shí),out2輸出變?yōu)楦唠娖?,二極管發(fā)光。實(shí)驗(yàn)完成。4.2 、程序流程圖4.2.1、鍵盤掃描流程圖圖5開 始初始化8255aa口作為輸入,b口和c口作為輸出讀鍵盤wait_open檢測(cè)是否所有鍵均松開wait_pres檢測(cè)是否有鍵按下由next_row確定鍵的鍵值 , 查table表確定按鍵的位置編碼將該位置編碼轉(zhuǎn)換成led_table表的led顯示碼
25、檢測(cè)是否為復(fù)位鍵f顯示該按鍵結(jié) 束若有鍵被按下,繼續(xù)等待若均松開有按下若沒(méi)有則繼續(xù)等待若是復(fù)位f若不是 延時(shí)20ms是否仍有鍵按下仍有4.2.2、顯示部分程序圖相應(yīng)數(shù)碼管的各段信號(hào)置0判斷cx是否為0按鍵,顯示鍵號(hào)初始化8255aa口作為輸出,b口作為輸出選中第一個(gè)數(shù)碼管開 始設(shè)置循環(huán)次數(shù)cx=4是選中下一位數(shù)碼管不是 專題設(shè)計(jì)部分1 硬件(軟件)詳細(xì)設(shè)計(jì) 1.1、 程序清單及相應(yīng)的說(shuō)明 ;8255a端口地址port_a equ 300h ;8255a口地址port_b equ 301h ;8255b口地址port_c equ 302h ;8255c口地址port_ctl equ 303h ;
26、8255控制口地址;8253a端口地址port_c3 equ 311h ;8253a控制口地址port_0 equ 308h ;8253a通道0地址port_1 equ 309h ; 8253a通道1地址port_2 equ 310h ; 8253a通道2地址;數(shù)據(jù)段;鍵盤掃描碼表data segment; 0 1 2 3 4 5 6 7table db 77h, 7bh, 7dh, 7eh, 0b7h, 0bbh, 0bdh, 0beh; 8 9 a b c d e fdb 0d7h, 0dbh, 0ddh, 0deh, 0e7h, 0ebh, 0edh, 0eeh;led_code顯示碼表
27、; 0 1 2 3 4 5 6 7 led_code db 3fh,06h, 5bh, 4fh, 66h, 6dh,7dh, 0eh; 8 9 a b c d e f db 7fh, 6fh, 77h, 7ch,39h,5eh, 79h, 71h;定時(shí)時(shí)間緩存區(qū)time db 4 dup (0)data ends;堆棧段stack segment stack dw 50 dup(0)top_stack label wordstack ends;代碼段code segment main proc far assume cs: code, ds: data, ss: stackstart: mov
28、 ax, stack mov ss, ax lea sp, top_stack mov ax, data mov ds, ax call init ;調(diào)用數(shù)碼管初始化子程序 mov cx,4 ;循環(huán)次數(shù)rotate: call key ;調(diào)用鍵盤部分子程序,用于監(jiān)視是否有鍵按下 loop rotate ;循環(huán) ret ;返回main endp;init proc near ;數(shù)碼管初始化子程序,將數(shù)碼管全部置滅 mov cx,4 ;循環(huán)次數(shù) mov ah,10hnext: mov al,ah mov dx, port_ctl ;指向控制口 mov al, 10001011b ;控制字 out
29、dx, al ;寫入控制字 mov dx,port_a ;a口地址 out dx,al mov dx,port_b ;b口地址 mov al,00h ;0ffh對(duì)應(yīng)于數(shù)碼管的全滅 out dx,al ror ah,1 ;位選選中下一個(gè)數(shù)碼管 loop next retinit endpkey proc near;初始化8255a,方式0,a口和c口作為輸出,b口作為輸入 mov dx, port_ctl ;指向控制口 mov al, 10001011b ;控制字 out dx, al ;寫入控制字;向所有行送0 mov dx, port_a ;指向a口mov al, 00h ;向a口各位輸出0
30、out dx, al ;讀列,查看是否所有鍵均松開mov dx, port_b wait_open: in al, dx ;鍵盤狀態(tài)讀入b口and al, 0fh ;只查低4列位(列值)cmp al, 0fh ;是否都為1(各鍵均松開)jne wait_open ;否,繼續(xù)查;各鍵均已松開,在查列是否有0,即是否有鍵按下wait_press: in al, dx ;讀b口狀態(tài) and al, 0fh ;只查低4位cmp al, 0fh ;是否有鍵按下je wait_pres ;無(wú),等待;有鍵按下,延時(shí)20ms,去抖動(dòng)mov cx, 16eah delay: loop delay;再查列,看鍵是
31、否仍被按著in ak, dx and al, 0fhcmp al, 0fhje wait_pres ;若松開了,轉(zhuǎn)出等待壓鍵;若鍵仍被壓著,確定哪一個(gè)鍵被壓下mov al, 0feh ;先使=0mov cl, al ;cl=1111 1110bnext_row: mov dx, port_a ;指向a口out dx, al ;向一行輸出低電平mov dx, port_b ;指向b口in al, dx ;讀入b口的狀態(tài)and al, 0fh ;只截取列值cmp al, 0fh ;是否均為1?jne encode ;否,說(shuō)明有鍵壓下轉(zhuǎn)去編碼rol cl, 01 ;若均為1,使下一行輸出0mov a
32、l, cl jmp next_row ;查看下一行;已找到有一列為低電平,對(duì)壓鍵進(jìn)行編碼encode: mov bx, 000fh ;建立地址指針,先指向f鍵對(duì)應(yīng)地址in al, dx ;從b口讀入行列號(hào)next_try: cmp al, tablebx ;讀入的行列值列值與;表中查得的相等嗎?je done ;相等,轉(zhuǎn)出dec bx ;不等,指向下一個(gè)(鍵值較小者)地址jns next_try ;若地址尚未減為負(fù)數(shù)繼續(xù)查mov ah, 01 ;若減為負(fù)數(shù),置錯(cuò)誤碼01-ah中jmp exit ;退出done: mov al, bl ;al存放按鍵的偏移量 cmp al, 0ah ;判斷是否為
33、數(shù)字鍵 js baocun ;若是,轉(zhuǎn)出將定時(shí)時(shí)間保存 jz display ;若是確定鍵,轉(zhuǎn)去顯示 cmp al,0bh ;判斷是否是完成鍵 jz cont ;若是,轉(zhuǎn)去計(jì)時(shí)baocun:push al retdisplay:mov cx,4 mov cl, 7fh ;控制先顯示最左端數(shù)碼管next: mov bx,offset led _code ;bx 表格的首地址xlat led_code ;查表得到按鍵的led;顯示碼mov dx, port_c ;指向c口out dx, al ;輸出顯示mov dx,port_a ;指向a口mov cl, 7fh ;控制先顯示最左端數(shù)碼管out d
34、x,clrol clloop nextret;8253端口號(hào)選308-315cont:mov di,offset time ;取定時(shí)時(shí)間緩沖區(qū)首地址 add di,3 ;指向第4位 mov cx,3 ;循環(huán)次數(shù)qut: pop di ;從堆棧中取出時(shí)間放入緩沖區(qū) dec di loop qut mov bh,di mul bh,10 add bh,di+1 ;將設(shè)定時(shí)間小時(shí)存放入bh中 mov bl,di+2 mul bl,10 add bl,di+3 ;將設(shè)定時(shí)間分鐘存放入bl中 mul bh,60 add bh,bl ;將設(shè)定時(shí)間存入bh中 mov ah,2ch ;調(diào)用dos時(shí)間調(diào)用功能,
35、功能號(hào):2ch,小時(shí),分鐘,秒數(shù)int 21h ;分別保存在ch,cl,dh中 mul ch,60 add ch,cl ;將當(dāng)前時(shí)間存入ch中comp:cmp bh,ch jnz wait jmp daoshiwait: mov cx,30jishi:mov dx,311hmov al,00110101bout dx,almov dx,308hmov al,00hout dx,almov al,20hout dx,almov dx,311h mov al,01110001bout dx,almov dx,309hmov al,00hout dx,almov al,20hout dx,al lo
36、op jishiinc chjmp compretdaoshi: mov dx,311hmov al,10110001bmov dx,300hmov al,05hout dx,almov al,00out dx,alretcode ends end 1.2、測(cè)試 1.2.1、單個(gè)程序測(cè)試: (1)、鍵盤程序測(cè)試 按圖4連接好電路,調(diào)試此程序(jianpan.asm),從小鍵盤輸入一個(gè)數(shù)字,dos界面輸出顯示該數(shù)字。(2)、數(shù)碼管顯示程序測(cè)試 按圖3相應(yīng)部分連接本部分的電路圖,調(diào)試程序(xianshi,asm),4位七段數(shù)碼管,分別顯示1、2、3、4四個(gè)數(shù)字。 (3)、計(jì)時(shí)程序測(cè)試 按圖6連接電
37、路,調(diào)試程序(jishi.asm),dos界面輸出顯示的數(shù)字以1遞增。(4)、到時(shí)程序測(cè)試 連接相應(yīng)的電路,調(diào)試程序(daoshi.asm),指示紅燈亮。 1.2.2、總體程序測(cè)試 連接好線路,調(diào)試程序(naozhong.asm),輸入4位正確的24小時(shí)制的時(shí)間數(shù)字,按下完成鍵(o),4位七段數(shù)碼管顯示設(shè)定時(shí)間。接著按下確定鍵(c),等到設(shè)定時(shí)間后,顯示紅燈亮。驗(yàn)證此設(shè)計(jì)正確。2 總結(jié)2.1、本設(shè)計(jì)的可行性與優(yōu)點(diǎn)分析在本設(shè)計(jì)的過(guò)程中,我們遇到了一些困難但通過(guò)努力終于比較完整的完成了此次設(shè)計(jì)的任務(wù):在鍵盤掃描程序中,其中最為重要的是當(dāng)有鍵按下,如何確定是哪一個(gè)鍵被按下,采用逐行掃描法能夠比較容易實(shí)現(xiàn)而且比較容易被人所理解;在按鍵顯示程序中,其中最重要的是要4位七段數(shù)碼管輪流顯示不同的按鍵值,利用人的眼睛就因視覺(jué)惰性而無(wú)法察覺(jué)顯示的變化,當(dāng)輪循顯示周期的數(shù)目大于每秒50次時(shí),從而感覺(jué)到現(xiàn)實(shí)的事多位靜止的7段數(shù)。在計(jì)時(shí)程序設(shè)計(jì)中,最重要的是如何判斷定時(shí)時(shí)間到,用設(shè)定時(shí)間與系統(tǒng)時(shí)間比對(duì),直到相同為止即定時(shí)時(shí)間到。2.2、設(shè)計(jì)中的不
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新商場(chǎng)物業(yè)管理合同
- 地基基礎(chǔ)施工承包合同
- 企業(yè)人事調(diào)整與招聘策略報(bào)告
- 市場(chǎng)預(yù)測(cè)與行業(yè)發(fā)展趨勢(shì)表
- 2025鄂爾多斯鄂托克旗誠(chéng)園綠能投資有限責(zé)任公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年上半年宜昌市園林局事業(yè)單位招考易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2024福建福州左連房地產(chǎn)開發(fā)有限公司項(xiàng)目建設(shè)合同制人員招聘34人筆試參考題庫(kù)附帶答案詳解
- 2025年上半年安徽銅陵市面向應(yīng)屆大學(xué)畢業(yè)生選認(rèn)科技特派員62人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年安徽省皖能電力運(yùn)營(yíng)檢修股份公司校園招聘8人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2024龍?jiān)措娏瘓F(tuán)股份有限公司第一批社會(huì)招聘擬錄用人員筆試參考題庫(kù)附帶答案詳解
- 孤殘兒童護(hù)理員技能鑒定考試題庫(kù)(含答案)
- 人教版(2024年新教材)九年級(jí)上冊(cè)化學(xué)第一單元達(dá)標(biāo)測(cè)試卷
- 《平面向量的坐標(biāo)運(yùn)算(平行與垂直)》專題精講課件
- 陶土瓦屋面施工施工方法及工藝要求
- 第三課 多彩的鉛筆 教案 五下信息科技河南大學(xué)版
- 河南省創(chuàng)新發(fā)展聯(lián)盟2023-2024學(xué)年高一下學(xué)期3月月考化學(xué)試題(解析版)
- 農(nóng)村自建房包工包料施工合同
- 《鐵路職業(yè)道德》課件-第6章 鐵路職業(yè)道德修養(yǎng)
- 中考心理減壓輔導(dǎo) 中考前心理健康教育主題班會(huì)
- 小學(xué)四年級(jí)心理健康教育課
- 【上市公司的財(cái)務(wù)風(fēng)險(xiǎn)的分析和防范:以三只松鼠為例10000字(論文)】
評(píng)論
0/150
提交評(píng)論