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

📄 keyboard3.s43

📁 使用LED和小键盘做一个记时的程序
💻 S43
📖 第 1 页 / 共 2 页
字号:
            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                      ; R14=秒数
                    mov.b       #2fh,&led_disp_bit               ; 控制LED的右边第二个显示
                    jmp         take_h                           ; 取高位
second_table_l                                                   ;
                    mov.b       &second,R14                      ;
                    mov.b       #1fh,&led_disp_bit               ;
                    mov.b       #00h,&dip                        ; 控制LED右边第一个显示
                    jmp         take_l                           ; 取低位
                                                                 ; 
                                                                 ;
min_table_h         mov.b       &min,R14                         ;
                    mov.b       #3bh,&led_disp_bit               ; 控制LED的右边第四个显示
                    jmp         take_h                           ; 取高位

min_table_l         mov.b       &min,R14                         ;
                    mov.b       #37h,&led_disp_bit               ; 控制LED右边第三个显示
                    mov.b       #20h,&dip                        ; 取低位
                    jmp         take_l                           ;

hour_table_h        mov.b       &hour,R14                        ;
                    mov.b       #3eh,&led_disp_bit               ; 控制LED右边第六个显示
                    jmp         take_h                           ; 取高位
                                                                 ;
hour_table_l        mov.b       &hour,R14                        ;
                    mov.b       #3dh,&led_disp_bit               ; 显示小时的低位
                    mov.b       #20h,&dip                        ; 
                    jmp         take_l                           ;
                                                                 ;
take_h              mov.b     	R14,R13                          ; 取高位
	            rra.b     	R13                              ;
            	    rra.b     	R13                              ;
	            rra.b     	R13                              ;
	            rra.b     	R13                              ;
	            and.b     	#0fh,R13                         ;
	            mov.b     	led_table(R13),&led_disp_data    ;
	            
	           ret         	           	                 ;
take_l        	                                                 ; 取低位
	           mov.b     	R14,R13                          ; 
	           and.b     	#0fh,R13                         ;
	           mov.b     	led_table(R13),&led_disp_data	 ;
	           add.b       &dip,&led_disp_data               ;                
	           ret                         	             
;****************************************************************   
;                     led显示子程序   
;****************************************************************
led_display                                                                   
                    mov.b       &led_disp_data,&P3OUT   ; 设置显示数据
                    bis.b       #02h,&P4OUT             ; 打开数据锁存                   
                    bic.b       #02h,&P4OUT             ; 关闭数据锁存                  
                     
                    
                    mov.b       &led_disp_bit,P3OUT
                    bis.b       #01h,&P4OUT              ; 打开控制锁存
                    bic.b       #01h,&P4OUT              ; 关闭控制锁存 
                    ret                                                       
;**************************************************************** 
;                    TimerA_int   
;****************************************************************
Timera_int                 
                      inc.b     R8                       ;
                      inc.b     R8                       ;
                      cmp.b     #0ch,R8                  ;
                      jnz       Timer_int_end            ;
                      clr.b     R8                       ;
                                     
Timer_int_end         push.b  &second                    ;
                      push.b  &min                       ;
                      push.b  &hour                      ;
                      call    #led_blink                 ; 如果有键按下,LED闪烁       
                      call    #led_chang                 ; 改变LED缓冲 
                      call    #led_display               ; 显示数据到LED 
                      pop.b   &hour                      ;
                      pop.b   &min                       ;
                      pop.b   &second                    ;
                      reti                               ;
;****************************************************************
;         led_blink 
;****************************************************************
led_blink           cmp.b       #3,&fun_buffer  ;按下功能键三次,秒钟对应的LED闪烁
                    jeq         second_blink
                    cmp.b       #2,&fun_buffer  ;按下功能键两次,分钟对应的LED闪烁
                    jeq         min_blink
                    cmp.b       #1,&fun_buffer  ;按下功能键一次,小时对应的LED闪烁
                    jeq         hour_blink      ;
                    jmp         blink_ret       ;
second_blink                                    ; 秒对应的LED闪烁
                    bit.b       #1,&second_flag ; 
                    jnz         s_ret           ;               
                    mov.b       #0aah,&second   ;
s_ret               jmp         blink_ret       ;
min_blink                                       ; 分对应的两个LED闪烁    
                    bit.b       #1,&second_flag ;
                    jnz         m_ret           ;                
                    mov.b       #0aah,&min      ;              
m_ret               jmp         blink_ret       ;
hour_blink                                      ; 小时对应的LED闪烁
                    bit.b       #1,&second_flag ;
                    jnz         blink_ret       ;                  
                    mov.b       #0aah,&hour     ;
                      
blink_ret           ret                         ;                                                                             
;****************************************************************
;          BASIC TIMER int      
;**************************************************************** 
BASIC_INT   	      
                      xor.b   #01h,&second_flag        ; 标识取反
                      bit.b   #1,&second_flag          ; 是1吗?
                      jz      clock_ret                ;  
                      
                      xor.b   #01h,&flag               ;        
                      setc                             ;
BASIC_END	          
                      dadc.b   &second                 ; 
                      cmp.b   #60h,&second             ; 与60H比较
                      jlo     clock_end                ; 
                      clr.b   &second                  ; 清零second
                      dadc.b   &min                    ; 如果大于60H,分加1
                      cmp.b   #60h,&min                ;
                      jlo     clock_end                ; 如果分大于60H
                      dadc.b   &hour                   ; 小时加1
                      clr.b   &min                     ; 如果小时大于24H
                      cmp.b   #24h,&hour               ; 
                      jlo     clock_end                ; 小时边为0
                      clr.b   &hour                    ;
clock_end                                              
                      
clock_ret             reti                             ;
            
delay       	mov.b   #0ffh,R9                       ; 延迟
ttt         	nop                                    ;
            	nop                                    ;
            	dec.b   R9                             ; R9--
            	jnz     ttt                            ;
            	ret                                    ;

;****************************************************************
;           led显示代码    
;**************************************************************** 			
led_table			
              db      0d7h          ;0
              db      14h           ;1
              db      0cdh          ;2
              db      5dh           ;3
              db      1Eh           ;4
              db      5bh           ;5
              db      0dbh          ;6
              db      15h           ;7
              db      0dfh          ;8
              db      05fh          ;9
              db      00h           ;no,用于在熄灭LED
              db      00h           ;no
              
;****************************************************************                 
;          中断向量
;****************************************************************             
            RSEG    INTVEC             ; MSP430 RESET 向量        
;****************************************************************           
            DW      BASIC_INT               ;0FFE0h    
            DW      Reset                   ;0FFE2h    
            DW      Reset                   ;0FFE4h 
            DW      Reset                   ;0FFE6h
            DW      PORT1_INT	            ;0FFE8h
            DW      Reset                   ;0FFEAh
            DW      Timera_int              ;0FFECh 
            DW      Reset                   ;0FFEEh
            DW      Reset                   ;0FFF0h 
            DW      Reset                   ;0FFF2h
            DW      Reset                   ;0FFF4h 
            DW      Reset                   ;0FFF6h
            DW      Reset                   ;0FFF8h 
            DW      Reset                   ;0FFFAh
            DW      Reset                   ;0FFFCh 
            DW      Reset                   ;0FFFEh            
            END    
              	   


		
		   
			










⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -