LJMP MAIN 跳到STRAT处执行
ORG 001BH
LJMP JIA1
ORG 0030H
MAIN:MOV TMOD,#01H 设置T1工作在模式1
MOV TH1,#068H 赋初值,定时10ms
MOV TL1,#0F0H
MOV IE,#88H 开CPU中断,开定时器1中断
SETB TR1 启动T1定时器工作
MOV 60H,#100给60H单元赋初值
CLR 4FH 清零4FH单元
DISPLAY: 显示子程序
MOV DPTR,#TAB DPTR指向编码表位置
MOV A,R3 将R3的内容复制到A
MOV B,#10
DIV AB A除B,商给A,余数给B
MOVC A,@A+DPTR 根据A的值取出编码表中的编码
MOV P1,A 由P1口输出A的内容
SETB P2.0 置位P2.0
CLR P2.0 清零P2.0
MOV A,B
MOVC A,@A+DPTR 根据A的值取出编码表中的编码
MOV P1,A 由P1口输出A的内容
SETB P2.1 置位P2.1
CLR P2.1 清零P2.1
JNB 4FH,DISPLAY 判断1秒时间是否到,没有到,则跳转到DIAPLAY处
CLR 4FH 1秒到,清4FH
LJMP DISPLAY 调用显示子程序 JIA1:MOV TH1,#068H赋初值
MOV TL1,#0F0H
DJNZ 60H,TT 60H单元自减1,判断是否为0,不为0则跳转到TT处
MOV 60H,#100 60H单元为0,则重新给其赋值100
SETB 4FH 同时置位4FH单元
INC R3R3自加1
CJNE R3,#60,TT 判断R3是否为60,否则跳转TT处
MOV R3,#0 R3为60,则给R3赋0
TT:RETITAB: 编码表
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H 编码
END程序结束
设计一个秒表,需要考虑以下因素:
1、因为视觉暂留的因素,一般而言到0.1秒的精度就可以了。
2、需要有按键控制启动、停止、清零这些功能。
KEYVAL EQU 30H
DAT EQU 33H
SCANLED EQU 39H
CLK EQU 77H
SEC EQU 78H
SEC1 EQU 79H
SEC2 EQU 7AH
DOT BIT 00H
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXTINT0
ORG 000BH
LJMP T0ISR 50ms定时
ORG 001BH
LJMP T1ISR 扫描显示
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#11H
MOV TH0,#03CH
MOV TL0,#0B0H
MOV TH1,#0ECH
MOV TL1,#078H
MOV KEYVAL,#2
MOV 33H,#10H
MOV 34H,#10H
MOV 35H,#10H
MOV 36H,#10H
MOV CLK,#0
SETB IT0
SETB EX0
CLR TR0
CLR ET0
MOV R2,#0
SETB TR1
SETB ET1
SETB EA
LOOP:
MOV A,KEYVAL
LOOP1:
JNZ LOOP2 启动
SETB TR0
SETB ET0
SJMP LOOP
LOOP2:
DEC A
JNZ LOOP3 暂停
CLR TR0
CLR ET0
SJMP LOOP
LOOP3:
DEC A
JNZ LOOP 清零
MOV 36H,#0
MOV 35H,#0
MOV 34H,#0
MOV 33H,#0
SJMP LOOP
EXTINT0:
PUSH ACC
INC KEYVAL
MOV A,KEYVAL
CJNE A,#3,EXT00
EXT00:
JC EXT01
MOV KEYVAL,#0
EXT01:
POP ACC
RETI
T0ISR:
PUSH ACC
CLR TR0
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
INC CLK
MOV A,CLK
CJNE A,#2,T0ISRE
MOV CLK,#0
INC 36H
MOV A,36H
CJNE A,#10,T0ISRE
MOV 36H,#0
INC 35H
MOV A,35H
CJNE A,#10,T0ISRE
MOV 35H,#0
INC 34H
MOV A,34H
CJNE A,#6,T0ISRE
MOV 34H,#0
INC 33H
MOV A,33H
CJNE A,#10,T0ISRE
MOV 33H,#0
T0ISRE:
POP ACC
RETI
T1ISR:
PUSH ACC
CLR TR1
MOV TH1,#0ECH
MOV TL1,#78H
SETB TR1
MOV DPTR,#LEDTAB
T100:
MOV R0,#DAT
MOV A,SCANLED
ADD A,R0
MOV R0,A
MOV A,SCANLED
JNZ T101
MOV P2,#01H
SETB DOT
SJMP T1DIS
T101:
DEC A
JNZ T102
MOV P2,#02H
CLR DOT
SJMP T1DIS
T102:
DEC A
JNZ T103
MOV P2,#04H
SETB DOT
SJMP T1DIS
T103:
MOV P2,#08H
CLR DOT
T1DIS:
MOV A,@R0
MOVC A,@A+DPTR
JNB DOT,T1DIS1
ORL A,#01H
T1DIS1:
CPL A
MOV P0,A
INC SCANLED
MOV A,SCANLED
CJNE A,#4,T1END
MOV SCANLED,#0
T1END:
POP ACC
RETI
LEDTAB: DB 0FCH "0" 00H
DB 60H "1" 01H
DB 0DAH "2" 02H
DB 0F2H "3" 03H
DB 66H "4" 04H
DB 0B6H "5" 05H
DB 0BEH "6" 06H
DB 0E0H "7" 07H
DB 0FEH "8" 08H
DB 0F6H "9" 09H
DB 0EEH "A" 0AH
DB 3EH "B" 0BH
DB 9CH "C" 0CH
DB 7AH "D" 0DH
DB 9EH "E" 0EH
DB 8EH "F" 0FH
DB 00H " " 10H
END
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)