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

📄 main.asm

📁 是介绍使用单片机控制led显示的程序,可以显示多种样式.
💻 ASM
字号:
;*****************************************************
;
;     This programme is for study Ver1.0.0 beta
;            The main control programe
;This programme must be run in 12MHz standard settings
;               Designer: cqmcu.com
;
;*****************************************************

;*****************************************************
;参数定义
;*****************************************************

beep                    equ     p1.5                        ;Beep pin
keys_byte               equ     08h

;*****************************************************
;主程序
;*****************************************************

                        org	0000h
                        jmp	start

                        org     00013h
                        jmp     keys_int                    ;键盘中断

                        org	0030h
start:                  mov     p0,#0feh
                        mov     p1,#0fh
                        mov     p2,#0
                        mov     p3,#0ffh

                        mov	sp,#70h                     ;堆栈地址
                        mov     r0,#07eh                    ;Clear the ram
                        mov     r1,#2
                        clr     a
main_clear0:            mov     @r1,a
                        inc     r1
                        djnz    r0,main_clear0

                        setb    ex1
                        setb    ea

                        mov     r0,#0                       ;方向标志
                        mov     r1,#0feh                    ;亮点流动
                        mov     r2,#25                      ;延时
                        mov     r3,#0                       ;花样
                        mov     r4,#25                      ;延时

move:                   call    time2_5ms
                        djnz    r2,move
                        mov     r2,04h
                        mov     a,r3
                        cjne    a,#0,move_0
                        mov     a,r1                        ;单亮点往左移
                        rl      a
                        mov     r1,a
                        mov     p0,a
                        jmp     move
move_0:                 cjne    a,#1,move_1
                        mov     a,r1                        ;单亮点往右移
                        rr      a
                        mov     r1,a
                        mov     p0,a
                        jmp     move
move_1:                 cjne    a,#2,move_2
                        mov     a,r1                        ;双亮点往中移
                        rl      a
                        mov     r1,a
                        jnb     acc.0,move_10
                        jnb     acc.1,move_11
                        jnb     acc.2,move_12
                        jnb     acc.3,move_13
                        jmp     move
move_10:                clr     acc.7
                        mov     p0,a
                        jmp     move
move_11:                clr     acc.6
                        mov     p0,a
                        jmp     move
move_12:                clr     acc.5
                        mov     p0,a
                        jmp     move
move_13:                clr     acc.4
                        mov     p0,a
                        jmp     move
move_2:                 cjne    a,#3,move_3
                        mov     a,r0                        ;左右往返移动
                        cjne    a,#0,move_20
                        mov     a,r1
                        rl      a
                        mov     r1,a
                        mov     p0,a
                        jnb     acc.7,move_21
                        jmp     move
move_20:                mov     a,r1
                        rr      a
                        mov     r1,a
                        mov     p0,a
                        jnb     acc.0,move_22
move_3:                 jmp     move
move_21:                mov     r0,#0ffh
                        jmp     move
move_22:                mov     r0,#0
                        jmp     move

;*****************************************************
;相关文件载入
;*****************************************************

;*****************************************************
;短鸣一声
;*****************************************************

beep1:                  setb    beep
                        call    time50ms
                        clr     beep
                        call    time50ms
                        ret

;*****************************************************
;长鸣一声
;*****************************************************

beep2:                  setb    beep
                        call    time50ms
                        clr     beep
                        call    time50ms
                        setb    beep
                        call    time50ms
                        clr     beep
                        call    time50ms
                        ret

;*****************************************************
;短鸣两声
;*****************************************************

beep3:                  setb    beep
                        call    time500ms
                        clr     beep
                        call    time500ms
                        ret
;*****************************************************
;键盘中断处理程序
;*****************************************************

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

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

keys_management:        call    beep1
                        mov     a,keys_byte
                        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:         clr     ie1
                        setb    ea
                        reti

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:          mov     a,r4                        ;增加延时时间,即减慢流动速度
                        cjne    a,#50,keys_manage_1_0
                        call    beep2
                        clr     ie1
                        setb    ea
                        reti
keys_manage_1_0:        add     a,#5
                        mov     r4,a
                        clr     ie1
                        setb    ea
                        reti

;*****************************************************
;2键处理
;*****************************************************

keys_manage_2:          mov     a,r4                        ;增加延时时间,即减慢流动速度
                        cjne    a,#5,keys_manage_2_0
                        call    beep2
                        clr     ie1
                        setb    ea
                        reti
keys_manage_2_0:        clr     c
                        subb    a,#5
                        mov     r4,a
                        clr     ie1
                        setb    ea
                        reti

;*****************************************************
;3键处理
;*****************************************************

keys_manage_3:          mov     a,r3                        ;改变流动花样
                        cjne    a,#3,keys_manage_3_0
                        mov     r3,#0
                        clr     ie1
                        setb    ea
                        reti
keys_manage_3_0:        inc     r3
                        clr     ie1
                        setb    ea
                        reti

;*****************************************************
;4键处理
;*****************************************************

keys_manage_4:          mov     a,r3                        ;改变流动花样
                        cjne    a,#0,keys_manage_4_0
                        mov     r3,#3
                        clr     ie1
                        setb    ea
                        reti
keys_manage_4_0:        dec     r3
                        clr     ie1
                        setb    ea
                        reti
;*****************************************************
;延时10uS
;*****************************************************

time10us:               mov     r5,#05h                 ;11us
                        djnz    r5,$
                        ret

;*****************************************************
;延时50uS
;*****************************************************

time50us:               mov     r5,#19h                 ;51us
                        djnz    r5,$
                        ret

;*****************************************************
;延时100uS
;*****************************************************

time100us:              mov     r5,#31h                	;99.6us
                        djnz    r5,$
                        ret

;*****************************************************
;延时200uS
;*****************************************************

time200us:              mov     r5,#64h                 ;201us
                        djnz    r5,$
                        ret

;*****************************************************
;延时250uS
;*****************************************************

time250us:              mov     r5,#7ch                 ;249.6us
                        djnz    r5,$
                        ret

;*****************************************************
;延时350uS
;*****************************************************

time350us:              mov     r5,#0afh                 ;351us
time350us_1:            djnz    r5,time350us_1
                        ret

;*****************************************************
;延时500uS
;*****************************************************

time500us:              mov     r5,#0fah	       	;501us
time500us_1:            djnz    r5,time500us_1
                        ret

;*****************************************************
;延时1mS
;*****************************************************

time1ms:                mov     r5,#0fah		;1001us
time1ms_1:              nop
                        nop
                        djnz    r5,time1ms_1
                        ret

;*****************************************************
;延时2.5mS
;*****************************************************

time2_5ms:              mov     r5,#05h			;2.496ms
time2_5ms_1:            mov     r6,#0f8h		;497us
                        djnz    r6,$
                        djnz    r5,time2_5ms_1
                        ret

;*****************************************************
;延时10mS
;*****************************************************

time10ms:               mov    r5,#14h			;10.262ms
time10ms_1:             mov    r6,#0ffh		;511us
                        djnz   r6,$
                        djnz   r5,time10ms_1
                        ret

;*****************************************************
;延时50mS
;*****************************************************

time50ms:               mov    r5,#63h		        ;49.996ms
time50ms_1:             mov    r6,#0fbh		;503us
                        djnz   r6,$
                        djnz   r5,time50ms_1
                        ret

;*****************************************************
;延时100mS
;*****************************************************

time100ms:              mov     r5,#0c3h               ;100.036ms
time100ms_1:            mov     r6,#0ffh               ;511us
                        djnz    r6,$
                        djnz    r5,time100ms_1
                        ret

;*****************************************************
;延时200mS
;*****************************************************

time200ms:     	        mov     r5,#02h			;250.351ms
time200ms_1:            mov     r6,#0f4h	        ;125.173ms
time200ms_2:            mov     r7,#0ffh		;511us
                        djnz    r7,$
                        djnz    r6,time200ms_2
                        djnz    r5,time200ms_1
                        ret

;*****************************************************
;延时500mS
;*****************************************************

time500ms:     	        mov    r5,#04h			;500.701ms
time500ms_1:            mov    r6,#0f4h	        ;125.173ms
time500ms_2:            mov    r7,#0ffh		;511us
                        djnz   r7,$
                        djnz   r6,time500ms_2
                        djnz   r5,time500ms_1
                        ret

;*****************************************************
;延时1S
;*****************************************************

time1s:                 mov    r5,#08h			;1001.401ms
time1s_1:               mov    r6,#0f4h		;125.173ms
time1s_2:               mov    r7,#0ffh		;511us
                        djnz   r7,$
                        djnz   r6,time1s_2
                        djnz   r5,time1s_1
                        ret

end

⌨️ 快捷键说明

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