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

📄 main.asm

📁 介绍用单片机实现时钟的程序,可共大家学习,交流.
💻 ASM
📖 第 1 页 / 共 3 页
字号:
                        djnz    r0,iicread0
                        call    iicrbyte
                        call    iicnack
                        call	iicstop
                        mov     r0,#digital_byte            ;时间数据存入显存
                        mov     a,#date_data
                        add     a,#2
                        mov     r1,a
                        mov     a,@r1                       ;秒
                        anl     a,#0fh
                        mov     @r0,a
                        inc     r0
                        mov     a,@r1                       ;十秒
                        swap    a
                        anl     a,#0fh
                        mov     @r0,a
                        inc     r0
                        inc     r1
                        mov     a,@r1
                        anl     a,#0fh                      ;分
                        mov     @r0,a
                        inc     r0
                        mov     a,@r1
                        swap    a
                        anl     a,#0fh                      ;十分
                        mov     @r0,a
                        inc     r0
                        inc     r1
                        mov     a,@r1
                        anl     a,#0fh                      ;时
                        mov     @r0,a
                        inc     r0
                        mov     a,@r1
                        swap    a
                        anl     a,#0fh                      ;十时
                        mov     @r0,a
                        inc     r0
                        mov     @r0,#20h
                        inc     r0
                        mov     @r0,#20h
                        ret
retrdn:                 call    beep3
                        call	iicstop
                        ret

;*****************************************************
;iic写字节
;入口条件:被写数据acc
;*****************************************************

iicwbyte:               mov	r2,#08H
wlp:                    rlc	a
                        jc	wr1
                        clr	sda		;发送0
                        setb	scl
                        nop
                        nop
                        clr	scl
                        djnz	r2,wlp
                        ret

wr1:                    setb	sda		;发送1
                        setb	scl
                        nop
                        nop
                        clr	scl
                        clr	sda
                        djnz	r2,wlp
                        ret

;*****************************************************
;iic读字节
;出口参数:所读数据acc
;*****************************************************

iicrbyte:               mov	r2,#08h
iicr2:                  setb    sda
                        setb	scl
                        nop
                        mov	c,sda
                        clr	scl
                        rlc	a
                        djnz	r2,iicr2
                        clr     sda
                        mov	@r1,a
                        ret

;*****************************************************
;iic起始位
;*****************************************************

iicstart:               setb	sda
                        nop
                        setb    scl
                        nop
                        nop
                        clr	sda
                        nop
                        nop
                        clr	scl
                        ret

;*****************************************************
;停止位
;*****************************************************

iicstop:                clr	sda
                        nop
                        setb	scl
                        nop
                        nop
                        setb	sda
                        nop
                        nop
                        ret

;*****************************************************
;iic应答
;*****************************************************

iicack:                 clr	sda
                        nop
                        setb	scl
                        nop
                        nop
                        clr 	scl
                        ret

;*****************************************************
;iic非应答
;*****************************************************

iicnack:                setb	sda
                        nop
                        setb	scl
                        nop
                        nop
                        clr	scl
                        ret

;*****************************************************
;iic检查应答
;*****************************************************

iiccack:                setb	sda
                        nop
                        setb	scl
                        nop
                        mov	c,sda
                        clr	scl
                        clr     sda
                        ret

;*****************************************************
;键盘中断处理程序
;*****************************************************

keys_int:               clr     ea
                        clr     ie1
                        clr     digital_bit
                        mov     p2,#0
                        mov     a,p1
                        cpl     a
                        anl     a,#0fh
                        cjne    a,#0,keys_reader
                        clr     ie1
                        setb    ea
                        setb    digital_bit
                        reti
keys_reader:            call    time10ms
                        mov     a,p1
                        cpl     a
                        anl     a,#0fh
                        mov     keys_byte,a
keys_reader_0:          call    digital
                        mov     a,p1
                        cpl     a
                        anl     a,#0fh
                        cjne    a,#0,keys_reader_0
                        clr     ie1
                        setb    ea
                        setb    digital_bit
                        reti

;*****************************************************
;按键处理程序
;*****************************************************

keys_management:        cjne    a,#01h,keys_check_2
                        sjmp    keys_1
keys_check_2:           cjne    a,#02h,keys_check_3
                        sjmp    keys_2
keys_check_3:           cjne    a,#04h,keys_check_4
                        sjmp    keys_3
keys_check_4:           cjne    a,#08h,keys_check_err
                        sjmp    keys_4
keys_check_err:         setb    digital_bit
                        ret

keys_1:                 jmp     keys_manage_1
keys_2:                 jmp     keys_manage_2
keys_3:                 jmp     keys_manage_3
keys_4:                 jmp     keys_manage_4

;*****************************************************
;1键处理,选择时钟设置的位置
;*****************************************************

keys_manage_1:          clr     ex0
                        call    beep1
                        mov     a,aleart_data               ;若目前处于闹钟设置状态则提示并退出
                        jnb     acc.7,keys_manage_200
                        call    beep2
                        setb    digital_bit
                        setb    ex0
                        ret
keys_manage_200:        mov     a,digital_flash_bit         ;设置目前处于时钟设置状态
                        setb    acc.7
                        mov     digital_flash_bit,a
                        anl     a,#07h
                        cjne    a,#0,keys_manage_20         ;此字节为负逻辑,0为第五位数码管,5为第零位数码管
                        mov     a,#digital_byte             ;将闪烁位的最高位置1
                        add     a,#5
                        mov     r0,a
                        mov     a,@r0
                        setb    acc.7
                        mov     @r0,a
                        mov     r0,#digital_byte            ;将闪烁位的高一位的最高位清0
                        mov     a,@r0
                        clr     acc.7
                        mov     @r0,a
                        inc     digital_flash_bit
                        setb    digital_bit
                        ret
keys_manage_20:         cjne    a,#1,keys_manage_21
                        mov     a,#digital_byte
                        add     a,#4
                        mov     r0,a
                        mov     a,@r0
                        setb    acc.7
                        mov     @r0,a
                        inc     r0
                        mov     a,@r0
                        clr     acc.7
                        mov     @r0,a
                        inc     digital_flash_bit
                        setb    digital_bit
                        ret
keys_manage_21:         cjne    a,#2,keys_manage_22
                        mov     a,#digital_byte
                        add     a,#3
                        mov     r0,a
                        mov     a,@r0
                        setb    acc.7
                        mov     @r0,a
                        inc     r0
                        mov     a,@r0
                        clr     acc.7
                        mov     @r0,a
                        inc     digital_flash_bit
                        setb    digital_bit
                        ret
keys_manage_22:         cjne    a,#3,keys_manage_23
                        mov     a,#digital_byte
                        add     a,#2
                        mov     r0,a
                        mov     a,@r0
                        setb    acc.7
                        mov     @r0,a
                        inc     r0
                        mov     a,@r0
                        clr     acc.7
                        mov     @r0,a
                        inc     digital_flash_bit
                        setb    digital_bit
                        ret
keys_manage_23:         cjne    a,#4,keys_manage_24
                        mov     a,#digital_byte
                        add     a,#1
                        mov     r0,a
                        mov     a,@r0
                        setb    acc.7
                        mov     @r0,a
                        inc     r0
                        mov     a,@r0
                        clr     acc.7
                        mov     @r0,a
                        inc     digital_flash_bit
                        setb    digital_bit
                        ret
keys_manage_24:         cjne    a,#5,keys_manage_25
                        mov     r0,#digital_byte
                        mov     a,@r0
                        setb    acc.7
                        mov     @r0,a
                        inc     r0
                        mov     a,@r0
                        clr     acc.7
                        mov     @r0,a
                        mov     digital_flash_bit,#0
                        setb    digital_bit
                        ret
keys_manage_25:         setb    digital_bit
                        setb    ex0
                        ret

;*****************************************************
;2键处理,将调节后的数据写至时钟芯片中
;*****************************************************

keys_manage_2:          call    beep1                       ;清除所有的闪烁并重置时钟
                        mov     a,digital_flash_bit
                        jb      acc.7,keys_manage_100
                        mov     a,aleart_byte
                        jb      acc.7,keys_manage_101
                        setb    digital_bit
                        setb    ex0
                        ret
keys_manage_100:        mov     digital_flash_bit,#0        ;清除状态
                        mov     r0,#8                       ;需要清除闪烁标志的数量
                        mov     r1,#digital_byte
keys_manage_10:         mov     a,@r1
                        clr     acc.7
                        mov     @r1,a
                        inc     r1
                        djnz    r0,keys_manage_10           ;没清除完则继续清除
                        mov     r1,#digital_byte
                        mov     a,#date_data
                        add     a,#2
                        mov     r0,a
                        mov     b,@r1                       ;秒
                        inc     r1
                        mov     a,@r1                       ;十秒
                        swap    a
                        orl     a,b
                        mov     @r0,a
                        inc     r0
                        inc     r1
                        mov     b,@r1                       ;分
                        inc     r1
                        mov     a,@r1                       ;十分
                        swap    a
                        orl     a,b
                        mov     @r0,a
                        inc     r0
                        inc     r1
                        mov     b,@r1                       ;时
                        inc     r1
                        mov     a,@r1                       ;十时
                        swap    a
                        orl     a,b
                        mov     @r0,a
                        call    timer_write
                        call    beep1
                        setb    digital_bit
                        setb    ex0

⌨️ 快捷键说明

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