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

📄 nt02.asm

📁 空调控制器
💻 ASM
📖 第 1 页 / 共 5 页
字号:
		sta	on_min			; auto power on one time availability

		jsr	lcd_on	
			
		jmp	power_k_com

power_off_k:	
		lda	#power_on_f_n
		and	powerflag
		sta	powerflag
		
		stz	h_motor_t		; clear high motor 
		
		lda	#00h		
		sta	off_hour		;
		sta	off_min			; auto power off one time availability			
		
		jsr	lcd_off
	
		stz	back_light_t		;when key press then back light off	
	
power_k_com:
		stz	clock_setting_m		;clear clock setting display flag
		stz	dispflag		;clear clock setting display flag

		stz	auto_mode		; realy auto mode contorl	
		stz	really_act_3min
		stz	really_act_20sec			
		rts


;***********************************************
;		mode key
;***********************************************
;-----------
;0=speed ;1=cold; 2= hot ; 3= sleep
mode_k:						;air control action mode
		stz	really_act_3min
		stz	auto_mode
				
		lda	speedmode
		and	#0fh
		cmp	#speed_motor_aut
		beq	mode_k2
mode_k0:		
		inc	actionmode
		lda	actionmode
		cmp	#cold_mode
		beq	mode_k01
		bcs	mode_k1
		rts
mode_k01:
		lda	powerflag
		and	#t_set_rang_f
		bne	mode_k_ret
		lda	t_setting_m
		cmp	#26
		bcs	mode_k_ret
		lda	#26
		sta	t_setting_m
		rts
mode_k1:
		cmp	#hot_mode
		beq	mode_k_ret
		lda	#speed_mode
		sta	actionmode
		rts	
mode_k2:
		lda	actionmode
		cmp	#cold_mode
		bne	mode_k3
		lda	#hot_mode
		sta	actionmode		
		rts
mode_k3:
		lda	#cold_mode
		sta	actionmode	
		jmp	mode_k01	
mode_k_ret:
		rts
;***********************************************
;		speed key
;***********************************************
;-----------
speed_k:					;motor control
		stz	really_act_3min
		stz	auto_mode		
		
		jsr	buzzer_on
		
		lda	actionmode
		cmp	#speed_mode
		beq	nornal_speed_k		; actino mode =speed mode

		
		lda	speedmode
		cmp	#speed_motor_aut
		bcs	speed_k1
		beq	speed_k1
speed_k0:
		inc	speedmode
		rts
speed_k1:	
		stz	speedmode
		rts
nornal_speed_k:
		lda	speedmode
		cmp	#speed_motor_h
		bcs	speed_k1
		beq	speed_k1
		inc	speedmode
		rts	
speed_k_ret:
		rts
;***********************************************
;		clock  key press
;***********************************************
; =00h idel 
; =01h clk hour setting mode ;02h clk min setting mode
; =03h power on hour setting mode ;04h power on min setting mode
; =05h power off hour setting mode ;06h power off min setting mode
; =07h temperature calibration mode
;-----------------------------------------------
clock_k:
		lda	clock_setting_m
		cmp	#06h
		bne	clock_k0
		
clock_clear:
		stz	clock_setting_m
		lda	powerflag
		and	#power_on_f
		bne	clock_clear_ret
		
		jsr	lcd_off			;  settin clock setting finish then set LCD off

		stz	back_light_t		; back light turn off
		stz	clock_setting_t		; clear clock setting dealy 5 sec
clock_clear_ret:
		rts	
clock_k0:
		cmp	#07h
		beq	clock_clear
		cmp	#08h
		beq	clock_clear
		inc	clock_setting_m
		lda	clock_setting_m
		cmp	#clock_hour_set
		beq	clock_k1
		jmp	clock_k2
clock_k1:
		lda	powerflag
		and	#power_on_f
		bne	clock_k4
		
		stz	disset
		jsr	dis_ram_clr		
		
		jsr	lcd_on			;  setting clock time when turn off then set LCD on
		lda	#8			; base time 640msc 
		sta	clock_setting_t		; display flash 5 sec
		rts
		
clock_k2:	
		lda	powerflag
		and	#power_on_f
		beq	clock_k4
			
		lda	clock_setting_m		; can't setting power on time when power on
		cmp	#on_hour_set
		bne	clock_k3
		lda	#off_hour_set
		sta	clock_setting_m
		jmp	clock_k4
clock_k3:
		lda	clock_setting_m
		cmp	#on_min_set
		bne	clock_k4
		lda	#off_hour_set
		sta	clock_setting_m
clock_k4:
		lda	#8			; base time 640msc 
		sta	clock_setting_t		; display flash 5 sec
		rts		

;***********************************************
;		up key press
;***********************************************
;-----------
up_k:		
		lda	clock_setting_m
		cmp	#00h
		beq	up_k1_0			; temperature setting
		
		lda	#8			; base time 640msc 
		sta	clock_setting_t		; flash display 5 sec
		lda	clock_setting_m	
			
		cmp	#clock_hour_set			
		beq	up_clk_hour_s		; clock hour setting
		cmp	#clock_min_set
		beq	up_clk_min_s		; clock minute setting
		cmp	#on_hour_set			
		beq	up_power_on_hour_s	; power on hour setting
		cmp	#on_min_set
		beq	up_power_on_min_s	; power on minute setting
		cmp	#off_hour_set		
		beq	up_power_off_hour_s	; power off hour setting
		cmp	#off_min_set
		beq	up_power_off_min_s	; power off minute setting
		cmp	#tem_cal_set
		beq	up_tem_cal_s		; temperature calibration setting
		
		jmp	clock_clear		
up_k1_0:
		jmp	up_k1		
;----------------relly clcok increa setting				
up_clk_hour_s:
		lda	clk_hour
		cmp	#23			; check if =23 then clear
		bne	up_clk_hour_s0
;		stz	clk_hour
		rts
up_clk_hour_s0:
		inc	clk_hour
		jsr	buzzer_on		; buzzer on
				
		rts		
up_clk_min_s:		
		lda	clk_min
		cmp	#59			; check if =59 then clear
		bne	up_clk_min_s0
;		stz	clk_min
		rts		
up_clk_min_s0:
		inc	clk_min
		jsr	buzzer_on		; buzzer on		
		
		rts
;-----------------power on time increa setting 	
up_power_on_hour_s:							
		lda	on_hour		
		cmp	#23			; check if =23 then clear
		bne	up_power_on_hour_s0
;		stz	off_hour
		rts
up_power_on_hour_s0:
		inc	on_hour
		jsr	buzzer_on		; buzzer on		
		rts				
up_power_on_min_s:			
		lda	on_min
		cmp	#59			; check if =59 then clear
		bne	up_power_on_min_s0
;		stz	on_min
		rts		
up_power_on_min_s0:
		inc	on_min
		jsr	buzzer_on		; buzzer on
		rts	
;----------------power off time increa setting
		
up_power_off_hour_s:
		lda	off_hour		
		cmp	#23			; check if =23 then clear
		bne	up_power_off_hour_s0
;		stz	off_hour
		rts
up_power_off_hour_s0:
		inc	off_hour
		jsr	buzzer_on		; buzzer on
		rts				
up_power_off_min_s:			
		lda	off_min
		cmp	#59			; check if =59 then clear
		bne	up_power_off_min_s0
;		stz	off_min
		rts		
up_power_off_min_s0:
		inc	off_min
		jsr	buzzer_on		; buzzer on		
		rts		
;----------------------; temperature calibration setting
up_tem_cal_s:		
		lda	com_hour
		cmp	#60
		beq	up_tem_cal_s_0	
		lda	com_min
		cmp	#9
		bne	up_tem_cal_s_1
		stz	com_min	
		lda	com_hour
		cmp	#60
		bne	up_tem_cal_s_2
up_tem_cal_s_0		
		stz	com_min
		rts
up_tem_cal_s_1:
		inc	com_min
		jmp	up_tem_cal_s_3
up_tem_cal_s_2:
		inc	com_hour
up_tem_cal_s_3:
		jsr	temp_warp		; tempereture warp calc
		jsr	buzzer_on		; buzzer on
up_tem_cal_s_ret:				
		rts
		
		
				
;-----------------temperature increa setting mode
	
up_k1:		
		stz	auto_mode
		stz	really_act_3min
		stz	really_act_20sec
				
		lda	t_setting_m		; temperature setting mode ,temperature  range max 40 ℃
		cmp	#40			; 
		beq	up_k_ret
		inc	t_setting_m
		
		jsr	buzzer_on		; buzzer on	
			
		jmp	up_k_ret
up_k_ret:
		rts				
;***********************************************
;		down key
;***********************************************
;-----------
down_k:
		lda	clock_setting_m
		cmp	#00h
		beq	down_k1_0		; temperature setting

		lda	#8			; base time 640msc 
		sta	clock_setting_t		; flash display 5 sec
		lda	clock_setting_m	
		
		cmp	#clock_hour_set			
		beq	down_clk_hour_s		; clock hour setting
		cmp	#clock_min_set			
		beq	down_clk_min_s		; clock minute setting
		cmp	#on_hour_set			
		beq	down_power_on_hour_s	; power on hour setting
		cmp	#on_min_set
		beq	down_power_on_min_s	; power on minute setting
		cmp	#off_hour_set		
		beq	down_power_off_hour_s	; power off hour setting
		cmp	#off_min_set
		beq	down_power_off_min_s	; power off minute setting
		cmp	#tem_cal_set		
		beq	down_tem_cal_s		; temperature calibration setting
		jmp	clock_clear
down_k1_0:
		jmp	down_k1	
;----------------relly clcok dec setting				
down_clk_hour_s:
		lda	clk_hour		
		cmp	#00			; check if hour=00 then setting 23
		bne	down_clk_hour_s0
;		lda	#23
;		sta	clk_hour
		rts
down_clk_hour_s0:
		dec	clk_hour
		jsr	buzzer_on		; buzzer on	
				
		rts		
down_clk_min_s:		
		lda	clk_min
		cmp	#00			; check if min=00 then setting 59
		bne	down_clk_min_s0
;		lda	#59
;		sta	clk_min
		rts		
down_clk_min_s0:
		dec	clk_min
		jsr	buzzer_on		; buzzer on	
				
		rts
;-----------------power on time dec setting 	
down_power_on_hour_s:							
		lda	off_hour		
		cmp	#00			; check if hour=00 then setting 23
		bne	down_power_on_hour_s0
;		lda	#23
;		sta	off_hour
		rts
down_power_on_hour_s0:
		dec	off_hour
		jsr	buzzer_on		; buzzer on	
				
		rts				
down_power_on_min_s:			
		lda	off_min
		cmp	#00			; check if min=00 then setting 59
		bne	down_power_on_min_s0
;		lda	#59
;		sta	off_min
		rts		
down_power_on_min_s0:
		dec	off_min
		jsr	buzzer_on		; buzzer on	
				
		rts	
;----------------power off time dec setting 		
		
down_power_off_hour_s:
		lda	off_hour		
		cmp	#00			; check if hour=00 then setting 23
		bne	down_power_off_hour_s0
;		lda	#59
;		sta	off_hour
		rts
down_power_off_hour_s0:
		dec	off_hour
		jsr	buzzer_on		; buzzer on	
				
		rts				
down_power_off_min_s:			
		lda	off_min
		cmp	#00			; check if min=00 then setting 59
		bne	down_power_off_min_s0
;		lda	#59
;		sta	off_min
		rts		
down_power_off_min_s0:
		dec	off_min
		jsr	buzzer_on		; buzzer on	
				
		rts
;----------------temperature calibration setting
down_tem_cal_s:
		lda	com_min
		cmp	#00
		bne	down_tem_cal_s_0
		lda	com_hour
		cmp	#00
		bne	down_tem_cal_s_1
		rts	
down_tem_cal_s_0:
		dec	com_min
		jmp	down_tem_cal_s_2
down_tem_cal_s_1:
		lda	#9
		sta	com_min
		dec	com_hour
down_tem_cal_s_2:
		jsr	temp_warp		; temperature warp calc
		jsr	buzzer_on		; buzzer on	
down_tem_cal_s_ret:			
		rts
		
;-----------------temperature dec setting mode
down_k1:					; action temperature setting
		stz	auto_mode
		stz	really_act_3min
		stz	really_act_20sec

		lda	powerflag
		and	#t_set_rang_f
		beq	down_k3
down_k2:
		lda	t_setting_m		; t_set_rang_f=1 cold mode  range 10~40 ℃,hot mode range 10~40 ℃
		cmp	#10
		beq	down_k_ret
		dec	t_setting_m
		
		jsr	buzzer_on		; buzzer on
		jmp	down_k_ret
		
down_k3:
		lda	actionmode		;t_set_rang_f=0 cold mode  range 26~40 ℃,hot mode range 10~40 ℃
		cmp	#cold_mode		;
		bne	down_k2			; not in cold mode

down_k4:
		lda	t_setting_m
		cmp	#26			; 26℃
		beq	down_k_ret
		cmp	#10
		beq	down_k_ret
		dec	t_setting_m
		jsr	buzzer_on		; buzzer on

down_k_ret:	
		rts
;***********************************************
;		clock&mode key
;***********************************************
;----------- calibration temperature
tem_cal_mode_k:
		lda	#10			;when key press then back light on
		sta	back_light_t		; setting back light 6.4sec
		
		lda	#8			; base time 640msc 
		sta	clock_setting_t		; flash display 5 sec
		jsr	buzzer_on

		lda	tem_cal_f
		and	#tem_cal_t_st
		beq	tem_cal_mode_k_st
							
		lda	#tem_cal_t_st_n	
		and	tem_cal_f
		sta	tem_cal_f
				
		lda	#07h
		sta	clock_setting_m	


		stz	dispflag
		lda	temperature_h
		sta	com_hour
		lda	temperature_l
		sta	com_min
tem_cal_mode_k_ret:		
		rts
tem_cal_mode_k_st:
		lda	#tem_cal_t_st
		ora	tem_cal_f
		sta	tem_cal_f
		stz	tem_cal_t
		
		stz	clock_setting_m
		stz	dispflag
		rts		
;------------temperature warp value calc
temp_warp:
		lda	com_hour
		cmp	temp_check_h
		beq	temp_w_1		; if com_hour=temperature_h
		bcs	temp_w_2		; if com_hour>temperature_h
		lda	temp_check_h		; if com_hour<temperature_h
		sta	temp
		lda	temp_check_l
		cmp	com_min
		bcs	temp_w_0
		dec	temp			; if com_hour<temperature_h ,and com_min<temperature_l
		lda	#10
		clc	
		adc	temp_check_l
temp_w_0:		
		sec				; if com_hour<temperature_h ,and com_min>temperature_l
		sbc	com_min
		sta	tem_cal_l
		lda	temp
		sec
		sbc	com_hour
		sta	tem_cal_h
		jmp	low_com	
temp_w_1:					; if com_hour=temperature_h
		stz	tem_cal_h
		lda	com_min
		cmp	temp_check_l
		beq	tem_cal_l_zero
		bcs	temp_w_1_0		;
		lda	temp_check_l		;if com_hour=temperature_h ,and com_min<temperature_l
		sec	
		sbc	com_min
		sta	tem_cal_l
		jmp	low_com
temp_w_1_0:					;if com_hour=temperature_h ,and com_min>temperature_l
		lda	com_min
		sec
		sbc	temp_check_l
		sta	tem_cal_l
		jmp	high_com
tem_cal_l_zero:
		stz	tem_cal_l
		rts						
temp_w_2:					;if com_hour>temperature_h
		lda	com_hour
		sta	temp
		lda	com_min
		cmp	temp_check_l
		bcs	temp_w_2_0
		dec	temp			;if com_hour>temperature_h ,and com_min<temperature_l
		lda	#10
		clc
		adc	com_min
temp_w_2_0:					;if com_hour>temperature_h ,and com_min>temperature_l
		sec
		sbc	temp_check_l
		sta	tem_cal_l
		lda	temp
		sec	
		sbc	temp_check_h
		sta	tem_cal_h
		jmp	high_com
low_com:		
		lda	#tem_cal_h_f_n
		and	tem_cal_f		; if on the low side, then clear flag
		sta	tem_cal_f
		rts	
high_com:		
		lda	#tem_cal_h_f
		ora	tem_cal_f		; if on the high side, then setting flag
		sta	tem_cal_f
		rts			
			
;***********************************************
;***********************************************
key_function_ret:
key_natct:
		rts
key_table:
		dw	power_k
		dw	clock_k
		dw	mode_k
		dw	speed_k
		dw	up_k
		dw	down_k
		dw	tem_cal_mode_k
		dw	key_natct	
		dw	key_natct
		dw	key_natct
		dw	key_natct
		dw	key_natct
		dw	key_natct
		dw	key_natct
		dw	key_natct
		dw	key_natct
		dw	key_natct		
		jmp	reset


;///////////////////////////////////////////////;
;						;
;	        lcd display			;
;						;
;///////////////////////////////////////////////;
lcd_display:
			
		lda	powerflag
		and	#demo_dis_f
		bne	demo_dis		; turn on display all segement
		
		lda	powerflag
		and	#power_on_f
		beq	clk_set_dis		; clock setting  only display clock setting segment when turn off
n_display:					
		jsr	mode_dis
		jsr	level_dis
		jsr	room_tem_dis
		jsr	setting_tem_dis
		jsr	clock_dis
		
		lda	clock_setting_t
		cmp	#00h
		bne	lcd_display_ret
		lda	dispflag
		and	#clk_set_end_f
		beq	clk_set_dis_0
		rts
clk_set_dis:
		jsr	clock_dis
		lda	clock_setting_t
		cmp	#00h
		bne	lcd_display_ret
		lda	dispflag
		and	#clk_set_end_f
		bne	lcd_display_ret
		jsr	lcd_off	
		rts

clk_set_dis_0:				
		stz	clock_setting_m
		lda	#hour_flash_f_n
		and	dispflag
		sta	dispflag
		lda	#min_flash_f
		and	dispflag
		sta	dispflag		; clear clock setting display flag
		lda	#clk_set_end_f		; setting end delay display
		ora	dispflag
		sta	dispflag
lcd_display_ret:
		rts
		
;-------------power on display
demo_dis:
		lda	back_light_t
		cmp	#00h
		bne	power_on_dis_ret
		lda	#demo_dis_f_n
		and	powerflag
		sta	powerflag
		
		lda	#00h
		sta	disset
		jsr	dis_ram_clr
		jsr	lcd_off
		
power_on_dis_ret:
		

⌨️ 快捷键说明

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