|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2012-5-11 11:33:01
|
显示全部楼层
FIRST BIT P1.0;定义四个数码管?
SECOND BIT P1.1
THREE BIT P1.2
FOUR BIT P1.3
MINUTE EQU 60H;中断内加1变量,用来计是不是到1S
COUNT1 EQU 65H;分钟个位
COUNT2 EQU 66H;分钟十位
COUNT3 EQU 67H;小时个位
COUNT4 EQU 68H;小时十位
ONEMINUTE EQU 69H
INII EQU 70H
COUNT5 EQU 71H
MOV INII,#0
MOV ONEMINUTE,#200;定时多长时间为一秒
MOV COUNT1,#0
MOV COUNT2,#0
MOV COUNT3,#0
MOV COUNT4,#0
ORG 0000H
AJMP START
ORG 00BH
AJMP INTERRUPT
ORG 40H
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH
;;;显示代码;;;;;
ORG 80H
START:
MOV TMOD,#01H
SETB EA
SETB TR0
SETB ET0
MOV TH0,#0EEH ;;定时器五豪秒
MOV TL0,#00H
LOOP:
MOV A,MINUTE
CJNE A,#200,c1 ;5MS*200=1S,计数没有到1秒显示0000
INC COUNT5
AJMP DISPLAY
;;;;;interrupt;;;;;;;
INTERRUPT:
MOV TH0,#0EEH
MOV TL0,#00H
INC MINUTE ;计数加1
RET
;;;; 数码管显示部分 ;;;;;
DISPLAY:
CLR MINUTE
MOV A,COUNT5
CJNE A,#60,C1;计数是不是到1分钟
MOV COUNT5,#0;计数1秒清0
INC COUNT1
C1:MOV A, COUNT1
CJNE A,#10,SHI;10minute
MOV COUNT1,#0;计数十分钟清0
INC COUNT2
C2: MOV A,COUNT2
CJNE A,#6,BAI
MOV COUNT2,#0;计数6十分钟清0
INC COUNT3
C3: MOV A,COUNT3
CJNE A,#10,QIAN
MOV COUNT3,#0 ;计数十小时清0
INC COUNT4
C4: MOV A, COUNT4
CJNE A,#2,WAN;如果24小时到,COUNT1,2,3,4都清0转到C1从重显示
MOV A, COUNT3
CJNE A,#4,WAN
MOV COUNT4,#0
MOV COUNT1,#0
MOV COUNT2,#0
MOV COUNT3,#0
AJMP C1
SHI:
MOV A, COUNT1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
CLR FOUR
LCALL DELAY
SETB FOUR
AJMP C2;转到第二个数码管显示
BAI:
MOV A, COUNT2
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
CLR THREE
LCALL DELAY
SETB THREE
AJMP C3;转到第3个数码管显示
QIAN:
MOV A, COUNT3
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
CLR SECOND
LCALL DELAY
SETB SECOND
AJMP C4;转到第4个数码管显示
WAN:
MOV A,COUNT4
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
CLR FIRST
LCALL DELAY
SETB FIRST
AJMP LOOP;回主程序
;;;; 延时;;;;;;;
DELAY: MOV R7,#2
D0: MOV R6,#2
D1: DJNZ R6,D1
DJNZ R7,D0
RET
END |
|