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

📄 waterm4.1.asm

📁 一卡通源码程序是我公司的一卡通源码程序,绝对难得
💻 ASM
📖 第 1 页 / 共 5 页
字号:
            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
          ;lcall money_hextobcd
          ;lcall get_int
          ;lcall get_dot
          ;lcall send_money
          ret
;********************************
;帐户金额更新
;********************************
money_dec:

           mov r0,#money_l
           mov a,@r0

           mov b,rate
           clr c
           subb a,b
           mov @r0,a
           mov r0,#money_x
           mov a,@r0
           subb a,#0
           mov @r0,a
           mov r0,#money_h
           mov a,@r0
           subb a,#0
           mov @r0,a
           jnc  money_dec4

           clr f_card
           mov  money_h,#0
           mov  money_x,#0
           mov  money_l,#0

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
            mov r0,#liuliang_x
            mov a,@r0
            addc a,#0
            mov @r0,a
            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_hh,#0
            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
            mov  a,dmoney_hh
            addc a,dmoney_hh
            mov  dmoney_hh,a
            djnz rrx1,money_hextobcd0
            mov  dispbuf5,dmoney_hh
            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

⌨️ 快捷键说明

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