⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 waterm2.asm

📁 一卡通源码程序是我公司的一卡通源码程序,绝对难得
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;***************************
openvalue:
            clr  cm_a
            nop
            nop
            setb  cm_b
            nop
            nop
            ret

;****************************
;write a byte to 74HC595
;****************************
write_595:   mov rrx0,#8
 write_595_1: clr c
             rlc a
             jc  write_595_0
             clr ser
             ljmp write_595_2
write_595_0: setb ser
write_595_2: clr srclk
             nop
             nop
             nop
             setb srclk
             djnz rrx0,write_595_1
             ret


;*******************************
;read the formation of the water
;---|_|-----
;*******************************
read_plus:  jb plusa,read_plusa0
            lcall delay_10ms
            jb plusa,read_plusa0
            jnb lastplusa,read_plusa0
            setb f_plusa
            clr lastplusa
            ljmp  read_plusb
read_plusa0:setb lastplusa

read_plusb: jb plusb,read_plusb0
            lcall delay_10ms
            jb plusb,read_plusb0
            jnb lastplusb,read_plusb0
            setb f_plusb
            clr lastplusb
            ret
read_plusb0:setb lastplusb
            jnb  f_plusa,d_ret
            clr  f_plusa
            jnb  f_plusb,d_ret
            clr  f_plusa
            clr  f_plusb
            setb f_updata
d_ret: 
            ret



;***************************
;delay_1ms program
;***************************
delay_1ms:  mov r6,#0ah
      dl2:  mov r7,#18h
      dl1:  nop
            nop
            djnz r7,dl1
            djnz r6,dl2
            ret
;***************************
;delay_10ms program
;***************************
delay_10ms: mov r5,#10
       dl3: lcall delay_1ms
            nop
            nop
            djnz r5,dl3
            ret
delay_254ms:mov r5,#254
        dl4:lcall delay_1ms
            nop
            nop
            nop
            djnz r5,dl4
            ret
delay_1500ms: mov r4,#50
    r_delay:lcall delay_10ms
            djnz r4,r_delay
            ret
;***************************
;iic_start
;describe:
;当SCL为高电平时SDA从高电平到低
;电平产生一个跳变即开始
;***************************
iic_start: setb sda1
           nop
           nop
           setb scl1
           nop
           nop
           nop
           nop
           nop
           nop
           clr sda1
           nop
           nop
           nop
           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
           subb a,#01h
           mov @r0,a
           jnc  money_dec4
           mov money_h,#00h
           mov money_x,#00h
           mov money_l,#00h
           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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -