單片機數(shù)碼管動態(tài)顯示_第1頁
單片機數(shù)碼管動態(tài)顯示_第2頁
單片機數(shù)碼管動態(tài)顯示_第3頁
單片機數(shù)碼管動態(tài)顯示_第4頁
單片機數(shù)碼管動態(tài)顯示_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、動態(tài)顯示 1掌握LED數(shù)碼管顯示及其一般電路結構; 2掌握LED動態(tài)顯示程序的一般設計方法。一、 實驗內(nèi)容 動態(tài)顯示,也稱為掃描顯示。顯示器由6個共陰極LED數(shù)碼管構成。單片機的P0口輸出顯示段碼,由一片74LS245輸出給LED管;由P1口輸出位碼,經(jīng)74LS04輸出給LED顯示。二、 實驗步驟1、打開Proteus ISIS編輯環(huán)境,按下表所列的元件清單添加元件。實驗所用元件清單元件名稱所屬類所屬子類AT89C51Microprocessor ICs8051 FamilyCAPCapacitorsGenericCAP-ELECCapacitorsGenericCRYSTALMiscella

2、neous-RESResistorsGeneric7SEG-MPX6-CC-BLUEOptoelectronics7-Segment Displays74LS04TTL 74LS SeriesGates & Inverters74LS245TTL 74LS SeriesTranseivers 元件全部添加后,在Proteus ISIS的編輯區(qū)域中按實驗原理圖連接硬件電路。圖1 動態(tài)顯示實驗電路原理圖2、 按實驗要求在KeilC中創(chuàng)建項目,編輯、編譯程序。3、 將編譯生成的目標碼文件(后綴為.Hex)傳入Proteus的實驗電路中。4、 在Proteus ISIS仿真環(huán)境中運行程序,觀察

3、實驗運行結果并記錄。三、 實驗要求1. 編寫一顯示程序顯示201071;2. 顯示特殊字符good;3. 調整軟件延時子程序的循環(huán)初值,逐漸加大每一位LED點亮的時間,觀察程序運行結果。四、 參考程序dbuf equ 30h ;置存儲區(qū)首址temp equ 40h ;置緩沖區(qū)首址 org 00h mov 30h,#2 ;存入數(shù)據(jù) mov 31h,#0 mov 32h,#1 mov 33h,#0 mov 34h,#7 mov 35h,#1 mov r0,#dbuf mov r1,#temp mov r2,#6 ;六位顯示器 mov dptr,#segtab ;段碼表首地址dp00: mov a,

4、r0 ;取要顯示的數(shù)據(jù) movc a,a+dptr ;查表取段碼 mov r1,a ;段碼暫存 inc r1 inc r0 djnz r2,dp00disp0: mov r0,#temp ;顯示子程序 mov r1,#6 ;掃描6次 mov r2,#01h ;從第一位開始dp01: mov a,r0 mov p0,a ;段碼輸出 mov a,r2 ;取位碼 mov p1,a ;位碼輸出 acall delay ;調用延時 mov a,r2 rl a mov r2,a inc r0 djnz r1,dp01 sjmp disp0segtab: db 3fh,06h,5bh,4fh,66h db

5、6dh,7dh,07h,7fh,6fhdelay: mov r4,#03h ;延時子程序aa1: mov r5,0ffhaa: djnz r5,aa djnz r4,aa1 ret end實驗原理 MCS51單片機內(nèi)設置了兩個可編程的16位定時器T0和T1,通過編程,可以設定為定時器和外部計數(shù)方式。T1還可以作為其串行口的波特率發(fā)生器。定時器T0由特殊功能寄存器TL0和TH0構成,定時器T1由TH1和TL1構成,特殊功能寄存器TMOD控制定時器的工作方式,TCON控制其運行。定時器的中斷由中斷允許寄存器IE,中斷優(yōu)先權寄存器IP中的相應位進行控制。定時器T0的中斷入口地址為000BH,T1的中

6、斷入口地址為001BH。定時器的編程包括:1) 置工作方式。2) 置計數(shù)初值。3) 中斷設置。4) 啟動定時器。定時器/計數(shù)器由四種工作方式,所用的計數(shù)位數(shù)不同,因此,定時計數(shù)常數(shù)也就不同。在編寫中斷服務程序時,應該清楚中斷響應過程:CPU執(zhí)行中斷服務程序之前,自動將程序計數(shù)器PC內(nèi)容(即斷點地址)壓入堆棧保護(但不保護狀態(tài)寄存器PSW,更不保護累加器A和其它寄存器內(nèi)容),然后將對應的中斷矢量裝入程序計數(shù)器PC使程序轉向該中斷矢量地址單元中以執(zhí)行中斷服務程序。定時器T0和T1對應的中斷矢量地址分別為000BH和001BH。中斷服務程序從矢量地址開始執(zhí)行,一直到返回指令“RETI”為止?!癛ET

7、I”指令的操作一方面告訴中斷系統(tǒng)該中斷服務程序已經(jīng)執(zhí)行完畢,另一方面把原來壓入堆棧保護的斷點地址從棧頂彈出,裝入到程序計數(shù)器PC,使程序返回到被到中斷的程序斷點處,以便繼續(xù)執(zhí)行。因此,我們在編寫中斷服務程序時注意。1在中斷矢量地址單元放一條無條件轉移指令,使中斷服務程序可以靈活地安排在64K字節(jié)程序存儲器的任何空間。2在中斷服務程序中應特別注意用軟件保護現(xiàn)場,以免中斷返回后,丟失原寄存器、累加器的信息。3若要使執(zhí)行的當前中斷程序禁止更高優(yōu)先級中斷,可以先用軟件關閉CPU中斷,或禁止某中斷源中斷,在返回前再開放中斷。五、 實驗內(nèi)容編寫并調試一個程序,用AT89C51的T0工作方式1產(chǎn)生1s的定時

8、時間,作為秒計數(shù)時間,當1s產(chǎn)生時,秒計數(shù)加1;秒計數(shù)到60時,自動從0開始。實驗電路原理如圖1所示。計算初值公式定時模式1 th0=(216-定時時間) /256tl0=(216-定時時間) mod 256六、 實驗步驟1、打開Proteus ISIS編輯環(huán)境,按下表所列的元件清單添加元件。實驗所用元件清單元件名稱所屬類所屬子類AT89C51Microprocessor ICs8051 FamilyCAPCapacitorsGenericCAP-ELECCapacitorsGenericCRYSTALMiscellaneous-RESResistorsGeneric7SEG-COM-CAT-

9、GRNOtoelectronics7-Segment DisplaysPULLUPModelling PrimitivesDigitalMiscellaneous 元件全部添加后,在Proteus ISIS的編輯區(qū)域中按實驗原理圖連接硬件電路。圖1 定時器實驗電路原理圖2、 按實驗要求在KeilC中創(chuàng)建項目,編輯、編譯程序。3、 將編譯生成的目標碼文件(后綴為.Hex)傳入Proteus的實驗電路中。4、 在Proteus ISIS仿真環(huán)境中運行程序,觀察實驗運行結果并記錄。五、 參考程序second equ 30hcount equ 31h org 00h ljmp start org 0b

10、h ljmp int_t0start: mov second,#00h mov count,#00h mov dptr,#table ;段碼表首址 mov p0,#3fh mov p2,#3fh mov tmod,#01h mov th0,#(65536-50000)/256 mov tl0,#(65536-50000) mod 256 ;定時50ms setb tr0 mov ie,#82h sjmp $int_t0: mov th0,#(65536-50000)/256 mov tl0,#(65536-50000) mod 256 inc count mov a,count cjne a,

11、#20,i2 ;是否到1s mov count,#00h inc second mov a,second cjne a,#60,i1 ;是否到60s mov second,#00hi1: mov a,second mov b,#10 div ab movc a,a+dptr mov p0,a mov a,b movc a,a+dptr mov p2,ai2: retitable: db 3fh,06h,5bh,4fh,66h db 6dh,7dh,07h,7fh,6fh end六、 思考若用定時器1方式2,程序如何修改?org 0000hmain: mov p2,#00hmov r1,#1st

12、art:mov dptr,#tab ;將表頭放入DPTR lcall key ;調用鍵盤掃描程序 movc a,a+dptr ;查表后將鍵值送入ACCcjne r1,#1,erinc r1 mov r2,a ljmp starter:cjne r1,#2,saninc r1 mov r3,a ljmp startsan:cjne r1,#3,siinc r1 mov r0,a ljmp startsi:cjne r1,#4,fanmov r5,a xun:mov p3,#00hmov p2,r2mov p3,#01hlcall delay3mov p3,#00hmov p2,r3mov p3,

13、#02hlcall delay3mov p3,#00hmov p2,r0mov p3,#04hlcall delay3mov p3,#00hmov p2,r5mov p3,#08hlcall delay3ljmp xunfan:ljmp xunKEY: LCALL KS ;調用檢測按鍵子程序 JNZ K1 ;有鍵按下繼續(xù) LCALL DELAY2 ;無鍵按調用延時去抖 AJMP KEY ;返回繼續(xù)檢測按鍵K1: LCALL DELAY2 LCALL DELAY2 ;有鍵按下延時去抖動 LCALL KS ;再調用檢測按鍵程序 JNZ K2 ;確認有按下進行下一步 AJMP KEY ;無鍵按下返回

14、繼續(xù)檢測 K2: MOV R2,#0EFH ;將掃描值送入 R2暫存 MOV R4,#00H ;將第一列值送入R4暫存 K3: MOV P1,R2 ;將R2的值送入P1口 L6: JB P1.0,L1 ;P1.0等于1跳轉到L1 MOV A,#00H ;將第一行值送入ACC AJMP LK ;跳轉到鍵值處理程序 L1: JB P1.1,L2 ;P1.1等于1跳轉到L2 MOV A,#04H ;將第二行的行值送入ACC AJMP LK ;跳轉到鍵值理程序進行鍵值處理 L2: JB P1.2,L3 ;P1.2等于1跳轉到L3 MOV A,#08H ;將第三行的行值送入ACC AJMP LK ;跳轉

15、到鍵值處理程序L3: JB P1.3,NEXT ;P1.3等于1跳轉到NEXT處 MOV A,#0cH ;將第四行的行值送入ACC LK: ADD A,R4 ;行值與列值相加后的鍵值送入A PUSH ACC ;將A中的值送入堆棧暫存 K4: LCALL DELAY2 ;調用延時去抖動程序 LCALL KS ;調用按鍵檢測程序 JNZ K4 ;按鍵沒有松開繼續(xù)返回檢測 POP ACC ;將堆棧的值送入ACC RET NEXT: INC R4 ;將列值加一 MOV A,R2 ;將R2的值送入A JNB ACC.7,KEY ;掃描完至KEY處進行下一掃描 RL A ;掃描未完將A中的值右移一位進行下一列的掃描 MOV R2,A ;將ACC的值送入R2暫存 AJMP K3 ;跳轉到K3繼續(xù) KS: MOV P1,#0FH ;將P1口高四位置0低四位值1 MOV A,P1 ;讀P1口 XRL A,#0FH ;將A中的值與A中的值相異或 RET ;子程序返回 DELAY2: ;40ms

溫馨提示

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

評論

0/150

提交評論