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

📄 fireplace.src.bak

📁 使用三星芯片的控制程序,可供三星8位MCU初学者参考!
💻 BAK
📖 第 1 页 / 共 4 页
字号:
key_scan_loop:        
        call  serial_out                ;serial out 1111 1110B
        ld   r7,p0
        tm   r7,#01H                     ;test P0.0=0 ?
        
        jr   z, key_validate_end       ;if P0.0=0 to key_operation
        inc  r6                         ;key_value add 1
        rl   serial_data                ;1<-serial_data  scan again
        cp   r6,#09                     ;key value<8  jump loop
        jr   ult,key_scan_loop
    
        
key_validate_end:
        ld key_value,r6                 ;save key_value
        ret
;***************************************************************


key_value_judge:

;        tm  key_release,#01H            
;        jp  nz,key_judge_end            ;key_release=1,exit
        
        call key_validate               ;key_release=0,key validate
        ld  key_hold_down,#01H
        ld  led_15s_time1,#0
        ld  led_15s_time2,#0
        
        tm  led_display_flag,#01H
        jr  z,first_key_press

        
        call  key_deal
               
key_judge_end:
        ret
;*************************************************************        
        
first_key_press:  
        ld led_display_flag,#01H
        ld  beep_flag,#01h
        ld key_release,#01H 
        
        ld key_hold_flag,#00h
        
        ret
;***************************************************************
;***************************************************************
key_deal:
       
        cp key_value,#08H
        jp eq,key_1_sub                 ;temp+
                    
        cp key_value,#07H
        jp eq,key_2_sub                 ;temp-
          
        cp key_value,#06H
        jp eq,key_3_sub                 ;temp on-off   
             
        cp key_value,#05H
        jp eq,key_4_sub                 ;lamp on-off   
                      
        cp key_value,#01H
        jp eq,key_5_sub                 ;fire+   
                    
        cp key_value,#02H
        jp eq,key_6_sub                 ;fire-   
              
        cp key_value,#03H
        jp eq,key_7_sub                 ;fire on-off  
                 
        cp key_value,#04H
        jp eq,key_8_sub                 ;sound  
   
        ret
        
;**************************************************************        

;*************************************************************** 
key_1_sub:
        cp  temp_value,#0ah
        jr  z,key_1_sub_end

        tm key_hold_flag,#01h
        jr z,key_1_sub_end
        ld key_hold_flag,#00h
        
        tm temp_status,#01H
        jr z,key_1_sub_end             ;temp off ,exit     
           
        inc temp_value                  ;temp+
        
        cp  temp_value,#01H
        jr  ult,temp_min
        cp  temp_value,#0AH
        jr  ugt,temp_max
        jr  key_1_sub1
temp_min:
        ld  temp_value,#01H
        jr  key_1_sub1
temp_max:
        ld  temp_value,#0AH
        
key_1_sub1:
        ld  I2C_data,temp_value
        ld  I2C_dress,#temp_value_dress
        call WR_24C02
     
        ld  beep_flag,#01h
key_1_sub_end:
       
        
        ret        
;***************************************************************         
;*************************************************************** 
key_2_sub:
        cp  temp_value,#01H
        jr  z,key_2_sub_end
        
        tm key_hold_flag,#01h
        jr z,key_2_sub_end
        ld key_hold_flag,#00h

        tm temp_status,#01H
        jr z,key_2_sub_end             ;temp off ,exit  
              
        dec temp_value                  ;temp-
        cp  temp_value,#01H
        jr  ult,temp_min_1
        cp  temp_value,#0AH
        jr  ugt,temp_max_2
        jr  key_2_sub1
temp_min_1:
        ld  temp_value,#01H
        jr  key_2_sub1
temp_max_2:
        ld  temp_value,#0AH
     
key_2_sub1:
        ld  I2C_data,temp_value
        ld  I2C_dress,#temp_value_dress
        call WR_24C02
 
        ld  beep_flag,#01h
key_2_sub_end:
        
        ret        
;*************************************************************** 
;*************************************************************** 
key_3_sub:
        
  
        tm  key_release,#01H            
        jp  nz,key_3_sub_end            ;key_release=1,exit

        tm temp_status,#01H              
        jr z,temp_on                   ;if temp_status=0=off jump to temp on
        
temp_off:                               ;if temp_status=1=on  to temp off
        ld temp_status,#00H
        call temp_ad_off
        jr key_3_sub1
        
temp_on:
        ld temp_status,#01H
key_3_sub1:        
        nop

        ld  beep_flag,#01h
        ld  key_release,#01H
key_3_sub_end:
        
               
        ret        
;*************************************************************** 
;*************************************************************** 
key_4_sub:
        

        tm  key_release,#01H            
        jp  nz,key_4_sub_end            ;key_release=1,exit


        tm fire_status,#01H
        jr z,key_4_sub_end
        
        tm lamp_status,#01H              
        jr nz,lamp_off                  ;if lamp_status=0=off jump to lamp on
        
lamp_on:
        ld lamp_status,#01H
        call lamp_open         
        jr key_4_sub1
 
        
lamp_off:                               ;if lamp_status=1=on  to lamp off
        ld lamp_status,#00H 
        call lamp_close 

key_4_sub1:
        ld  I2C_data,lamp_status
        ld  I2C_dress,#lamp_status_dress
        call WR_24C02
           
        ld   key_release,#01H 
        ld  beep_flag,#01h 
key_4_sub_end:        
        
                 
        ret        
;***************************************************************         
;*************************************************************** 
key_5_sub:
        cp  fire_value,#0ah
        jr  z,key_5_sub_end

        tm key_hold_flag,#01h
        jr z,key_5_sub_end
        ld key_hold_flag,#00h

        tm fire_status,#01H
        jr z,key_5_sub_end             ;fire off ,exit        
        inc fire_value                  ;fire+
        cp  fire_value,#01H
        jr  ult,fire_min
        cp  fire_value,#0AH
        jr  ugt,fire_max
        jr  key_5_sub1
fire_min:
        ld  fire_value,#01H
        jr  key_5_sub1
fire_max:
        ld  fire_value,#0AH
        
key_5_sub1:
        ld  I2C_data,fire_value
        ld  I2C_dress,#fire_value_dress
        call WR_24C02
        ld  beep_flag,#01h
key_5_sub_end:
                
        ret        
;***************************************************************         
;*************************************************************** 
key_6_sub:
        cp  fire_value,#01H
        jr  z,key_6_sub_end

        tm key_hold_flag,#01h
        jr z,key_6_sub_end
        ld key_hold_flag,#00h


        tm fire_status,#01H
        jr z,key_6_sub_end             ;fire off ,exit        
        dec fire_value                  ;fire-
        cp  fire_value,#01H
        jr  ult,fire_min_1
        cp  fire_value,#0AH
        jr  ugt,fire_max_2
        jr  key_6_sub1
fire_min_1:
        ld  fire_value,#01H
        jr  key_6_sub1
fire_max_2:
        ld  fire_value,#0AH
      
key_6_sub1:
        ld  I2C_data,fire_value
        ld  I2C_dress,#fire_value_dress
        call WR_24C02
        ld  beep_flag,#01h
key_6_sub_end:
        
        ret        
;***************************************************************           
;*************************************************************** 
key_7_sub:
        

        tm  key_release,#01H            
        jp  nz,key_7_sub_end            ;key_release=1,exit


        tm fire_status,#01H              
        jr z,fire_on  
        
fire_off:
        ld fire_status,#00H             ;if fire_status=0=off jump to fire on
        and  p2,#10111111B              ;motor=p2.6
        and p0,#01111111B               ;clear p0.7 disenble LIGHTS
        call sound_close 
        call lamp_close                                  
        jp  key_7_sub1
        
        
fire_on:                               ;if fire_status=1=on  to fire off
        ld fire_status,#01H
        
        tm  temp_sensor,#01h
        jr  z,sound_judge
        
        or p0,#10000000B                ;set p0.7 enble LIGHTS
 
sound_judge: 
        cp sound_status,#01H
        jr eq,sound_judge_1
        call sound_close
        jr lamp_judge
sound_judge_1:
        call sound_open

lamp_judge: 
        cp lamp_status,#01H
        jr eq,lamp_judge_1
        call lamp_close
        jr key_7_sub1
lamp_judge_1:
        call  lamp_open     
        
 
key_7_sub1:
        ld  beep_flag,#01h
        ld  key_release,#01H
key_7_sub_end:        
        ret
        
;**************************************************************
    
;*************************************************************** 
key_8_sub:
        

        tm  key_release,#01H            
        jp  nz,key_8_sub_end            ;key_release=1,exit


        tm fire_status,#01H
        jr z,key_8_sub_end
        
        tm sound_status,#01H              
        jr z,sound_on                   ;if sound_status=0=off jump to sound on
        
sound_off:                                ;if sound_status=1=on  to sound off
        ld sound_status,#00H  

        call  sound_close   
        jr key_8_sub1
        
sound_on:
        ld sound_status,#01H

        call sound_open

key_8_sub1:
        ld  I2C_data,sound_status
        ld  I2C_dress,#sound_status_dress
        call WR_24C02
        ld  beep_flag,#01h  
        ld  key_release,#01H 
key_8_sub_end:               
        ret        
;***************************************************************          

;**************************************************************
sound_open:
        tm  temp_sensor,#01h
        jr  z,sound_open_end
        
        or p0,#00001000B               ;set p0.3  disenble spker
        ;and p0,#11110111B               ;clear p0.3  enble spker
sound_open_end:        
        ret
        
sound_close:
        and p0,#11110111B               ;clear p0.3  enble spker
        ;or p0,#00001000B               ;set p0.3  disenble spker
        ret
 
               
lamp_open:
        tm  temp_sensor,#01h
        jr  z,lamp_open_end
        
        or p0,#00100000B               ;clear p0.5  enble lamp
lamp_open_end:
        ret 

        
lamp_close:
        and p0,#11011111B               ;set p0.5  disenble lamp
        
        ret              
;***************************************************************   

;***************************************************************          
delay20ms:
        push  r8
        push  r9
        
	LD	r8,#02H     ;#01H
Delay1: 
        ;ld      r9,#08h
        ld      r9,#08h
Delay2:
	NOP
	NOP
	NOP
	DEC	r9
        nop
        nop
        nop
	JR	nz,Delay2
        nop
        nop
        dec   r8
        jr    nz,Delay1
        
        pop  r9
        pop  r8
	RET                                             
;********************************************

;***************************************************************          
                          
;********************************************






;**********************************************
I2C_start: 
        
        or  I2C_PORT,#I2C_SDA1  ;SDA=1
        nop
        nop
        
        or  I2C_PORT,#I2C_SCL1  ;SCL=1
        nop
        nop
        
        and I2C_PORT,#I2C_SDA0  ;SDA=0
        nop
        nop
        
        and I2C_PORT,#I2C_SCL0  ;SCL=0
        nop
        nop
        
	ret        
;***********************************************

;***********************************************
I2C_stop:       
	
        and I2C_PORT,#I2C_SDA0  ;SDA=0
        nop
        nop
        
        or  I2C_PORT,#I2C_SCL1  ;SCL=1
        nop
        nop
        
        or  I2C_PORT,#I2C_SDA1  ;SDA=1	
        nop
        nop
        
        and I2C_PORT,#I2C_SDA0  ;SDA=0
        nop
        nop
        
        and I2C_PORT,#I2C_SCL0  ;SCL=0
        nop
        nop
        
	ret        
;***********************************************

;***********************************************
I2C_ask:      
	
        and I2C_PORT,#I2C_SDA0  ;SDA=0
        nop
        nop
        
        or  I2C_PORT,#I2C_SCL1  ;SCL=1
        nop
        nop
        
        and I2C_PORT,#I2C_SCL0  ;SCL=0
        nop
        nop
       
        or  I2C_PORT,#I2C_SDA1  ;SDA=1
        nop
        nop
        
	ret        
;***********************************************

;***********************************************
I2C_noask:      
	
        or  I2C_PORT,#I2C_SDA1  ;SDA=1
        nop
        nop

⌨️ 快捷键说明

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