利用51單片機(jī)統(tǒng)計(jì)脈沖個(gè)數(shù),即時(shí)輸出顯示
;利用51單片機(jī)設(shè)計(jì)一個(gè)計(jì)數(shù)顯示系統(tǒng),要求8個(gè)數(shù)碼管顯示T1輸入脈沖的個(gè)數(shù)。
;最好用匯編語言,加注釋,盡量別太復(fù)雜。盡量快些哈!
;懸賞分:30 | 解決時(shí)間:2011-7-20 19:15 |
;=====================================================
;最佳答案:
;題目要求在T1端輸入脈沖,統(tǒng)計(jì)脈沖個(gè)數(shù),并即時(shí)輸出顯示,使用8個(gè)LED數(shù)碼管,顯示:0000 0000~9999 9999。
;計(jì)數(shù)、顯示,很簡單的。雖然要求的位數(shù)較多,但是循環(huán)一下,也就可以了。
;程序用匯編匯編語言編寫好了,指令不超過50行,太簡單了。
;題目只是要求在T1端輸入脈沖,并沒有指出顯示電路,那么就設(shè)計(jì)一個(gè)仿真實(shí)驗(yàn)電路如下:
;仿真圖中使用了兩種虛擬儀器:“信號發(fā)生器”和“計(jì)數(shù)器”,通過按鍵即可輸入單次脈沖和連續(xù)脈沖。
;全部程序如下:
NUM_B EQU 30H ;計(jì)數(shù)、顯示單元起始地址
NUM_N EQU 8 ;計(jì)數(shù)、顯示單元的字節(jié)數(shù)
ORG 0000H
JMP START
ORG 001BH
JMP T1_INT
;------------------------
START:
MOV TMOD, #60H ;T1計(jì)數(shù)方式2
MOV TH1, #255 ;初始值為FF
MOV TL1, #255 ;當(dāng)收到一個(gè)輸入,立刻引起中斷
SETB TR1 ;啟動T1
MOV IE, #10001000B;允許中斷
MOV SP, #40H ;設(shè)置堆棧
;------------------------
M_LOOP:
CALL DISP
SJMP M_LOOP
;------------------------
DISP:
MOV R0, #NUM_B ;30H
MOV R2, #1 ;先顯示最低位
D_LOOP:
MOV A, @R0
ADD A, #(D_TAB - $ - 3)
MOVC A, @A + PC
MOV P2, #0 ;關(guān)閉顯示,消隱
MOV P0, A ;輸出段碼
MOV P2, R2 ;輸出位碼
CALL DL1MS
MOV A, R2 ;修改位碼
RL A
MOV R2, A
INC R0 ;修改顯示指針
CJNE R0, #NUM_B + NUM_N, D_LOOP
RET
;------------------------
D_TAB: ;共陽極段碼
DB 0C0H,0F9H,0A4H,0B0H, 99H, 92H, 82H,0F8H
DB 80H, 90H, 88H, 83H,0C6H,0A1H, 86H, 8EH,0FFH;FF是空白的代碼
;------------------------
DL1MS: ;延時(shí)
MOV R7, #242
DJNZ R7, $
DJNZ R7, $
RET
;------------------------
T1_INT: ;T1中斷程序
PUSH PSW ;保護(hù)現(xiàn)場
SETB RS0 ;換用工作區(qū)
MOV R0, #NUM_B
T1_LOOP:
INC @R0 ;數(shù)字加一
CJNE @R0, #10, T1_END ;不到10就退出
MOV @R0, #0 ;到10就清零
INC R0 ;轉(zhuǎn)去下一位
CJNE R0, #NUM_B + NUM_N, T1_LOOP
T1_END:
POP PSW ;恢復(fù)現(xiàn)場
RETI
;------------------------
END
;=====================================================
回答時(shí)間:2011-7-18 07:56
回答者: 做而論道 | 十五級 采納率:43%
提問者對于答案的評價(jià):非常感謝!
;=====================================================
后記:
仿真時(shí),信號發(fā)生器有個(gè)控制框,可以選擇信號的輸出頻率、幅度等,屏幕截圖如下:
在仿真時(shí),計(jì)數(shù)器是上升沿計(jì)數(shù),而單片機(jī)是下降沿計(jì)數(shù),所以,兩者顯示的數(shù)字,有一個(gè)時(shí)間差。
另外,剛剛啟動時(shí),計(jì)數(shù)器總要先計(jì)一個(gè)數(shù),不知如何控制才好。