⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyboard3.s43.bak

📁 键盘扫描 并通过LED 适时 显示
💻 BAK
📖 第 1 页 / 共 2 页
字号:
;**************************************************************
; 文件名称:
;         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 + -