📄 key3.s43
字号:
#include "msp430x44x.h "
;-------------------------------------------------------------
;MSP-Test44x Demo lcd ,led dishplay the timer
;
; MSP430F449
; -----------------
; /|\| XIN|-
; | | | 74HC373(1)&(2)
; LCD --|RST XOUT|- -------------
; ---------- | | | |
; | COM0|<---|COM0 P3.1|------>|D0 |
; | . | . | . . | . | |
; | COM3|<---|COM3 P3.7|------>|D7 |
; | S0 |<---|S0 P4.0|------>| |
; | . | . | P4.1|------>| |
; | S14|<---|S14 P1.3|------>INC
; P1.2|------>DEC
; P1.1|------>FUN
;
;--------------------------------------------------------------
;----------------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
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
call #lcd_display_ona ;open lcd
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
;-------------------------------------------------------
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
mov.b #2fh,&led_disp_bit
jmp take_h
second_table_l
mov.b &second,R14
mov.b #1fh,&led_disp_bit
mov.b #00h,&dip
jmp take_l
min_table_h mov.b &min,R14
mov.b #3bh,&led_disp_bit
jmp take_h
min_table_l mov.b &min,R14
mov.b #37h,&led_disp_bit
mov.b #20h,&dip
jmp take_l
hour_table_h mov.b &hour,R14
mov.b #3eh,&led_disp_bit
jmp take_h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -