📄 waterm1.01.asm
字号:
nop
nop
nop
clr scl1
nop
nop
nop
ret
;**************************
;iic_stop
;describe
;当SCL处于高电平时,SDA从低电平到
; 高电平的跳变即停止
;*********************************
iic_stop: clr sda1
nop
nop
setb scl1
nop
nop
nop
nop
nop
nop
nop
setb sda1
nop
nop
nop
nop
nop
nop
ret
;*********************************
;mack
;发送应答信号
;*********************************
mack: clr sda1
nop
nop
nop
setb scl1
nop
nop
nop
nop
nop
clr scl1
nop
nop
nop
ret
;*********************************
;mnack
;发送非应答信号
;*********************************
mnack: setb sda1
nop
nop
nop
setb scl1
nop
nop
nop
nop
nop
clr scl1
nop
nop
ret
;*********************************
;cack
;check che ack program
;*********************************
cack: setb sda1
nop
nop
nop
setb scl1
nop
nop
nop
nop
jb sda1,cack0
nop
clr scl1
nop
setb f_iic
ret
cack0: nop
clr scl1
nop
clr f_iic
ret
;*****************************
;write a byte to iic
;*****************************
wrbyte: mov r7,#8
wrbyte0: clr c
rlc a
jc wrbyte_0
clr sda1
ljmp wrbyte_1
wrbyte_0:setb sda1
nop
nop
wrbyte_1:setb scl1
nop
nop
nop
nop
nop
clr scl1
nop
nop
nop
nop
nop
djnz r7,wrbyte0
ret
;*******************************
;rdbyte
;*******************************
rdbyte: mov r7,#8
rdbyte0: setb sda1
nop
nop
setb scl1
nop
nop
jb sda1,rdbyte_0
clr c
rlc a
ljmp rdbyte_1
rdbyte_0:setb c
rlc a
rdbyte_1:clr scl1
nop
nop
nop
nop
nop
djnz r7,rdbyte0
ret
;*******************************
;从指定地址读取一个字节
;addressh:icadd_h
;addressl:icadd_l
;data: icdata
;*******************************
irdbyte: mov a,icadd_h
rl a
mov b,a
mov a,#0a0h
orl a,b
lcall iic_start
lcall wrbyte
lcall cack
jb f_iic,irdbyte0
lcall iic_stop
ret
irdbyte0:clr f_iic
mov a,icadd_l
lcall wrbyte
lcall cack
jb f_iic,irdbyte1
lcall iic_stop
ret
irdbyte1:clr scl1
clr f_iic
lcall iic_start
mov a,icadd_h
rl a
mov b,#0a1h
nop
orl a,b
lcall wrbyte
lcall cack
jb f_iic,irdbyte2
lcall iic_stop
ret
irdbyte2:clr f_iic
lcall rdbyte
mov icdata,a
lcall mnack
lcall iic_stop
ret
;******************************
;向指定地址写一个字节
;address: icadd_h
; icadd_l
;data: icdata
;******************************
irwrbyte: clr wp
mov a,icadd_h
rl a
mov b,#0a0h
orl a,b
lcall iic_start
lcall wrbyte
lcall cack
jb f_iic,irwrbyte0
lcall iic_stop
setb wp
ret
irwrbyte0:clr f_iic
mov a,icadd_l
lcall wrbyte
lcall cack
jb f_iic,irwrbyte1
lcall iic_stop
setb wp
ret
irwrbyte1:clr f_iic
mov a,icdata
lcall wrbyte
lcall cack
jb f_iic,irwrbyte2
lcall iic_stop
setb wp
ret
irwrbyte2:clr f_iic
lcall iic_stop
setb wp
ret
;****************************
;蜂鸣器短叫一声
;beep
;****************************
beep_1: clr beep
lcall delay_254ms
setb beep
ret
;*******************************
;updata
;*******************************
updata: lcall money_dec
lcall expence_add
lcall liuliang_add
lcall disp_money
ret
;********************************
;帐户金额更新
;********************************
money_dec:
mov r0,#money_l
mov a,@r0
mov r1,#rate
mov b,@r1
clr c
subb a,b
mov @r0,a
jc money_dec0
ret
money_dec0:mov r0,#money_x
mov a,@r0
clr c
subb a,#01h
mov @r0,a
jc money_dec1
ret
money_dec1:mov r0,#money_h
clr c
mov a,@r0
subb a,#01h
mov @r0,a
jnc money_dec4
clr f_card
money_dec4:
ret
;********************************
;消费金额更新
;********************************
expence_add:clr c
mov r0,#expence_l
mov a,@r0
mov r1,#rate
mov b,@r1
add a,b
mov @r0,a
jc expence_add0
ret
expence_add0:
mov r0,#expence_x
mov a,@r0
addc a,#0
mov @r0,a
jc expence_add1
ret
expence_add1:
mov r0,#expence_h
mov a,@r0
addc a,#0
mov @r0,a
ret
;*******************************
;liuliang自加一
;*******************************
liuliang_add:
mov r0,#liuliang_l
mov a,@r0
add a,#1
mov @r0,a
jc liuliang_add0
ret
liuliang_add0:
mov r0,#liuliang_x
mov a,@r0
addc a,#0
mov @r0,a
jc liuliang_add1
ret
liuliang_add1:
mov r0,#liuliang_h
mov a,@r0
addc a,#0
mov @r0,a
ret
;*********************************
;money to bcd in order to display
;*********************************
money_hextobcd:
mov sdispbuf0,money_h
mov sdispbuf1,money_x
mov sdispbuf2,money_l
mov dmoney_h,#0
mov dmoney_x,#0
mov dmoney_l,#0
mov rrx1,#24
money_hextobcd0:mov a,sdispbuf2
clr c
rlc a
mov sdispbuf2,a
mov a,sdispbuf1
rlc a
mov sdispbuf1,a
mov a,sdispbuf0
rlc a
mov sdispbuf0,a
mov a,dmoney_l
addc a,dmoney_l
da a
mov dmoney_l,a
mov a,dmoney_x
addc a,dmoney_x
da a
mov dmoney_x,a
mov a,dmoney_h
addc a,dmoney_h
da a
mov dmoney_h,a
djnz rrx1,money_hextobcd0
mov a,dmoney_h
swap a
anl a,#0fh
mov dispbuf4,a
mov a,dmoney_h
anl a,#0fh
mov dispbuf3,a
mov a,dmoney_x
anl a,#0f0h
swap a
mov dispbuf2,a
mov a,dmoney_x
anl a,#0fh
mov dispbuf1,a
mov a,dmoney_l
anl a,#0f0h
swap a
mov dispbuf0,a
ret
;***********************************
;display the money
;***********************************
disp_money: lcall money_hextobcd
mov a,dispbuf4
jz disp_money1
ljmp disp_money0
disp_money1:
mov dispbuf4,#0ah
mov a,dispbuf3
jz disp_money2
ljmp disp_money0
disp_money2:
mov dispbuf3,#0ah
disp_money0:
mov a,dispbuf4
lcall decode
lcall write_595
mov a,dispbuf3
lcall decode
lcall write_595
mov a,dispbuf2
lcall decode
orl a,#80h
lcall write_595
mov a,dispbuf1
lcall decode
lcall write_595
mov a,dispbuf0
lcall decode
lcall write_595
setb rrclk
nop
nop
nop
nop
nop
nop
nop
clr rrclk
nop
nop
nop
nop
nop
nop
setb rrclk
nop
nop
nop
nop
nop
nop
nop
ret
;*************************************************************
;段码表格
;*************************************************************
decode: anl a,#0fh
mov dptr,#decode0
movc a,@a+dptr
ret
decode0: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h, 40h, 79h, 50h
; 0 1 2 3 4 5 6 7 8 9 "暗"a -b "E"c "r"d
;*************************************
;disp the Name of pos
;*************************************
disp_name:
lcall addr_bcd
mov r6,#5
mov r0,#dispbuf4
disp_name0: mov a,@r0
lcall decode
lcall write_595
dec r0
djnz r6,disp_name0
setb rrclk
nop
nop
nop
nop
nop
nop
clr rrclk
nop
nop
nop
nop
nop
nop
setb rrclk
nop
nop
nop
nop
nop
nop
ret
;***********************************
;address to bcd
;***********************************
addr_bcd: mov sdispbuf0,address
mov daddr_h,#0
mov daddr_l,#0
mov rrx1,#8
addr_bcd0: mov a,sdispbuf0
rlc a
mov sdispbuf0,a
mov a,daddr_l
addc a,daddr_l
da a
mov daddr_l,a
mov a,daddr_h
addc a,daddr_h
mov daddr_h,a
djnz rrx1, addr_bcd0
jnb f_com, addr_bcd1
mov dispbuf4,#10
mov dispbuf3,#10
mov a,daddr_h
anl a,#0fh
mov dispbuf2,#10
mov a,daddr_l
anl a,#0f0h
swap a
mov dispbuf1,a
mov a,daddr_l
anl a,#0fh
mov dispbuf0,a
ret
addr_bcd1: jb f_time,addr_bcd2
mov dispbuf4,#11
mov dispbuf3,#11
mov a,daddr_h
anl a,#0fh
mov dispbuf2,#11
mov a,daddr_l
anl a,#0f0h
swap a
mov dispbuf1,a
mov a,daddr_l
anl a,#0fh
mov dispbuf0,a
ret
addr_bcd2: mov dispbuf4,#0ah
mov dispbuf3,#0ah
mov dispbuf2,#0ah
mov dispbuf1,#0ah
mov dispbuf0,#0ah
ret
;******************************
;显示子程序
;******************************
disp: mov r6,#5
mov r0,#dispbuf4
disp0: mov a,@r0
lcall decode
lcall write_595
dec r0
djnz r6,disp0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -