;================================================================
;功能:本程序实现P0口的对数码管动态显示秒表的分、秒、1/100秒;
; 计时程序由中断服务程序实现,采用定时计数器T0工作方式1;
; P2口实现对数码管的片选功能
;================================================================
;==========================初始化================================
SHUCHU EQU P2 ;定义P0口为输出口
PIANXUAN EQU P1 ;定义P2口为片选口
MIAO EQU 30H
FEN EQU 31H
MIAO0 EQU 32H
SHUZI EQU 33H
C_0 BIT 20H.0
;======================系统程序开始==============================
ORG 00H
LJMP START
ORG 03H
LJMP ON_OFF
ORG 0BH
LJMP T0_1
ORG 13H
LJMP RESET
ORG 30H
START:
CALL INIT
SETB C_0
MOV MIAO,#00
MOV MIAO0,#00
MOV FEN,#00
MOV DPTR,#TAB
MOV R2,#5
MAIN:
JNB C_0,$
CLR C_0
LL: CALL DISPLAY
CALL SHIJIAN
JMP MAIN
;========================时间子程序=============================
;输入:"30H、31H、32H"
;输出:无
;实现的功能:分、秒、百分之秒的计算。
;===============================================================
SHIJIAN:
DJNZ R2,TIAOCHU
MOV R2,#5
INC MIAO0
MOV R3,MIAO0
CJNE R3,#100,TIAOCHU
MOV MIAO0,#00
INC MIAO
MOV R3,MIAO
CJNE R3,#60,TIAOCHU
MOV MIAO,#00
INC FEN
MOV R3,FEN
CJNE R3,#60,TIAOCHU
MOV FEN,#00
TIAOCHU:RET
;========================显示子程序=============================
;输入:"A"
;输出:"P2口"
;实现的功能:显示秒、分、百分之妙
;===============================================================
DISPLAY:MOV SHUZI,MIAO0
CALL JISUAN
MOVC A,@A+DPTR
MOV SHUCHU,A ;显示十位
MOV PIANXUAN,#10H ;片选
CALL DELAY
MOV PIANXUAN,#00H
MOV A,B
MOVC A,@A+DPTR
MOV SHUCHU,A ;显示个位
MOV PIANXUAN,#20H ;片选
CALL DELAY ;延时
MOV PIANXUAN,#00H
MOV SHUZI,MIAO
CALL JISUAN
MOVC A,@A+DPTR
MOV SHUCHU,A ;显示十位
MOV PIANXUAN,#04H ;片选
CALL DELAY
MOV PIANXUAN,#00H
MOV A,B
MOVC A,@A+DPTR
MOV SHUCHU,A ;显示个位
MOV PIANXUAN,#08H ;片选
CALL DELAY ;延时
MOV PIANXUAN,#00H
MOV SHUZI,FEN
CALL JISUAN
MOVC A,@A+DPTR
MOV SHUCHU,A ;显示十位
MOV PIANXUAN,#01H ;片选
CALL DELAY
MOV PIANXUAN,#00H
MOV A,B
MOVC A,@A+DPTR
MOV SHUCHU,A ;显示个位
MOV PIANXUAN,#02H ;片选
CALL DELAY ;延时
MOV PIANXUAN,#00H
RET
;========================计算子程序=============================
;输入:30H
;输出:"A和B"
;实现的功能:把33H中的数据十位和个位分离出来
;===============================================================
JISUAN:MOV A,SHUZI ;数据放在A中
MOV B,#10 ;除数放在B中
DIV AB ;商放在A中,余数放在B中
RET
;====================复位中断服务程序============================
;输入;无
;输出: 无
;实现的功能:把30H、31H、32H中的数据清零。
;================================================================
RESET:PUSH ACC
MOV 30H,#00H
MOV 3H,#00H
MOV 32H,#00H
CALL DELAY
POP ACC
RETI
;====================启停中断服务程序============================
;输入;无
;输出: 无
;实现的功能:关闭定时器
;================================================================
ON_OFF:CPL TR0
CALL DELAY
RETI
;====================定时中断0服务子程序========================
;输入:无
;输出:无
;实现的功能:实现定时20MS,影响标中断志位C_0
;===============================================================
T0_1:MOV TL0,50H ;设置定时初值
MOV TH0,51H
SETB C_0 ;定时标志位清0
RETI
;========================中断设置子程序=========================
;输入:无
;输出:无
;实现的功能:初始化设置定时器,设置初值,开中断0、中断1,定时器0.
;===============================================================
INIT:MOV TMOD,#01H ;定时器0工作方式1
MOV DPTR,#65536-20000
MOV 50H,DPL
MOV 51H,DPH
MOV TL0,50H ;设置定时初值
MOV TH0,51H
MOV IE,#87H ;开定时器中断0
MOV TCON,#15H
RET
;======================延时程序==================================
;输入;无
;输出: 无
;实现的功能:延时一段时间
;================================================================
DELAY:MOV R6,#80
L7:MOV R5,#60
L8:DJNZ R5,$
DJNZ R6,L7
RET
;======================共阳查表数据==============================
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;===========================结束=================================
END
HAOMIAO EQU 31H
MIAOWEI EQU 32H
SHIMIAO EQU 33H
FENWEI EQU 34H
COU EQU 35H
ORG 0000H
AJMP START
ORG 0003H
AJMP INT0
ORG 000BH
AJMP TIME0
ORG 0030H
START: MOV HAOMIAO,#0
MOV MIAOWEI ,#0
MOV SHIMIAO,#0
MOV FENWEI ,#0
MOV COU,#0
MOV TMOD,#01H
MOV TH0,#40H
MOV TL0,#98H
MOV P2,#0FFH
SETB ET0
SETB TR0
SETB EX0
SETB IT0
SETB EA
K1: LCALL XIANSHI
JB P1.0,K2
LJMP MAIN
LCALL DELY1MS
JNB P1.0,START
K2: JB P1.1,K3
LJMP MAIN
LCALL DELY1MS
JNB P1.1,STOP
K3: JB P1.2,K1
LJMP MAIN
LCALL DELY1MS
JNB P1.2,CLEAR
LJMP K1
START: SETB TR0
LJMP K1
STOP: CLR TR0
LJMP K2
CLEAR: CLR TRO
MOV HAOMIAO,#0
MOV MIAOWEI,#0
MOV SHIMIAO,#0
MOV FENWEI,#0
LJMP K1
TIME0: INC COU
MOV A,COU
CJNE A,#2H,OVER
MOV COU, #0
INC HAOMIAO
MOV A,HAOMIAO
CJNE A,#10,OVER
MOV HAOMIAO,#0
INC MIAOWEI
MOV A,MIAOWEI
CJNE A,#10,OVER
MOV MIAOWEI,#0
INC SHIMIAO
MOV A,SHIMIAO
CJNE A,#6,OVER
MOV SHIMIAO,#0
INC FENWEI
MOV A,FENWEI
CJNE A,#10,OVER
MOV HAOMIAO,#0
MOV MIAOWEI,#0
MOV SHIMIAO,#0
MOV FENWEI,#0
CLR TR0
RETI
MAIN: LCALL XIANSHI
OVER: MOV TH0,#40H
MOV TL0,#98H
RETI
DELY1MS: MOV R7,#4
MOV R6,#125
LOOP2: DJNZ R6,LOOP2
LOOP3: DJNZ R7,LOOP3
RET
XIANSHI: MOV P2,#0FEH
MOV DPTR,#TABLE
MOV A,HAOMIAO
MOVC A,@A+DPTR
MOV P0,A
LCALL DELY1MS
MOV P2,#0FDH
MOV DPTR,#TABLE1
MOV A,MIAOWEI
MOVC A,@A+DPTR
MOV P0,A
LCALL DELY1MS
MOV P2,#0FBH
MOV DPTR,#TABLE
MOV A,SHIMIAO
MOVC A,@A+DPTR
MOV P0,A
LCALL DELY1MS
MOV P2,#0F7H
MOV DPTR,#TABLE
MOV A,FENWEI
MOVC A,@A+DPTR
MOV P0,A
LCALL DELY1MS
RET
TABLE: DB 0C0H, 0F9H ,0A4H, 0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
TABLE1:DB 0BFH,086H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH
END
鬼城,似乎没人鸟......的╮(╯_╰)╭
鬼城,似乎没有人鸟...... ╮(╯_╰)╭
自己试验吧。