📄 keyboard3.s43.bak
字号:
;**************************************************************
; 文件名称:
; keyBoard3.s43
; 文件说明:
; 使用LED和小键盘做一个计时程序
;**************************************************************
#include "msp430x44x.h "
;***************************************************************
; RAM单元定义
;***************************************************************
hour equ 201h ;时
min equ 202h ;分
second equ 203h ;秒
flag equ 204h ;标志寄存器
led_disp_data equ 205h ;led 显示缓冲
led_disp_bit equ 206h ;led显示位选
counter equ 207h ;显示计数
dip equ 208h ;小数点
inc_dec_buffer equ 209h ;inc缓存;dec缓存
fun_buffer equ 20ah ;fun缓存
key_flag equ 20bh ;键盘中断标志缓存
fun_flag equ 20ch ;功能键标志缓存
second_flag equ 200h ;0.5S标志
;***************************************************************
; 按键定义
;***************************************************************
key_inc equ 008h ;P1.3
key_dec equ 004h ;P1.2
key_fun equ 002h ;P1.1
;***************************************************************
;;首先,对系统进行初始化。关看门狗、置端口的输入输出状态、以及中断情况态
;;接着,对用到的ram区进行初始化、对标志位初始化。
;***************************************************************
ORG 08000h ; Program Start
;***************************************************************
Reset
mov.w #0600h,SP ; Initia ize stackpointer
StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
Setup_P1
bic.b #key_inc+key_dec+key_fun,&P1DIR ;input mode
bis.b #key_inc+key_dec+key_fun,&P1OUT ;
bis.b #key_inc+key_dec+key_fun,&P1IES ;接收从高到低的跳变
bis.b #key_inc+key_dec+key_fun,&P1IE ; 使能中断
Setup_P3
mov.b #0ffh,&P3DIR
mov.b #00h,&P3OUT
mov.b #0ffh,&P4DIR
bis.b #03h,&P4OUT
Setup_BT
mov.b #BTSSEL+BT_ADLY_500,&BTCTL ;0.5s int
; mov.b #0a5h,&BTCTL
bis.b #BTIE,&IE2 ;Enable Basic Timer interrupt
Setup_TA
mov.w #TASSEL1+TACLR,&TACTL ;led 刷新一位定时
mov.w #CCIE,&CCTL0
mov.w #3600,&CCR0 ;4.5ms
bis.w #MC0,&TACTL
clr_ram
clr R8
loop_clr clr.b second_flag(R8)
inc.b R8
cmp.b #0dh,R8
jeq clr_ram_over
jmp loop_clr
clr_ram_over clr R8
eint
;***************************************************************
; 主程序区
;***************************************************************
mainloop
nop
nop
bis.w #LPM0,SR
nop
nop
bic.b #key_inc+key_dec+key_fun,&P1IE
call #key_scan
ret_jmp jmp mainloop
key_scan
push R15
call #delay_10ms ;去抖动和防止干扰
mov.b &P1IN,R15
inv.b R15
bit.b #key_inc+key_dec+key_fun,R15 ;判断有无按键按下
jz ret_scan
loop_key
mov.b &P1IN,R15 ;判断按键有无松开
inv.b R15
bit.b #key_inc+key_dec+key_fun,R15
jnz loop_key
call #keycodej3
ret_scan clr.b &P1IFG
bis.b #key_inc+key_dec+key_fun,&P1IE
jmp ret_jmp
;***************************************************************
; PORT 1 INT
;***************************************************************
PORT1_INT
bic.w #LPM0,0(SP) ;退出LMP0
mov.b &P1IFG,&key_flag
ret_int clr.b &P1IFG
reti
;***************************************************************
; 延时10ms子程序
;***************************************************************
delay_10ms
mov #2666,R15
loop_delay dec R15
jnz loop_delay
ret
;***************************************************************
; 判断按键子程序
;***************************************************************
keycodej3
test_inc bit.b #key_inc,&key_flag
jz test_dec
call #inc_fun
jmp ret_1
test_dec bit.b #key_dec,&key_flag
jz test_fun
call #dec_fun
jmp ret_1
test_fun bit.b #key_fun,&key_flag
call #fun_fun
jmp ret_1
ret_1
ret
;***********************************************************************
; inc按键子程序
;***********************************************************************
inc_fun
bit.b #1,&fun_flag
jz ret_inc
cmp.b #1,&fun_buffer
jeq inc_hour
inc.b &inc_dec_buffer
dadc.b &inc_dec_buffer
cmp.b #60h,&inc_dec_buffer
jlo inc_move
clr.b &inc_dec_buffer
jmp inc_move
inc_hour
inc.b &inc_dec_buffer
dadc.b &inc_dec_buffer
cmp.b #23h,&hour
jlo inc_move
clr.b &inc_dec_buffer
inc_move mov.b &fun_buffer,R15
mov.b &inc_dec_buffer,second_flag(R15)
ret_inc ret
;***********************************************************************
; dec按键子程序
;***********************************************************************
dec_fun
bit.b #1,&fun_flag
jz ret_dec
cmp.b #01h,&inc_dec_buffer
jhs loop_dec
cmp.b #1,&fun_buffer
jeq dec_hour
mov.b #60h,&inc_dec_buffer
jmp loop_dec
dec_hour mov.b #24h,&inc_dec_buffer
loop_dec bit.b #0fh,&inc_dec_buffer
jz set_dec
unset_dec dec.b &inc_dec_buffer
clrc
dadd.b #0,&inc_dec_buffer
jmp dec_move
set_dec sub.b #06,&inc_dec_buffer
jmp unset_dec
dec_move mov.b &fun_buffer,R15
mov.b &inc_dec_buffer,second_flag(R15)
ret_dec ret
;***********************************************************************
; fun按键子程序
;***********************************************************************
fun_fun
inc.b &fun_buffer
cmp.b #1,&fun_buffer
jeq fun_star_hour
cmp.b #2,&fun_buffer
jeq fun_min
cmp.b #3,&fun_buffer
jeq fun_second
cmp.b #4,&fun_buffer
jeq fun_stop
fun_ret ret
;************************************************************************
fun_star_hour
bis.b #1,&fun_flag
mov.b &hour,&inc_dec_buffer
jmp fun_ret
;************************************************************************
fun_min
mov.b &min,&inc_dec_buffer
jmp fun_ret
;************************************************************************
fun_second
mov.b &second,&inc_dec_buffer
jmp fun_ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -