发表于:2006/8/27 12:23:00
#0楼
;-----------------------------
;2006年电子设计大赛选拔试题
;制作人:李明星
;完成日期:2006。08。21
;晶震:22。1148
;-----------------------------
KEY_1 BIT P1.0
KEY_2 BIT P1.1
KEY_3 BIT P1.2
KEY_4 BIT P1.3
T EQU 40H
M EQU 41H
ORG 0000H
AJMP MAIN
ORG 001BH
AJMP _T0_
ORG 0030H
MAIN: MOV SP,#5FH
NOP
lcall init_main
lcall init_max7219
LM_M: ACALL DISP
ACALL D10MS
ACALL KEY_SCAN
AJMP LM_M
KEY_SCAN:
MOV P1,#0FFH
MOV C,KEY_1
JNC D1STIME
MOV C,KEY_2
JNC D100MSTIME
MOV C,KEY_3
JNC D10MSTIME
MOV C,KEY_4
JNC D1MSTIME
RET
init_main:
mov r1,#8
mov r0,#30h
lp_main:mov @r0,#00h
inc r0
djnz r1,lp_main
ret
D1STIME:
MOV M,#0
CLR F0
MOV T,#100
ACALL INIT_T
JNB F0,$
RET
D100MSTIME:
MOV M,#1
CLR F0
MOV T,#10
ACALL INIT_T
JNB F0,$
RET
D10MSTIME:
MOV M,#2
CLR F0
MOV T,#1
ACALL INIT_T
JNB F0,$
RET
D1MSTIME:
MOV M,#2
CLR F0
MOV T,#1
ACALL INIT_T
JNB F0,$
RET
INIT_T:
MOV TMOD,#15H
MOV TH1,#0B8H
MOV TL1,#03H
SETB ET1
CLR ET0
SETB EA
SETB TR0
SETB TR1
RET
_T0_: MOV TH1,#0B8H
MOV TL1,#03H
DJNZ T,_T0_NEXT
CLR TR0
CLR TR1
SETB F0
ACALL DAT_CONVERSION
MOV TH0,#00H
MOV TL0,#00H
ACALL MOVE_M
ACALL DISP
_T0_NEXT:RETI
MOVE_M: nop
mov a,m
cjne a,#00h,move_2
ret
mov a,m
move_2: cjne a,#01h,move_3
mov 35h,34h
mov 34h,#0
mov 34h,33h
mov 33h,#0
mov 33h,32h
mov 32h,#0
mov 32h,31h
mov 31h,#0
mov 31h,30h
mov 30h,0
ret
mov a,m
move_3: cjne a,#02h,move_ret
mov 36h,34h
mov 34h,#0
mov 35h,33h
mov 33h,#0
mov 34h,32h
mov 32h,#0
mov 33h,31h
mov 31h,#0
mov 32h,30h
mov 30h,#0
move_ret: ret
dat_conversion:
mov a,th0
rrc a
mov r2,a
mov a,tl0
rrc a
mov r3,a
acall ibtd2
mov a,r6
anl a,#0fh
mov 30h,a
mov a,r6
anl a,#0f0h
swap a
mov 31h,a
mov a,r5
anl a,#0fh
mov 32h,a
mov a,r5
anl a,#0f0h
swap a
mov 33h,a
mov a,r4
anl a,#0fh
mov 34h,a
ret
;*********************************
;* 双字节HEX->BCD *
;* 入口:R2R3为双字节16位二进制数 *
;* 出口:R4R5R6为转换完的压缩BCD *
;*********************************
IBTD2: CLR A
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,#16
LM_BCD: CLR C
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R7,LM_BCD
RET
;************************************************
;* 初始化max7219 *
;* 程序创建时间:2006-04-14 *
;* 最后修改时间:2006- *
;* 影响资源:P1.7--CLK P1.6--DIN P1.4--CS7219 *
;* 占用寄存器:50H,51H,52H *
;************************************************
clk bit p1.7
din bit p1.6
cs7219 bit p1.4
scan_lim equ 50h ;扫描界限
ctrl_7219 equ 51h ;控制字
ctrl_byte equ 52h ;控制子存储器
init_max7219:
setb clk
setb cs7219
mov scan_lim,#07h
mov ctrl_7219,#09h ;译码方式
mov ctrl_byte,#0ffh
lcall t_max7219
mov ctrl_7219,#0ah ;亮度
mov ctrl_byte,#0fh
lcall t_max7219
mov ctrl_7219,#0bh ;扫描界限
mov ctrl_byte,scan_lim
lcall t_max7219
mov ctrl_7219,#0ch ;停机状态
mov ctrl_byte,#01h
lcall t_max7219
mov ctrl_7219,#0fh ;测试状态
mov ctrl_byte,#00h
lcall t_max7219
ret
;************************
;* 传送16位数据
;*
;************************
t_max7219:
mov a,ctrl_7219
mov b,#08h
clr cs7219
max7219_h8:
nop
clr clk
rlc a
mov din,c
nop
setb clk
djnz b,max7219_h8
mov a,ctrl_byte
mov b,#08h
max7219_l8:
nop
clr clk
rlc a
mov din,c
nop
setb clk
djnz b,max7219_l8
setb cs7219
ret
;*****************************
;* 显示程序
;* 显示缓冲区地址:30H--37H
;************
disp: setb rs1
clr rs0
ORL 33H,#80H ;<---------------------------------
ORL 36H,#80H ;<---------------------------------
mov r0,scan_lim ;循环扫描次数
inc r0
mov a,scan_lim
add a,#30h
mov r1,a ;显示缓冲区地址
lp
;2006年电子设计大赛选拔试题
;制作人:李明星
;完成日期:2006。08。21
;晶震:22。1148
;-----------------------------
KEY_1 BIT P1.0
KEY_2 BIT P1.1
KEY_3 BIT P1.2
KEY_4 BIT P1.3
T EQU 40H
M EQU 41H
ORG 0000H
AJMP MAIN
ORG 001BH
AJMP _T0_
ORG 0030H
MAIN: MOV SP,#5FH
NOP
lcall init_main
lcall init_max7219
LM_M: ACALL DISP
ACALL D10MS
ACALL KEY_SCAN
AJMP LM_M
KEY_SCAN:
MOV P1,#0FFH
MOV C,KEY_1
JNC D1STIME
MOV C,KEY_2
JNC D100MSTIME
MOV C,KEY_3
JNC D10MSTIME
MOV C,KEY_4
JNC D1MSTIME
RET
init_main:
mov r1,#8
mov r0,#30h
lp_main:mov @r0,#00h
inc r0
djnz r1,lp_main
ret
D1STIME:
MOV M,#0
CLR F0
MOV T,#100
ACALL INIT_T
JNB F0,$
RET
D100MSTIME:
MOV M,#1
CLR F0
MOV T,#10
ACALL INIT_T
JNB F0,$
RET
D10MSTIME:
MOV M,#2
CLR F0
MOV T,#1
ACALL INIT_T
JNB F0,$
RET
D1MSTIME:
MOV M,#2
CLR F0
MOV T,#1
ACALL INIT_T
JNB F0,$
RET
INIT_T:
MOV TMOD,#15H
MOV TH1,#0B8H
MOV TL1,#03H
SETB ET1
CLR ET0
SETB EA
SETB TR0
SETB TR1
RET
_T0_: MOV TH1,#0B8H
MOV TL1,#03H
DJNZ T,_T0_NEXT
CLR TR0
CLR TR1
SETB F0
ACALL DAT_CONVERSION
MOV TH0,#00H
MOV TL0,#00H
ACALL MOVE_M
ACALL DISP
_T0_NEXT:RETI
MOVE_M: nop
mov a,m
cjne a,#00h,move_2
ret
mov a,m
move_2: cjne a,#01h,move_3
mov 35h,34h
mov 34h,#0
mov 34h,33h
mov 33h,#0
mov 33h,32h
mov 32h,#0
mov 32h,31h
mov 31h,#0
mov 31h,30h
mov 30h,0
ret
mov a,m
move_3: cjne a,#02h,move_ret
mov 36h,34h
mov 34h,#0
mov 35h,33h
mov 33h,#0
mov 34h,32h
mov 32h,#0
mov 33h,31h
mov 31h,#0
mov 32h,30h
mov 30h,#0
move_ret: ret
dat_conversion:
mov a,th0
rrc a
mov r2,a
mov a,tl0
rrc a
mov r3,a
acall ibtd2
mov a,r6
anl a,#0fh
mov 30h,a
mov a,r6
anl a,#0f0h
swap a
mov 31h,a
mov a,r5
anl a,#0fh
mov 32h,a
mov a,r5
anl a,#0f0h
swap a
mov 33h,a
mov a,r4
anl a,#0fh
mov 34h,a
ret
;*********************************
;* 双字节HEX->BCD *
;* 入口:R2R3为双字节16位二进制数 *
;* 出口:R4R5R6为转换完的压缩BCD *
;*********************************
IBTD2: CLR A
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,#16
LM_BCD: CLR C
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R7,LM_BCD
RET
;************************************************
;* 初始化max7219 *
;* 程序创建时间:2006-04-14 *
;* 最后修改时间:2006- *
;* 影响资源:P1.7--CLK P1.6--DIN P1.4--CS7219 *
;* 占用寄存器:50H,51H,52H *
;************************************************
clk bit p1.7
din bit p1.6
cs7219 bit p1.4
scan_lim equ 50h ;扫描界限
ctrl_7219 equ 51h ;控制字
ctrl_byte equ 52h ;控制子存储器
init_max7219:
setb clk
setb cs7219
mov scan_lim,#07h
mov ctrl_7219,#09h ;译码方式
mov ctrl_byte,#0ffh
lcall t_max7219
mov ctrl_7219,#0ah ;亮度
mov ctrl_byte,#0fh
lcall t_max7219
mov ctrl_7219,#0bh ;扫描界限
mov ctrl_byte,scan_lim
lcall t_max7219
mov ctrl_7219,#0ch ;停机状态
mov ctrl_byte,#01h
lcall t_max7219
mov ctrl_7219,#0fh ;测试状态
mov ctrl_byte,#00h
lcall t_max7219
ret
;************************
;* 传送16位数据
;*
;************************
t_max7219:
mov a,ctrl_7219
mov b,#08h
clr cs7219
max7219_h8:
nop
clr clk
rlc a
mov din,c
nop
setb clk
djnz b,max7219_h8
mov a,ctrl_byte
mov b,#08h
max7219_l8:
nop
clr clk
rlc a
mov din,c
nop
setb clk
djnz b,max7219_l8
setb cs7219
ret
;*****************************
;* 显示程序
;* 显示缓冲区地址:30H--37H
;************
disp: setb rs1
clr rs0
ORL 33H,#80H ;<---------------------------------
ORL 36H,#80H ;<---------------------------------
mov r0,scan_lim ;循环扫描次数
inc r0
mov a,scan_lim
add a,#30h
mov r1,a ;显示缓冲区地址
lp
附件:
[本地下载]