微機(jī)原理實(shí)驗(yàn)四 LED數(shù)碼管顯示實(shí)驗(yàn)_圖文_第1頁(yè)
微機(jī)原理實(shí)驗(yàn)四 LED數(shù)碼管顯示實(shí)驗(yàn)_圖文_第2頁(yè)
微機(jī)原理實(shí)驗(yàn)四 LED數(shù)碼管顯示實(shí)驗(yàn)_圖文_第3頁(yè)
微機(jī)原理實(shí)驗(yàn)四 LED數(shù)碼管顯示實(shí)驗(yàn)_圖文_第4頁(yè)
微機(jī)原理實(shí)驗(yàn)四 LED數(shù)碼管顯示實(shí)驗(yàn)_圖文_第5頁(yè)
已閱讀5頁(yè),還剩22頁(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、實(shí)驗(yàn)名稱 LED數(shù)碼管顯示實(shí)驗(yàn)指導(dǎo)教師專業(yè)班級(jí)姓名學(xué)號(hào)聯(lián)系方式一實(shí)驗(yàn)要求:實(shí)驗(yàn)四 LED數(shù)碼管顯示實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康?理解LED七段數(shù)碼管的顯示控制原理,掌握數(shù)碼管與MCU的接口技術(shù),能夠編寫(xiě)數(shù)碼管顯示驅(qū)動(dòng)程序;熟悉接口程序調(diào)試方法。實(shí)驗(yàn)內(nèi)容:利用C8051F310單片機(jī)控制數(shù)碼管顯示器基本要求:利用末位數(shù)碼管循環(huán)顯示數(shù)字0-F,顯示切換頻率為1Hz。提高要求:在數(shù)碼管上顯示0199計(jì)數(shù),計(jì)數(shù)間隔為0.5秒。二、設(shè)計(jì)思路1 基本要求:對(duì)F310信號(hào)頻率進(jìn)行8分頻,再對(duì)定時(shí)器進(jìn)行48分頻,以使在一次定時(shí)時(shí)間范圍內(nèi)實(shí)現(xiàn)1s定時(shí)。采用查詢方式進(jìn)行定時(shí)。P0.6,P0.7作為位選信號(hào)來(lái)一直選擇末位數(shù)碼管輸出

2、信號(hào)。再利用R0作為相對(duì)尋址來(lái)儲(chǔ)存數(shù)據(jù)并賦值給A。通過(guò)MOVC A, A+DPTR指令,利用順序查表法取出顯示段碼數(shù)據(jù)。寄存器R0自增1,并賦給A以取出下一個(gè)顯示段碼數(shù)據(jù)。2 提高要求:依然對(duì)信號(hào)頻率八分頻,對(duì)定時(shí)器進(jìn)行48分頻,通過(guò)P0,6,P0.7進(jìn)行位控選擇數(shù)碼管輸出,定時(shí)器定時(shí)0.5s,當(dāng)溢出時(shí)進(jìn)入中斷,并通過(guò)中斷程序?qū)⒍挝豢刂瓢葱蚣右?R3,R6,R7分別儲(chǔ)存第一第二第三位數(shù)碼管段位碼,利用A 為中間變量,通過(guò)P1輸出儲(chǔ)存的值,查表輸出數(shù)碼管值,達(dá)到119時(shí)結(jié)束。三、資源分配1 基本要求:P0.6: 位選信號(hào)端口P0.7:位選信號(hào)端口P1:輸出段碼數(shù)據(jù)R0:存放顯示數(shù)據(jù)DPTR:指向

3、段碼數(shù)據(jù)表首2 提高要求:P0.6: 位選信號(hào)端口P0.7:位選信號(hào)端口P1:輸出段碼數(shù)據(jù)DPTR:指向段碼數(shù)據(jù)表首R(shí)3,R6,R7:分別儲(chǔ)存第三第二第一位數(shù)碼管數(shù)據(jù)四、流程圖1 基本要求2 提高要求:主程序 接-2 提高要求:動(dòng)態(tài)掃描程序中斷程序 五、源代碼(含文件頭說(shuō)明、語(yǔ)句行注釋1 基本要求:ORG 0000HLJMP MAINORG 0100HMAIN:LCALL Init_DeviceMOV SP,#40HMOV DPTR,#TAB ;將DPTR地址指向表頭MOV TMOD,#01H ;定時(shí)器采用T0定時(shí)方式一MOV TH0,#06H ;定時(shí)器賦予初值MOV TL0,#0C6HCLR

4、 P0.6 ;選擇末位數(shù)碼管CLR P0.7START:MOV R0,#00H ;賦初值0CLR AMOVC A,A+DPTR ;查表輸出MOV P1,ASETB TR0 ;定時(shí)器開(kāi)始工作HERE:JNB TF0,HERE ;等待溢出CLR TR0CLR TF0MOV TH0,#06H ;重新賦予初值MOV TL0,#0C6HCJNE R0,#0FH,NEXT ;等待末位數(shù)碼管到FSJMP STARTNEXT:INC R0 ; R0加一MOV A,R0MOVC A,A+DPTRMOV P1,A ;P1輸出SETB TR0SJMP HERE ;踏步org 1000hTAB:DB 0FCH,60H

5、,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0E6H,0EEH,3EH,1AH,7AH,9EH,8EH;-;- Generated Initialization File -;-$include (C8051F310.incpublic Init_DeviceINIT SEGMENT CODErseg INIT; Peripheral specific initialization functions, ; Called from the Init_Device labelPCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hre

6、tTimer_Init:mov CKCON, #002hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0.4 - Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - U

7、nassigned, Open-Drain, Digital ; P0.7 - Unassigned, Open-Drain, Digital; P1.0 - Unassigned, Push-Pull, Digital ; P1.1 - Unassigned, Push-Pull, Digital ; P1.2 - Unassigned, Push-Pull, Digital ; P1.3 - Unassigned, Push-Pull, Digital ; P1.4 - Unassigned, Push-Pull, Digital ; P1.5 - Unassigned, Push-Pul

8、l, Digital ; P1.6 - Unassigned, Push-Pull, Digital ; P1.7 - Unassigned, Push-Pull, Digital ; P2.0 - Unassigned, Open-Drain, Digital; P2.1 - Unassigned, Open-Drain, Digital ; P2.2 - Unassigned, Open-Drain, Digital ; P2.3 - Unassigned, Open-Drain, Digitalmov P1MDOUT, #0FFhmov P2MDOUT, #0C0hmov XBR1, #

9、040hret; Initialization function for device,; Call Init_Device from your main programInit_Device:lcall PCA_Initlcall Timer_Initlcall Port_IO_InitretEND2 提高部分:ORG 0000HLJMP STARTORG 000BHLJMP TI00ORG 0300HSTART:LCALL Init_DeviceMOV R3,#00H ;百位數(shù)碼管賦予初值MOV R6,#00H ;十位數(shù)碼管賦予初值MOV R7,#01H ;個(gè)位數(shù)碼管賦予初值MOV 60H

10、,#00H ;設(shè)置位控碼MOV 61H,#40HMOV 62H,#80HMOV TMOD, #01H ;選擇定時(shí)器T0方式一SETB ET0 ;開(kāi)外中斷T0SETB EAMOV TH0, #131 ;定時(shí)器賦予初值MOV TL0, #99MAIN:LJMP DISP ;跳入動(dòng)態(tài)輸出子程序MAIN1:LCALL COUNTERAJMP MAIN ;重新掃描;=動(dòng)態(tài)輸出子程序=DISP:MOV SP,#30H ;設(shè)置堆棧指針MOV R1,#60H ;位選指針賦初值MOV P1,#00H ;燈全滅;=LD0:MOV A,R1 ;取出位選碼ANL P0,#3FH ;將P0端口高兩位置零(這樣做的目的是

11、為了避免用MOV指令影響到P0端口的低6位ORL P0,A ;輸出位選信號(hào)MOV A,R7 ;取出段選碼MOV DPTR,#TAB ;DPTR指向段選碼表第一個(gè)數(shù)據(jù)MOVC A, A+DPTR ;查表,取出段選碼MOV P1,A ;輸出段選碼LCALL DL1MS ;延時(shí)1ms,燈亮1msMOV P1,#00H ;燈全滅INC R1 ;位選指針加一MOV A,R1 ;取出位選碼ANL P0,#3FH ;將P0端口高兩位置零(這樣做的目的是為了避免用MOV指令影響到P0端口的低6位ORL P0,A ;輸出位選信號(hào)MOV A,R6 ;取出段選碼MOV DPTR,#TAB ;DPTR指向段選碼表第一

12、個(gè)數(shù)據(jù)MOVC A, A+DPTR ;查表,取出段選碼MOV P1,A ;輸出段選碼LCALL DL1MS ;延時(shí)1ms,燈亮1msMOV P1,#00H ;燈全滅INC R1MOV A,R1 ;取出位選碼ANL P0,#3FH ;將P0端口高兩位置零(這樣做的目的是為了避免用MOV指令影響到P0端口的低6位ORL P0,A ;輸出位選信號(hào)MOV A,R3 ;取出段選碼MOV DPTR,#TAB ;DPTR指向段選碼表第一個(gè)數(shù)據(jù)MOVC A, A+DPTR ;查表,取出段選碼MOV P1,A ;輸出段選碼LCALL DL1MS ;延時(shí)1ms,燈亮1msMOV P1,#00H ;燈全滅LJMP

13、MAIN1 ;返回主程序;=延時(shí)1ms子程序=ORG 0050HDL1MS:MOV R4,#4 ;延時(shí)程序通過(guò)R4,R5 實(shí)現(xiàn)D1:MOV R5,#253NOPDJNZ R5,$DJNZ R4,D1RETORG 0100HCOUNTER:SETB TR0 ;定時(shí)器開(kāi)啟RET;中斷程序TI00:MOV TH0, #133 ;中斷程序重新賦予初值MOV TL0,# 99INC R7 ;個(gè)位加一CJNE R7,#0BH,S1 ;判斷個(gè)位是否進(jìn)位MOV R7,#01H ;重新將個(gè)位歸零CJNE R6,#00H,S2 ;判斷此時(shí)十位是否顯示MOV R6,#01H ;若不顯示則開(kāi)啟顯示S2:INC R6

14、;十位加一CJNE R6,#0BH,S1 ;判斷十位是否進(jìn)位CJNE R3,#00H,S3 ;判斷百位是否顯示MOV R3,#01HS3:INC R3 ;百位加一MOV R6,#01H ;十位重新歸零CJNE R3,#03H,S1 ;判斷百位是否到2MOV P1,#00H ;如果到200則數(shù)碼管全熄滅SJMP $ ;踏步停止S1:RETI ;中斷返回ORG 0200H;=段選碼表=;TAB: DB 00H,0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H; $include (C8051F310.incpublic Init_DeviceINIT

15、SEGMENT CODErseg INIT; Peripheral specific initialization functions,; Called from the Init_Device labelPCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hretTimer_Init:mov CKCON, #002hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-

16、Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0.4 - Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - Unassigned, Push-Pull, Digital ; P0.7 - Unassigned, Push-Pull, Digital; P1.0 - Unassigned, Push-Pull, Digital ; P1.1 - Unassigned, Push-Pull, Digital ; P

17、1.2 - Unassigned, Push-Pull, Digital ; P1.3 - Unassigned, Push-Pull, Digital ; P1.4 - Unassigned, Push-Pull, Digital ; P1.5 - Unassigned, Push-Pull, Digital ; P1.6 - Unassigned, Push-Pull, Digital ; P1.7 - Unassigned, Push-Pull, Digital ; P2.0 - Unassigned, Open-Drain, Digital ; P2.1 - Unassigned, O

18、pen-Drain, Digital ; P2.2 - Unassigned, Open-Drain, Digital ; P2.3 - Unassigned, Open-Drain, Digitalmov P0MDOUT, #0C0hmov P1MDOUT, #0FFhmov XBR1, #040hret; Initialization function for device,; Call Init_Device from your main programInit_Device:lcall PCA_Initlcall Timer_Initlcall Port_IO_InitretEND六程

19、序測(cè)試方法與結(jié)果、軟件性能分析1 基本要求:測(cè)試方法:觀察P1端口輸出波形 由圖可知,LED數(shù)碼管切換頻率為1HZ,跑完一輪經(jīng)過(guò)16s,滿足定時(shí)要求。2 提高要求:1 首先測(cè)試時(shí)間,在中斷程序處設(shè)置斷點(diǎn),觀察每次計(jì)數(shù)的時(shí)間: 時(shí)間為0.5s,符合要求。2 硬件測(cè)試:在測(cè)試上測(cè)試是否能正常運(yùn)行并實(shí)現(xiàn)功能 硬件測(cè)試知,該程序可實(shí)現(xiàn)功能并正常運(yùn)行。ORG 0000HLJMP STARTORG 000BHLJMP TI00ORG 0300HSTART:LCALL Init_DeviceMOV R3,#00H ;百位數(shù)碼管賦予初值MOV R6,#00H ;十位數(shù)碼管賦予初值MOV R7,#01H ;個(gè)位

20、數(shù)碼管賦予初值MOV 60H,#00H ;設(shè)置位控碼MOV 61H,#40HMOV 62H,#80HMOV TMOD, #01H ;選擇定時(shí)器T0方式一 SETB ET0 ;開(kāi)外中斷T0SETB EAMOV TH0, #83H ;定時(shí)器賦予初值MOV TL0, #63HMAIN:LJMP DISP ;跳入動(dòng)態(tài)輸出子程序MAIN1:LCALL COUNTERAJMP MAIN ;重新掃描;=動(dòng)態(tài)輸出子程序=DISP:MOV SP,#30H ;設(shè)置堆棧指針MOV R1,#60H ;位選指針賦初值MOV P1,#00H ;燈全滅;=LD0:MOV A,R1 ;取出位選碼ANL P0,#3FH ;將P

21、0端口高兩位置零(這樣做的目的是為了避免用MOV指令影響到P0端口的低6位ORL P0,A ;輸出位選信號(hào)MOV A,R7 ;取出段選碼MOV DPTR,#TAB ;DPTR指向段選碼表第一個(gè)數(shù)據(jù)MOVC A, A+DPTR ;查表,取出段選碼MOV P1,A ;輸出段選碼LCALL DL1MS ;延時(shí)1ms,燈亮1msMOV P1,#00H ;燈全滅INC R1 ;位選指針加一MOV A,R1 ;取出位選碼ANL P0,#3FH ;將P0端口高兩位置零(這樣做的目的是為了避免用MOV指令影響到P0端口的低6位ORL P0,A ;輸出位選信號(hào)MOV A,R6 ;取出段選碼MOV DPTR,#T

22、AB ;DPTR指向段選碼表第一個(gè)數(shù)據(jù)MOVC A, A+DPTR ;查表,取出段選碼MOV P1,A ;輸出段選碼LCALL DL1MS ;延時(shí)1ms,燈亮1msMOV P1,#00H ;燈全滅INC R1MOV A,R1 ;取出位選碼ANL P0,#3FH ;將P0端口高兩位置零(這樣做的目的是為了避免用MOV指令影響到P0端口的低6位ORL P0,A ;輸出位選信號(hào)MOV A,R3 ;取出段選碼MOV DPTR,#TAB ;DPTR指向段選碼表第一個(gè)數(shù)據(jù)MOVC A, A+DPTR ;查表,取出段選碼MOV P1,A ;輸出段選碼LCALL DL1MS ;延時(shí)1ms,燈亮1msMOV P

23、1,#00H ;燈全滅LJMP MAIN1;=延時(shí)1ms子程序= ORG 0050HDL1MS:MOV R4,#6 ;延時(shí)程序通過(guò)R4,R5 實(shí)現(xiàn)D1:MOV R5,#252NOPDJNZ R5,$DJNZ R4,D1RETORG 0100HCOUNTER:SETB TR0 ;定時(shí)器開(kāi)啟RET;中斷程序TI00:MOV TH0, #83H ;中斷程序重新賦予初值 MOV TL0,#63HINC R7 ;個(gè)位加一CJNE R7,#0BH,S1 ;判斷個(gè)位是否進(jìn)位MOV R7,#01H ;重新將個(gè)位歸零CJNE R6,#00H,S2 ;判斷此時(shí)十位是否顯示 MOV R6,#01H ;若不顯示則開(kāi)啟

24、顯示S2:INC R6 ;十位加一CJNE R6,#0BH,S1 ;判斷十位是否進(jìn)位CJNE R3,#00H,S3 ;判斷百位是否顯示MOV R3,#01HS3:INC R3 ;百位加一MOV R6,#01H ;十位重新歸零CJNE R3,#03H,S1 ;判斷百位是否到2MOV P1,#00H ;如果到200則數(shù)碼管全熄滅SJMP $ ;踏步停止S1:RETI ;中斷返回ORG 0200H;=段選碼表=;TAB: DB 00H,0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H;$include (C8051F310.incpublic Init_

25、DeviceINIT SEGMENT CODErseg INIT; Peripheral specific initialization functions,; Called from the Init_Device labelPCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hretTimer_Init:mov CKCON, #002hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0.4 - Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - Unassigned, Push-P

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論