📄 main.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 + -