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

📄 key3.s43

📁 使用LED和小键盘做一个记时的程序
💻 S43
📖 第 1 页 / 共 2 页
字号:
#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 + -