📄 xxx_1.asm
字号:
;--------------------------------------------
;作者:Vneus
;MCU:AT89C51
;显示屏:1604
;EEPROM:AT93C46
;日期:2009.02.23
;项目:电磁铁测试仪(ON/OFF.时间可调,每输出一个脉冲计数加1)
;--------------------------------------------
RS equ p3.2;EQU P1.0;
RW equ p3.1;EQU P1.1; 显示屏赋值
E equ p3.0;EQU P1.2;
;--------------------------------------------
SETUP EQU P2.0
ADD_F EQU P2.1; KEY赋值
SUB_F EQU P2.2
ON_OFF EQU P2.3
save equ p2.4
;--------------------------------------------
CS equ p0.2;equ P1.6
CLK equ p0.1;equ P1.5; eeprom赋值
DI equ p0.3;equ P1.4
DO equ p0.4;equ P1.3
;--------------------------------------------
;index_1 EQU 4bH ;
temp_1 EQU 4cH
temp_2 EQU 4dH
count_on1 equ 26h
count_on2 equ 27h
count_off1 equ 28h
count_off2 equ 29h
temp_on1 equ 2ah
temp_on2 equ 2bh
temp_off1 equ 2ch
temp_off2 equ 2dh
temp equ 2eh
;--------------------------------------------
ORG 0000H
AJMP START
ORG 000BH
lJMP TO
;--------------------------------------------
ORG 0030H
START:
MOV SP, #75H
LCALL port_ini
LCALL saf_ini
LCALL lcm_ini
lcall read_eeprom
LCALL lcm_dis_1
LCALL lcm_dis_2
lcall lcm_dis_3
LCALL LCM_DIS_4
LJMP key_0
;--------------------------------------------
port_ini:
MOV P0, #00h
MOV P1, #00h
MOV P2, #07fH
mov p3, #00h
RET
;--------------------------------------------
saf_ini:
MOV TMOD,#01H
SETB EA
SETB ET0
CLR TR0
;-----------------------------------------------
mov r0, #30h
mov dptr, #tab_1
go_1:
clr a
movc a, @a+dptr
mov @r0, a
inc r0
inc dptr
cjne r0, #3ah, go_1
;------------------------------------------------
mov r0, #40h
mov dptr, #tab_2
go_2:
clr a
movc a, @a+dptr
mov @r0, a
inc r0
inc dptr
cjne r0, #4ch, go_2
;---------------------------------------------
mov r0, #50h
mov dptr, #tab_3
go_3:
clr a
movc a, @a+dptr
mov @r0, a
inc r0
inc dptr
cjne r0, #59h, go_3
;-----------------------------------------------
mov r0, #5bh
mov dptr, #tab_6
go_6:
clr a
movc a, @a+dptr
mov @r0, a
inc r0
inc dptr
cjne r0, #66h, go_6
;----------------------------------------------
MOV TL0, #018h
MOV TH0, #0fch
RET
;---------------------------------------------
lcm_ini:
MOV A, #38H ;显示模式16*2,5*7
ACALL write_zi
MOV A, #38H ;显示模式16*2,5*7
ACALL write_zi
MOV A, #38H ;显示模式16*2,5*7
ACALL write_zi
;---------------------------------------------
MOV A, #08H ;显示关
ACALL write_zi
MOV A, #01H ;LCM_RAM清0
ACALL write_zi
MOV A, #0cH ;显示开
ACALL write_zi
MOV A, #06H ;指针设置
ACALL write_zi
RET
;---------------------------------------------
lcm_dis_1:
MOV A, #080H
ACALL write_zi
MOV R0, #30H
MOV R7, #0aH
loop1:
MOV A, @R0
ACALL write_su
INC R0
DJNZ R7, loop1
RET
;----------------------------------------------
lcm_dis_2:
MOV A, #0c0H
ACALL write_zi
MOV R0, #40H
MOV R7, #0bH
loop2:
MOV A, @R0
ACALL write_su
INC R0
DJNZ R7, loop2
RET
;----------------------------------------------
lcm_dis_3:
MOV A, #090H
ACALL write_zi
MOV R0, #50H
MOV R7, #09H
loop3:
MOV A, @R0
ACALL write_su
INC R0
DJNZ R7, loop3
RET
;----------------------------------------------
lcm_dis_4:
MOV A, #0d0H
ACALL write_zi
MOV R0, #5bH
MOV R7, #0bH
loop4:
MOV A, @R0
ACALL write_su
INC R0
DJNZ R7, loop4
RET
;----------------------------------------------
write_zi:
MOV P1, A
CLR RS
CLR RW
CLR E
LCALL delay_1ms
SETB E
RET
;----------------------------------------------
write_su:
MOV P1, A
SETB RS
CLR RW
CLR E
LCALL delay_1ms
SETB E
RET
;----------------------------------------------
key_0:
jnb on_off, run
jnb setup, add_sub
ajmp key_0
;-------------------------------------------
run:
call delay_50ms
jb on_off, key_0
call delay_50ms
jnb on_off, $
ljmp run_1
;------------------------------------------
add_sub:
call delay_50ms
call delay_50ms
jb setup, key_0
call delay_50ms
call delay_50ms
jb setup, key_0
;------------------------------------------
mov 40h, #3eh
acall lcm_dis_2
MOV A, #080H
ACALL write_zi
mov 30h, #0ffh
mov r0, #30h
mov r7, #01h
call loop1
jnb setup, $
acall delay_50ms
jnb setup, $
;-------------------------------------------
key_1:
jnb add_f, onadd_1
jnb sub_f, onsub_1
jnb setup, selet
jnb save, save_1
ajmp key_1
;-------------------------------------------
;----------------------------------------------
selet:
ACALL delay_50ms
JB setup, key_1
ACALL delay_50ms
JB setup, key_1
;---------------------------------------------
mov 30h, #3eh
acall lcm_dis_1
MOV A, #0c0H
ACALL write_zi
mov 40h, #0ffh
mov r0, #40h
mov r7, #01h
lcall loop2
jnb setup, $
acall delay_50ms
jnb setup, $
;---------------------------------------------
key_2:
jnb add_f, offadd_1
jnb sub_f, offsub_1
jnb setup, add_sub
jnb save, save_2
ajmp key_2
;--------------------------------------------
onadd_1:
ACALL delay_50ms
JB add_f, key_1
ACALL delay_50ms
JB ADD_F, key_1
call add_1
AJMP key_1
;--------------------------------------------
save_1:
ACALL delay_50ms
JB save, key_1
ACALL delay_50ms
JNB save, $
ajmp save_data
;--------------------------------------------
onsub_1:
ACALL delay_50ms
JB SUB_F, key_1
ACALL delay_50ms
JB SUB_F, key_1
call sub_1
ajmp key_1
;---------------------------------------------
save_2:
ACALL delay_50ms
JB save, key_2
ACALL delay_50ms
JNB save, $
ajmp save_data
;-----------------------------------------------
offadd_1:
ACALL delay_50ms
JB add_f, key_2
ACALL delay_50ms
JB ADD_F, key_2
call add_2
AJMP key_2
;--------------------------------------------
offsub_1:
ACALL delay_50ms
JB SUB_F, key_2
ACALL delay_50ms
JB SUB_F, key_2
call sub_2
ajmp key_2
;-------------------------------------------
add_1:
MOV A, #35H
CJNE A, 34H, OK
mov 34h, #30h;------0
MOV 35H, #30H;------0
MOV 36H, #30H;------0
MOV 37H, #31H;------1
mov a, #01h
mov temp_on1, a
clr a
mov temp_on2, a
AJMP JJ
OK:
MOV A, #3AH
INC 37H;---------------------个位数+1
CJNE A, 37H, add_next
MOV 37H, #30H
INC 36H;---------------------十位数+1
CJNE A, 36H, add_next
MOV 36H, #30H
INC 35H;---------------------百位数+1
CJNE A, 35H, add_next
mov 35h, #30h
inc 34h;---------------------千位数+1
;-------------------------------------------
add_next:
inc temp_on1
mov a, #0ffh
cjne a, temp_on1, JJ
INC temp_on2
JJ:
acall lcm_dis_1
ret
;-------------------------------------------
sub_1:
MOV A, #31H
CJNE A, 37H, de_1
MOV A, #30H
CJNE A, 36H, de_1
CJNE A, 35H, de_1
cjne a, 34h, de_1
mov 37h, #30h
mov 36h, #30h
mov 35h, #30h
mov 34h, #35h
;----------------------------------------
mov a, #088h
mov temp_on1, a
mov a, #013h
mov temp_on2, a
AJMP MM
;---------------------------------------
de_1:
MOV A, #2fH
DEC 37H;---------------------个位数-1
CJNE A, 37H, sub_next
CJNE A, 36H, de_10
CJNE A, 35H, de_100
cjne a, 34h, de_1000
AJMP sub_next
de_10:
MOV A, #2fH
MOV 37H, #39H
DEC 36H;---------------------十位数-1
CJNE A, 36H, sub_next
de_100:
MOV 37H, #39H
MOV 36H, #39H
DEC 35H;---------------------百位数-1
mov a, #2fh
CJNE A, 35H, sub_next
mov 35h, #39h
mov a, #30h
CJNE A, 34H, de_1000
ajmp sub_next
de_1000:
MOV 37H, #39H
MOV 36H, #39H
mov 35H, #39h
dec 34h;--------------------千位数-1
sub_next:
dec temp_on1
mov a, #00h
cjne a, temp_on1,MM
mov a, #0ffh
mov temp_on1, a
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -