欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

he313sv1.asm

此程序为热水器控制板用,为我公司资深程序员开发.
ASM
第 1 页 / 共 4 页
字号:

display17_7:
    cp      r19,r21
	cpc     r18,r20
	brcc    display17_8

    cp      r19,r23
	cpc     r18,r22
	brcc    display17_10

	bld     SystemByte, disptaoff
	rjmp    display17_11           ; 显示TA关闭的时间

display17_8:
    cp      r21,r23
	cpc     r20,r22
	brcc    display17_10

    bld   UserTrigger,disptbon
	rjmp    display17_11            ;显示TB开启的时间

display17_10:
    bld   setbyte, disptboff

display17_11:
    lds     r18,temp_r18
	lds     r19,temp_r19
	lds     r20,temp_r20
	lds     r21,temp_r21
	lds     r22,temp_r22
	lds     r23,temp_r23
    sbrc    UserTrigger,disptaon
	rjmp    display17_3
	sbrc    UserTrigger,disptbon
	rjmp    display17_9
    sbrc    SystemByte, disptaoff
	rjmp    display17_0
	sbrc   setbyte, disptboff
    rjmp    display17_4

 
display17_5:
    sbrc    setbyte,settimerA
	rjmp    Display17_2
    sbrs    setbyte,settimerB
    rjmp    display18

display17_6:
    sbrc    runbyte,TBRun
	rjmp    display17_4
display17_9:
	cbr	r19 , (1<<LEDTimer)	
    cbr     r23 , (1<<LEDTimerOn)
	cbr 	r20 , (1<<LEDDot1)
	cbr 	r21 , (1<<LEDDot2)	

	lds 	r16 ,TBOnHourCnt
	rcall	NumberDisp
	and 	r21 , r16
	and 	r22 , r17

	lds 	r16 , TBOnMinCnt
	rcall	NumberDisp
	and     r19 , r16
	and 	r20 , r17
    rjmp    display90

display17_4:

	cbr	r20 , (1<<LEDDot1)
	cbr	r21 , (1<<LEDDot2)
		
	cbr	r19 , (1<<LEDTimer)	
    cbr     r18 , (1<<LEDTimerOff)
	lds  	r16 ,TBOffHourCnt
	rcall	NumberDisp
	and	    r21 , r16
	and	    r22 , r17

	lds	    r16 , TBOffMinCnt
	rcall	NumberDisp
	and	    r19 , r16
	and	    r20 , r17
     rjmp    display90

display17_2:
    sbrc    runbyte,TARun
	rjmp    Display17_0

display17_3:
	cbr 	r18 , (1<<LEDMountain)
    cbr     r23 , (1<<LEDTimerOn)
	cbr 	r20 , (1<<LEDDot1)
	cbr 	r21 , (1<<LEDDot2)	

	lds 	r16 ,TAOnHourCnt
	rcall	NumberDisp
	and 	r21 , r16
	and 	r22 , r17

	lds 	r16 , TAOnMinCnt
	rcall	NumberDisp
	and     r19 , r16
	and 	r20 , r17
  	rjmp    display90

Display17_0:

	cbr	r20 , (1<<LEDDot1)
	cbr	r21 , (1<<LEDDot2)	

	cbr 	r18 , (1<<LEDMountain)
    cbr     r18 , (1<<LEDTimerOff)
	lds  	r16 ,TAOffHourCnt
	rcall	NumberDisp
	and	    r21 , r16
	and	    r22 , r17

	lds	    r16 , TAOffMinCnt
	rcall	NumberDisp
	and	    r19 , r16
	and	    r20 , r17
    rjmp     display90




Display18:
    lds     r16,dispshift
	inc     r16
	sts     dispshift,r16
Display18_0:
    lds     r16,dispshift
	cpi     r16,1
    breq    display19
    cpi     r16,2
	brne    display18_00
	rjmp    display17_1
display18_00:
	cpi     r16,3
	breq    display18_1
    clr     r16
	sts     dispshift,r16
	rjmp    display18
display18_1:
	;------in temp display----
	cbr 	r23 , (1<<LEDRealTemp)
	cbr 	r18 , (1<<LEDSetTemp)
;	cbr	    r22 , (1<<LEDHeater)
	lds	    r16 , WaterTemp
	rcall	NumberDisp
	and 	r21 , r16
	and 	r22 , r17

    lds     r16,settempdefault
	sbrs    SetByte,SetSTS
	lds 	r16 , SetTemp
	rcall	NumberDisp
	and	    r19 , r16
	and 	r20 , r17
	rjmp	Display20
Display19:
	;----------in time display-------
	lds	r16 , TimeSecCnt
	cbr	r23 , (1<<LEDClock)
	sbrc	r16 , 0
	cbr	r20 , (1<<LEDDot1)
	sbrc	r16 , 0
	cbr	r21 , (1<<LEDDot2)	


	lds	r16 , TimeHourCnt
	rcall	NumberDisp
	and	r21 , r16
	and	r22 , r17


	lds	r16 , TimeMinCnt
	rcall	NumberDisp
	and	r19 , r16
	and	r20 , r17
    



Display20:
  	sbrc	SetByte , SetTimerB
	cbr	r19 , (1<<LEDTimer)	
	sbrc	SetByte , SetTimerA
	cbr	r18 , (1<<LEDMountain)
   
  ; 	sbrc	SetByte , SetTimerB
  ;  cbr     r23 , (1<<LEDTimerOn)
	 
  

  ;  sbrc	SetByte , SetTimerA
  ;  cbr     r23 , (1<<LEDTimerOn)
	 
   ;	sbrc	SetByte , SetTimerA
   ; cbr	r18 , (1<<LEDTimerOff)
;------display timer/mountain/timeron/timeroff---
;	sbrs	SetByte , SetTimerA
;	sbrc	SetByte , SetTimerB
;	rjmp	Display21
;	rjmp	Display25
Display21:
;	sbrs	RunByte , TARun
;	sbrc	RunByte , TBRun
;	rjmp	Display22
;	cbr     r23 , (1<<LEDTimerOn)
;	rjmp	Display25
Display22:
;	cbr	r18 , (1<<LEDTimerOff)
Display25:
	rjmp	Display90
;-------------------------------------------------
Display30:

	cpi	r16 , 1
	brne	Display35
	;--------Display set temp--------
	
	cbr	r23 , (1<<LEDRealTemp)

	
	lds	r16 , WaterTemp
	rcall	NumberDisp
	and	r21 , r16
	and	r22 , r17

    sbrc    BLinkbyte1,blink500ms
    cbr	   r18 , (1<<LEDSetTemp)

	sbrc    KeyByte , KeySameOn
	rjmp    Display34
	sbrs	BlinkByte1 , Blink500ms
	rjmp	Display20
Display34:
	lds	r16 , SetTemp
	rcall	NumberDisp
	and	r19 , r16
	and	r20 , r17
	rjmp	Display20	


Display35:
	cpi	r16 , 2
	brne	Display40
	;------real time hour set-------

	lds	r16 , TimeMinCnt
	rcall	NumberDisp
	and	r19 , r16
	and	r20 , r17

    sbrc    BLinkbyte1,blink500ms
    cbr	    r23 , (1<<LEDClock)

	sbrc    KeyByte , KeySameOn
    rjmp    display36
	sbrs	BlinkByte1 , Blink500ms
	rjmp	Display37
	
Display36:
	lds	r16 , TimeHourCnt
	rcall	NumberDisp
	and	r21 , r16
	and	r22 , r17

Display37:
	cbr	r20 , (1<<LEDDot1)
	cbr	r21 , (1<<LEDDot2)
	rjmp	Display90

Display40:
	cpi	r16 , 3
	brne	Display45
	;-----in real time minute set---
	lds	r16 , TimeHourCnt
	rcall	NumberDisp
	and	r21 , r16
	and	r22 , r17

    sbrc    BLinkbyte1,blink500ms
    cbr	    r23 , (1<<LEDClock)
	sbrc    KeyByte , KeySameOn
    rjmp    display41
	sbrs	BlinkByte1 , Blink500ms
	rjmp	Display37

display41:	
	lds	r16 , TimeMinCnt
	rcall	NumberDisp
	and	r19 , r16
	and	r20 , r17
	rjmp	Display37
		

Display45:
	cpi	r16 , 4
	brne	Display50
	;----------timer A on hour set-----
	lds	r16 , TAOnMinCnt
	rcall	NumberDisp
	and	r19 , r16
	and	r20 , r17

    sbrs    BLinkbyte1,blink500ms
    rjmp    display45_0
   	cbr	    r18 , (1<<LEDMountain)
	cbr 	r23 , (1<<LEDTimerOn)
display45_0:
	sbrc    KeyByte , KeySameOn
    rjmp    display46
	sbrs	BlinkByte1 , Blink500ms
	rjmp	Display47

display46:	
	lds	r16 , TAOnHourCnt
	rcall	NumberDisp
	and	r21 , r16
	and	r22 , r17

Display47:
	cbr	r20 , (1<<LEDDot1)
	cbr	r21 , (1<<LEDDot2)
	rjmp	Display90		


Display50:
	cpi	r16 , 5
	brne	Display55
	;----------timer A on minute set-----
	lds	r16 , TAOnHourCnt
	rcall	NumberDisp
	and	r21 , r16
	and	r22 , r17

    sbrs    BLinkbyte1,blink500ms
    rjmp    display51
   	cbr	    r18 , (1<<LEDMountain)
	cbr 	r23 , (1<<LEDTimerOn)
display51:
	sbrc    KeyByte , KeySameOn
    rjmp    display52
	sbrs	BlinkByte1 , Blink500ms
	rjmp	Display47

display52:	
	lds  	r16 , TAOnMinCnt
	rcall	NumberDisp
	and	    r19 , r16
	and	    r20 , r17
	rjmp	Display47


Display55:
	cpi	r16 , 6
	brne	Display60
	;----------timer A off hour set-----
	lds	r16 , TAOffMinCnt
	rcall	NumberDisp
	and	r19 , r16
	and	r20 , r17

    sbrs    BLinkbyte1,blink500ms
    rjmp    display56
   	cbr	    r18 , (1<<LEDMountain)
	cbr 	r18 , (1<<LEDTimerOff)
display56:
	sbrc    KeyByte , KeySameOn
    rjmp    display56_0
	sbrs	BlinkByte1 , Blink500ms
	rjmp	Display57

display56_0:	
	lds	    r16 , TAOffHourCnt
	rcall	NumberDisp
	and	    r21 , r16
	and	     r22 , r17

Display57:
	cbr	    r20 , (1<<LEDDot1)
	cbr	    r21 , (1<<LEDDot2)
	rjmp	Display90		


Display60:
	cpi	r16 , 7
	brne	Display65
	;----------timer A Off minute set-----
	lds	r16 , TAOffHourCnt
	rcall	NumberDisp
	and	r21 , r16
	and	r22 , r17


    sbrs    BLinkbyte1,blink500ms
    rjmp    display61
   	cbr	    r18 , (1<<LEDMountain)
	cbr 	r18 , (1<<LEDTimerOff)
display61:
	sbrc    KeyByte , KeySameOn
    rjmp    display62
	sbrs	BlinkByte1 , Blink500ms
	rjmp	Display57

display62:	
	lds	    r16 , TAOffMinCnt
	rcall	NumberDisp
	and	    r19 , r16
	and	    r20 , r17
	rjmp	Display57


Display65:
	cpi	r16 , 8
	brne	Display70
	;----------timer B on hour set-----
	lds	r16 , TBOnMinCnt
	rcall	NumberDisp
	and	r19 , r16
	and	r20 , r17

	sbrs	BlinkByte1 , Blink500ms
	rjmp	Display67
	cbr	r19 , (1<<LEDTimer)
	cbr	r23 , (1<<LEDTimerOn)	
	lds	r16 , TBOnHourCnt
	rcall	NumberDisp
	and	r21 , r16
	and	r22 , r17

Display67:
	cbr	r20 , (1<<LEDDot1)
	cbr	r21 , (1<<LEDDot2)
	rjmp	Display90		


Display70:
	cpi	r16 , 9
	brne	Display75
	;----------timer B on minute set-----
	lds	r16 , TBOnHourCnt
	rcall	NumberDisp
	and	r21 , r16
	and	r22 , r17


	sbrs	BlinkByte1 , Blink500ms
	rjmp	Display67
	cbr	r19 , (1<<LEDTimer)
	cbr	r23 , (1<<LEDTimerOn)
	lds	r16 , TBOnMinCnt
	rcall	NumberDisp
	and	r19 , r16
	and	r20 , r17
	rjmp	Display67


Display75:
	cpi	r16 , 10
	brne	Display80
	;----------timer B off hour set-----
	lds	r16 , TBOffMinCnt
	rcall	NumberDisp
	and	r19 , r16
	and	r20 , r17

	sbrs	BlinkByte1 , Blink500ms
	rjmp	Display77
	cbr	r19 , (1<<LEDTimer)
	cbr	r18 , (1<<LEDTimerOff)
	lds	r16 , TBOffHourCnt
	rcall	NumberDisp
	and	r21 , r16
	and	r22 , r17

Display77:
	cbr	r20 , (1<<LEDDot1)
	cbr	r21 , (1<<LEDDot2)
	rjmp	Display90		


Display80:
	cpi	r16 , 11
	brne	Display85
	;----------timer B Off minute set-----
	lds	r16 , TBOffHourCnt
	rcall	NumberDisp
	and	r21 , r16
	and	r22 , r17


	sbrs	BlinkByte1 , Blink500ms
	rjmp	Display77
	cbr	r19 , (1<<LEDTimer)
	cbr	r18 , (1<<LEDTimerOff)
	lds	r16 , TBOffMinCnt
	rcall	NumberDisp
	and	r19 , r16
	and	r20 , r17
	rjmp	Display77

Display85:
Display90:

	sts	DispData1 , r18
	sts	DispData2 , r19	
	sts	DispData3 , r20
	sts	DispData4 , r21		
	sts	DispData5 , r22
	sts	DispData6 , r23
	ret
;--------------------------------------------
caculator:
     cp      r17,reg5
	 brne    caculator00
	 cp      r16,reg4
	 brne    caculator00
	 clr     r17
	 ldi     r16,24
	 rjmp    caculator11
caculator00:    
     sub     r17  ,  reg5
     brcc    caculator10
	 ldi     Reg5 ,  60
     add     r17  ,  reg5
caculator10:
     sbc     r16  ,  reg4
	 brcc    caculator11
	 ldi     Reg4 ,24
     add     r16,   reg4
Caculator11:
     ret


;==================================================
LEDKeyScan:
	ser	r16
	out	LEDComPort , r16

	mov   r16 , BlinkByte0
	andi	r16 , 7
	cpi	r16 , 0
	breq	KeyScan
	cpi	r16 , 1
	breq	LED1Scan
	cpi	r16 , 2
	breq	LED2Scan
	cpi	r16 , 3
	breq	LED3Scan
	cpi	r16 , 4
	breq	LED4Scan
	cpi	r16 , 5
	breq	LED5Scan
	cpi	r16 , 6
	breq	LED6Scan

	ldi  r16, PortCIOKey
	out  DDRC , r16
	ldi  r16, PortDIOKey
	out  DDRD , r16

	ret
;-------------------------------------------
LEDSegScan:
	out	LEDSegPort1 , r16
	sbrc	r16 , 6
	sbi	LEDSegPort2 , LEDSeg7
	sbrs	r16 , 6
	cbi	LEDSegPort2 , LEDSeg7
	sbrc	r16 , 7
	sbi	LEDSegPort2 , LEDSeg8
	sbrs	r16 , 7
	cbi	LEDSegPort2 , LEDSeg8
	ret


LED1Scan:
	lds	r16 , DispData1
	rcall	LEDSegScan
	cbi	LEDComPort , LEDComLine1
	ret

LED2Scan:
	lds	r16 , DispData2
	rcall	LEDSegScan
	cbi	LEDComPort , LEDComLine2
	ret

LED3Scan:
	lds	r16 , DispData3
	rcall	LEDSegScan
	cbi	LEDComPort , LEDComLine3
	ret

LED4Scan:
	lds	r16 , DispData4
	rcall	LEDSegScan
	cbi	LEDComPort , LEDComLine4
	ret

LED5Scan:
	lds	r16 , DispData5
	rcall	LEDSegScan
	cbi	LEDComPort , LEDComLine5
	ret

LED6Scan:
	lds	r16 , DispData6
	rcall	LEDSegScan
	cbi	LEDComPort , LEDComLine6
	ret


KeyScan:

	ldi  r16, PortCIOKey
	out  DDRC , r16
	ldi  r16, PortDIOKey
	out  DDRD , r16

	rcall	Delay10us

	in	    r16 , KeyScanPort1
	andi	r16 , KeyScanMask1
	in	    r17 , KeyScanPort2
	andi	r17 , KeyScanMask2

	swap	r17
	lsl	    r17
	or   	r16 , r17

	ori	    r16 , 0b10000000
	com  	r16
	sts  	KeyPushByte , r16

	ldi  r17, PortCIOInit
	out  DDRC , r17
	ldi  r17, PortDIOInit
	out  DDRD , r17
	rcall	Delay10us

  
	tst		r16
	breq	Push_Key
 
 ;-------- have key press ----------------------------
KeyScan00:
    sbrs  keybyte,flag_keypush
    rjmp  keyscan01
    lds   r16,  keypushByte
    cpi     r16,  Keydown
	breq    keyscan01
	cpi     r16,  keyup
	breq    keyscan01
	rjmp    keyscan90
KeyScan01:
    lds   r16, KeypushByte
    lds   r17, KeyReadByte
	eor   r16, r17
	breq  KeyScan20
;=====================================================
 push_key:
    sbrs   keybyte,keypush
    rjmp   push_keyinit
    lds    r16,KeyDelayByte
	dec    r16
	sts    KeyDelayByte,r16
    breq   push_Key10
	rjmp   keyscan90
push_key10:
    clt
	bld    keybyte,keypush
	bld    keybyte,keydis
;	bld    keybyte,flag_keypush
    rjmp   Keyscan10
 push_keyinit:
    lds    r16,KeyReadByte    ;在判断键按下去的前一次键值是否是零,如果是零说明键释放过了
    breq   Keyscan10
    ldi    r16,KeyPushinit
 	sts    KeyDelayByte,r16
	set
	bld    keybyte,keypush
	rjmp   keyscan90         ;

	;-----if no key press------
KeyScan10:
	clt
	bld	KeyByte , KeyOn
	bld	KeyByte , KeySame
	bld	KeyByte , keySameOn
	bld    keybyte,flag_keypush
	lds	r16 , KeyPushByte
	sts	KeyReadByte , r16
	ldi	r16 , KeyDelayInit
	sts	KeyDelayByte , r16
	clr  r16
	sts  keycount,r16
	ret

KeyScan20:      ;press key
	lds	    r16 , KeyDelayByte
	dec	    r16
	sts	    KeyDelayByte , r16
	brne	KeyScan90
;--------------if key be readed----------------------
 key_press10:
    sbrc    keybyte,keydis
    rjmp    Keyscan_Comp
      
	ldi 	r16 , KeyDelayLong          ;first antkey
	sts 	KeyDelayByte , r16                      
    sts     keycnt,r16      
    lds     r16,keypushbyte
	sts     keyfront,r16   
    set
	bld     keybyte,keydis
	bld     keybyte,keyon
    sbrc    keybyte,keysame             ;if same key still press     
    rjmp    keyscan_press20
	set
    bld   keybyte,keysame
    rjmp    keyscan90
 keyscan_press20:
    set
	bld     keybyte,keysameon
	bld     keybyte,flag_keypush
    rjmp    keyscan90
 keyscan_comp:
    lds     r16,keypushbyte
	lds     r17,keyfront
	eor     r16,r17
	brne    keyscan90
    clt
	bld     keybyte,keydis
    rjmp     key_press10
KeyScan90:
	ret

;-------------------------------------------------
DecodeKey:
	sbrs	KeyByte , KeyOn
DecodeKey05:
	rjmp	DecodeKey98
	clt
	bld	KeyByte , keyOn
	lds	r16 , KeyReadByte

⌨️ 快捷键说明

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