?? shu09.asm
字號:
;***************************************************************************
;* sxj1974@163.com (51c51 test web) www.8951.com *
;* Create by :石學(xué)軍 www.51c51.com 更多例程請登陸網(wǎng)站 *
;***************************************************************************
;***************************************************************************
;功能描述:定時中斷實現(xiàn)顯示的程序,第一位始終顯示0,第二位顯示在0-9之間循環(huán)
;**************************************************
Counter EQU 59H ;計數(shù)器,顯示程序通過它得知現(xiàn)正顯示哪個數(shù)碼管
FIRST EQU P2.6 ;第一位數(shù)碼管的位控制
SECOND EQU P2.5 ;第二位數(shù)碼管的位控制
DISPBUF EQU 5AH ;顯示緩沖區(qū)為5AH和5BH
ORG 0000H
AJMP START
ORG 000BH ;定時器T0的入口
AJMP DISP ;顯示程序
ORG 30H
START:
MOV SP,#5FH ;設(shè)置堆棧
MOV P1,#0FFH
MOV P0,#0FFH
MOV P2,#0FFH ;初始化,所顯示器,LED滅
MOV TMOD,#00000001B ;定時器T0工作于模式1(16位定時/計數(shù)模式)
MOV TH0,#HIGH(65536-2000)
MOV TL0,#LOW(65536-2000)
SETB TR0
SETB EA
SETB ET0
MOV Counter,#0 ;計數(shù)器初始化
MOV DISPBUF,#0 ;第一位始終顯示0
MOV A,#0
LOOP:
MOV DISPBUF+1,A ;第二位輪流顯示0-9
INC A
LCALL DELAY
CJNE A,#10,LOOP
MOV A,#0
AJMP LOOP ;在此中間可以按排任意程序,這里僅作示范。
;主程序到此結(jié)束
DISP: ;定時器T0的中斷響應(yīng)程序
PUSH ACC ;ACC入棧
PUSH PSW ;PSW入棧
MOV TH0,#HIGH(65536-2000);定時時間為2000個周期,約2170微秒
MOV TL0,#LOW(65536-2000)
SETB FIRST
SETB SECOND ;關(guān)顯示
MOV A,#DISPBUF ;顯示緩沖區(qū)首地址
ADD A,Counter
MOV R0,A
MOV A,@R0 ;根據(jù)計數(shù)器的值取相應(yīng)的顯示緩沖區(qū)的值
MOV DPTR,#DISPTAB ;字形表首地址
MOVC A,@A+DPTR ;取字形碼
MOV P0,A ;將字形碼送P0位(段口)
MOV A,Counter ;取計數(shù)器的值
JZ DISPFIRST ;如果是0則顯示第一位
CLR SECOND ;否則顯示第二位
AJMP DISPNEXT
DISPFIRST:
CLR FIRST ;顯示第一位
DISPNEXT:
INC Counter ;計數(shù)器加1
MOV A,Counter
DEC A ;如果計數(shù)器計到2,則讓它回0
DEC A
JZ RSTCOUNT
AJMP DISPEXIT
RSTCOUNT:
MOV Counter,#0 ;計數(shù)器的值只能是0或1
DISPEXIT:
POP PSW
POP ACC
RETI
DELAY: ;延時130毫秒
PUSH PSW
SETB RS0
MOV R7,#255
D1: MOV R6,#255
D2: NOP
NOP
NOP
NOP
DJNZ R6,D2
DJNZ R7,D1
POP PSW
RET
DISPTAB:db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h
;0 1 2 3 4 5 6 7 8 9
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -