📄 232_a.s43
字号:
jmp T4 ;
EXIT_I ret
;------------------------------------------------------------------------------
; LED显示数据
;------------------------------------------------------------------------------
led_Display:
mov.w #0x1,R15 ;
mov.b &LED_CTRL,R14 ; 设定LED控制位
and.w #0xFF,R14 ;
mov.b LED_Buf(R14),R14 ; 获取LED_Buf的内容
and.w #0xFF,R14 ;
mov.b NUM_LED(R14),&P3OUT ; 设定LED显示段码
bis.b #0x2,&P4OUT ;
bic.b #0x2,&P4OUT ;
mov.b R15,R12 ;
mov.b &LED_CTRL,R14 ;
call #Shift_L ; 改变控制位
inv.b R12 ;
mov.b R12,&P3OUT ;
bis.b #0x1,&P4OUT ;
bic.b #0x1,&P4OUT ;
inc.b &LED_CTRL ;
cmp.b #0x6,&LED_CTRL ; 如果LED_Ctrl >5 ,LED_Ctrl=0
jnc EXIT_D ;
clr.b &LED_CTRL ;
EXIT_D ret
;------------------------------------------------------------------------------
; 初始化keyboard
;------------------------------------------------------------------------------
init_Keyboard:
and.b #0x1,&P1DIR ; 设置P1输入输出模式
bis.b #0xE,&P1DIR ;
bis.b #0xE,&P1OUT ;
clr.b &KEY_Flag ; 清零 key_Flag
clr.b &KEY_Pressed ; 清零 key_Pressed
ret
;------------------------------------------------------------------------------
; 获取键值
;------------------------------------------------------------------------------
check_Key:
push.w R10 ; 进栈
push.w R11 ;
push.w R8 ;
push.w R9 ;
mov.b #0x8,R8 ;
clr.b R10 ;
T9 cmp.b #0x3,R10 ; 检测行
jc T5 ;
bis.b #0xE,&P1OUT ;
sub.b R8,&P1OUT ;
clrc ;
rrc.b R8 ; 移位
mov.b &P1IN,R14 ;
and.b #0xF0,R14 ;
cmp.b #0xF0,R14 ;
jc T6 ;
mov.b #0x80,R9 ;
clr.b R11 ;
T8 cmp.b #0x4,R11 ; 检测列
jc T6 ;
mov.b &P1IN,R14 ;
and.b R9,R14 ;
tst.b R14 ;
jne T7 ;
mov.b R10,R12 ;
and.w #0xFF,R12 ;
mov.w #0x4,R14 ;
call #H_Mul ;
mov.b R11,R14 ;
and.w #0xFF,R14 ;
add.w R12,R14 ;
mov.b KEY_MAP(R14),&KEY_Val ; 获取键值
jmp T5 ;
T7 clrc ;
rrc.b R9 ;
inc.b R11 ;
jmp T8 ;
T6 inc.b R10 ;
jmp T9 ;
T5 pop.w R9 ; 出栈
pop.w R8 ;
pop.w R11 ;
pop.w R10 ;
ret
delay:
mov.w #0xFF,R14 ;
T10 tst.w R14 ;
jeq EXIT_Delay ;
add.w #0xFFFF,R14 ;
jmp T10 ;
EXIT_Delay ret ;
;------------------------------------------------------------------------------
; 检测键盘是否有按键按下
;------------------------------------------------------------------------------
key_Event:
push.w R10 ;
and.b #0x1,&P1OUT ;
mov.b &P1IN,R10 ;
tst.b &KEY_Pressed ; 测试是否有键按下
jne T11 ;
mov.b R10,R14 ;
and.b #0xF0,R14 ;
cmp.b #0xF0,R14 ;
jc T11 ;
mov.b #0x1,&KEY_Pressed ;
call #delay ; 延时
call #check_Key ; 获取键值
jmp EXIT_K ;
T11 cmp.b #0x1,&KEY_Pressed ;
jne EXIT_K ;
and.b #0xF0,R10 ;
cmp.b #0xF0,R10 ;
jne EXIT_K ;
clr.b &KEY_Pressed ;
mov.b #0x1,&KEY_Flag ; 置位
EXIT_K pop.w R10 ;
ret ;
;------------------------------------------------------------------------------
; LED段码
;------------------------------------------------------------------------------
NUM_LED
db 0xd7 ;0
db 0x14 ;1
db 0xcd ;2
db 0x5d ;3
db 0x1E ;4
db 0x5b ;5
db 0xdb ;6
db 0x15 ;7
db 0xdf ;8
db 0x5f ;9
db 0x9f ;A
db 0xda ;B
db 0xc3 ;C
db 0xcc ;D
db 0xcf ;E
db 0x8b ;F
db 0x00 ;用于清空LED显示
;------------------------------------------------------------------------------
; 行列键盘的键值对应表
;------------------------------------------------------------------------------
KEY_MAP
db 0x01 ; 1
db 0x02 ; 2
db 0x03 ; 3
db 0x0A ; A
db 0x04 ; 4
db 0x05 ; 5
db 0x06 ; 6
db 0x00 ; 0
db 0x07 ; 7
db 0x08 ; 8
db 0x09 ; 9
db 0x0b ; B
;------------------------------------------------------------------------------
; 中断向量
;------------------------------------------------------------------------------
ORG 0FFFEh ; MSP430 RESET 向量
DW RESET ;
ORG 0fff2H ; USART 接收中断
DW data_Receive ;
ORG 0FFE0H ; basic Timer中断
DW BT_Interrupt ;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -