📄 keyboard3.s43
字号:
jmp fun_ret ;
;****************************************************************
fun_stop ;
clr.b &fun_flag ; 清除标识
clr.b fun_buffer ;
jmp fun_ret ;
;****************************************************************
; led显示子程序
;****************************************************************
led_chang
br led_take(R8) ;
EVEN ;
led_take
dw second_table_h ;
dw second_table_l ;
dw min_table_h ;
dw min_table_l ;
dw hour_table_h ;
dw hour_table_l ;
;
;
second_table_h ;
mov.b &second,R14 ; R14=秒数
mov.b #2fh,&led_disp_bit ; 控制LED的右边第二个显示
jmp take_h ; 取高位
second_table_l ;
mov.b &second,R14 ;
mov.b #1fh,&led_disp_bit ;
mov.b #00h,&dip ; 控制LED右边第一个显示
jmp take_l ; 取低位
;
;
min_table_h mov.b &min,R14 ;
mov.b #3bh,&led_disp_bit ; 控制LED的右边第四个显示
jmp take_h ; 取高位
min_table_l mov.b &min,R14 ;
mov.b #37h,&led_disp_bit ; 控制LED右边第三个显示
mov.b #20h,&dip ; 取低位
jmp take_l ;
hour_table_h mov.b &hour,R14 ;
mov.b #3eh,&led_disp_bit ; 控制LED右边第六个显示
jmp take_h ; 取高位
;
hour_table_l mov.b &hour,R14 ;
mov.b #3dh,&led_disp_bit ; 显示小时的低位
mov.b #20h,&dip ;
jmp take_l ;
;
take_h mov.b R14,R13 ; 取高位
rra.b R13 ;
rra.b R13 ;
rra.b R13 ;
rra.b R13 ;
and.b #0fh,R13 ;
mov.b led_table(R13),&led_disp_data ;
ret ;
take_l ; 取低位
mov.b R14,R13 ;
and.b #0fh,R13 ;
mov.b led_table(R13),&led_disp_data ;
add.b &dip,&led_disp_data ;
ret
;****************************************************************
; led显示子程序
;****************************************************************
led_display
mov.b &led_disp_data,&P3OUT ; 设置显示数据
bis.b #02h,&P4OUT ; 打开数据锁存
bic.b #02h,&P4OUT ; 关闭数据锁存
mov.b &led_disp_bit,P3OUT
bis.b #01h,&P4OUT ; 打开控制锁存
bic.b #01h,&P4OUT ; 关闭控制锁存
ret
;****************************************************************
; TimerA_int
;****************************************************************
Timera_int
inc.b R8 ;
inc.b R8 ;
cmp.b #0ch,R8 ;
jnz Timer_int_end ;
clr.b R8 ;
Timer_int_end push.b &second ;
push.b &min ;
push.b &hour ;
call #led_blink ; 如果有键按下,LED闪烁
call #led_chang ; 改变LED缓冲
call #led_display ; 显示数据到LED
pop.b &hour ;
pop.b &min ;
pop.b &second ;
reti ;
;****************************************************************
; led_blink
;****************************************************************
led_blink cmp.b #3,&fun_buffer ;按下功能键三次,秒钟对应的LED闪烁
jeq second_blink
cmp.b #2,&fun_buffer ;按下功能键两次,分钟对应的LED闪烁
jeq min_blink
cmp.b #1,&fun_buffer ;按下功能键一次,小时对应的LED闪烁
jeq hour_blink ;
jmp blink_ret ;
second_blink ; 秒对应的LED闪烁
bit.b #1,&second_flag ;
jnz s_ret ;
mov.b #0aah,&second ;
s_ret jmp blink_ret ;
min_blink ; 分对应的两个LED闪烁
bit.b #1,&second_flag ;
jnz m_ret ;
mov.b #0aah,&min ;
m_ret jmp blink_ret ;
hour_blink ; 小时对应的LED闪烁
bit.b #1,&second_flag ;
jnz blink_ret ;
mov.b #0aah,&hour ;
blink_ret ret ;
;****************************************************************
; BASIC TIMER int
;****************************************************************
BASIC_INT
xor.b #01h,&second_flag ; 标识取反
bit.b #1,&second_flag ; 是1吗?
jz clock_ret ;
xor.b #01h,&flag ;
setc ;
BASIC_END
dadc.b &second ;
cmp.b #60h,&second ; 与60H比较
jlo clock_end ;
clr.b &second ; 清零second
dadc.b &min ; 如果大于60H,分加1
cmp.b #60h,&min ;
jlo clock_end ; 如果分大于60H
dadc.b &hour ; 小时加1
clr.b &min ; 如果小时大于24H
cmp.b #24h,&hour ;
jlo clock_end ; 小时边为0
clr.b &hour ;
clock_end
clock_ret reti ;
delay mov.b #0ffh,R9 ; 延迟
ttt nop ;
nop ;
dec.b R9 ; R9--
jnz ttt ;
ret ;
;****************************************************************
; led显示代码
;****************************************************************
led_table
db 0d7h ;0
db 14h ;1
db 0cdh ;2
db 5dh ;3
db 1Eh ;4
db 5bh ;5
db 0dbh ;6
db 15h ;7
db 0dfh ;8
db 05fh ;9
db 00h ;no,用于在熄灭LED
db 00h ;no
;****************************************************************
; 中断向量
;****************************************************************
RSEG INTVEC ; MSP430 RESET 向量
;****************************************************************
DW BASIC_INT ;0FFE0h
DW Reset ;0FFE2h
DW Reset ;0FFE4h
DW Reset ;0FFE6h
DW PORT1_INT ;0FFE8h
DW Reset ;0FFEAh
DW Timera_int ;0FFECh
DW Reset ;0FFEEh
DW Reset ;0FFF0h
DW Reset ;0FFF2h
DW Reset ;0FFF4h
DW Reset ;0FFF6h
DW Reset ;0FFF8h
DW Reset ;0FFFAh
DW Reset ;0FFFCh
DW Reset ;0FFFEh
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -