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

📄 vfd.asm

📁 家用消毒柜 家用消毒柜 家用消毒柜
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;************************************
;ster program 
;crystal:3.58MHz
;MCU: PIC16C54(CF745 or MDT2005 or EM78P156 or NT66P20A)
;************************************
;	LIST 	P=16C54,F=INHX8M
;        Processor       snp1602
	chip	sn8p1602ap
//{{SONIX_CODE_OPTION
	.Code_Option	OSG		Enable
	.Code_Option	High_Clk	4M_X'tal
	.Code_Option	High_Clk/2	Disable
	.Code_Option	Security	Enable
	.Code_Option	Watch_Dog	Enable
	.Code_Option	Int_16K_RC	Always_ON
//}}SONIX_CODE_OPTION
;	include	f:\flash\sonix\user_inc\sn8p1602h.inc


flag1		equ	00h
flag2		equ	01h
flag3		equ	02h
second		equ	03h
hour		equ	04h
minute		equ	05h
Dminute		equ	06h
Dsecond		equ	07h
sumbuffer	equ	08h

sterbuffer	equ	09h
fantime		equ	0ah
fanbuffer	equ	0bh
databuffer	equ	0ch
bufferHH	equ	0dh
keybuffer	equ	0eh
counter		equ	0fh

sterbuffer1	equ	10h
keybuffercopy	equ	11h
tonetime	equ	12h
bufferH		equ	13h
bufferL		equ	14h
timer1		equ	15h
delaybuffer	equ	16h
timer		equ	17h
counter1	equ	18h
portbcopy	equ	19h
portacopy	equ	1ah
flashtime	equ	1bh
ozone		equ	1ch
accbuffer	equ	1dh
pflagbuffer	equ	1eh
flag4		equ	1fh

displaybuffer2	equ	20h
displaybuffer3	equ	21h
displaybuffer4	equ	22h
displaybuffer5	equ	23h
displaybuffer6	equ	24h
displaybuffer7	equ	25h
displaybuffer8	equ	26h
displaybuffer9	equ	27h

keycounter	equ	28h
keybuffer1	equ	29h
ledbuffer	equ	2ah
timer2		equ	2bh
Dminute_Dry	equ	2ch
keytime		equ	2dh
stertime	equ	2eh
timer3		equ	2fh
;***********
;BIT DEFINITION
;*****************

;************
CLK		EQU	P1.0		;OUTPUT	
STB		EQU	P1.1		;OUTPUT
BUZZER		EQU	P1.2		;OUTPUT
DOOR		EQU	P1.3		;INPUT

LIGHT		EQU	P2.0		;OUTPUT
STER		EQU	P2.1		;OUTPUT
DRY		EQU	P2.2		;OUTPUT
FAN		EQU	P2.3		;OUTPUT
DO		EQU	P2.4		;INPUT
DI		EQU	P2.5		;OUTPUT

;**********
F_FAN		EQU	flag1.0
F_STER		EQU	flag1.1
F_DRY		EQU	flag1.2

TONE_ENABLE	EQU	flag1.4
F_NO_DOOR	EQU	flag1.5
F_DISPLAY1	EQU	flag1.6
F_DISPLAY	EQU	flag1.7


F_STER90	EQU	flag2.2
F_STER45	EQU	flag2.3
F_DRY60		EQU	flag2.1
F_DRY30		EQU	flag2.0

F_ON_OFF	EQU	flag3.0
F_FLASH		EQU	flag3.1
F_LIGHT		EQU	flag3.2
F_KEY		EQU	flag3.3
F_FINISH	EQU	flag3.4
F_NO_TONE	EQU	flag3.6
F_MINUTE	EQU	flag3.7



F_DISPLAY_FLASH60	EQU	flag4.0
F_DISPLAY_FLASH30	EQU	flag4.1
F_DELAY			EQU	flag4.2
F_DISPLAY_FLASH		EQU	flag4.3
F_FLASH1		EQU	flag4.4
;*****************************************
KPOWER		EQU	keybuffer.6
KMINUTE		EQU	keybuffer.0
KLIGHT		EQU	keybuffer.7
KHOUR		EQU	keybuffer.1
KDRY60		EQU	keybuffer.2
KSTER90		EQU	keybuffer.4
KDRY30		EQU	keybuffer.3
KSTER45		EQU	keybuffer.5

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
	org	0x00
	jmp	Start
	org	0x08
	jmp	Interrupt
	
	org	0x10		
Interrupt:
	b0bset	FWDRST
	b0mov	accbuffer,a
	b0mov	a,PFLAG
	b0mov	pflagbuffer,a

	b0bts1	FTC0IRQ
	jmp	Interruptend
	mov	a,#131
	mov	TC0C,a
	
	b0bts1	DOOR
	jmp	Testdoor01
Testdoor:	
	b0bset	F_NO_DOOR
	b0bclr	STER
	jmp	Testdoor02
Testdoor01:
	b0bclr	F_NO_DOOR
	b0bts0	F_STER
	b0bset	STER
Testdoor02:	
	b0mov	a,keytime
	cmprs	a,#0	
	decms	keytime
	nop	
	incms	timer1
	nop
	b0mov	a,timer1
	sub	a,#20	;100ms
	b0bts1	FC
	jmp	Display01
	clr	timer1
	b0bset	F_DISPLAY
	incms	fanbuffer
	nop
	b0mov	a,fanbuffer
	sub	a,#0x03
	b0bts0	FC
	clr	fanbuffer	
Display01:	
	incms	timer2
	nop
	b0mov	a,timer2
	sub	a,#100		;400ms
	b0bts1	FC
	jmp	Display02
	clr	timer2
	incms	sterbuffer
	nop
	b0mov	a,sterbuffer
	sub	a,#0x05
	b0bts0	FC
	clr	sterbuffer
Display02:	
	incms	timer3
	nop
	b0mov	a,timer3
	sub	a,#50		;200ms
	b0bts1	FC
	jmp	Tone
	clr	timer3
	incms	sterbuffer1
	nop
	b0mov	a,sterbuffer1
	sub	a,#0x0a
	b0bts0	FC
	clr	sterbuffer1
Tone:
	b0bts0	TONE_ENABLE
	b0bset	BUZZER
	incms	tonetime
	nop
	b0mov	a,tonetime
	sub	a,#60			;240ms	
	b0bts1	FC
	jmp	Notone
	clr	tonetime
	b0bclr	BUZZER
	b0bclr	TONE_ENABLE			
Notone:			
	incms	flashtime
	nop
	b0mov	a,flashtime
	sub	a,#125
	b0bts1	FC
	jmp	Timer0ok_1_1
	clr	flashtime
	b0bts0	F_FLASH1
	jmp	Timer0ok_1
	b0bset	F_FLASH1
	jmp	Timer0ok_1_1
Timer0ok_1:
	b0bclr	F_FLASH1
Timer0ok_1_1:	
	incms	timer
	nop
	b0mov	a,timer
	sub	a,#125			;500ms
	b0bts1	FC
	jmp	Keyscan6312
	clr	timer
	b0bts0	F_FLASH
	jmp	Timer0ok_1a
	b0bset	F_FLASH
	jmp	Keyscan6312
Timer0ok_1a:
	b0bclr	F_FLASH
	b0bts1	F_DELAY
	jmp	Timer0ok_1x
	decms	delaybuffer
	jmp	Timer0ok_1x
	clr	flag4
	b0bclr	F_MINUTE
Timer0ok_1x:	
	incms	second
	nop
	b0mov	a,second
	sub	a,#60
	b0bts1	FC
	jmp	Timer0ok_2
	clr	second
	incms	minute
	nop
	b0mov	a,minute
	sub	a,#60
	b0bts1	FC
	jmp	Timer0ok_2
	clr	minute
	incms	hour	
	nop
	b0mov	a,hour
	sub	a,#12
	b0bts1	FC
	jmp	Timer0ok_2
	clr	hour
Timer0ok_2:
	b0bts1	F_ON_OFF
	jmp	Keyscan6312
	b0bts1	F_NO_DOOR
	jmp	Timer0ok_2a
	b0bts0	F_STER
	jmp	Keyscan6312
Timer0ok_2a:	
	b0mov	a,Dsecond
	cmprs	a,#0x00
	jmp	Timer0ok_2x
	jmp	Timer0ok_4
Timer0ok_2x:	
	decms	Dsecond
	nop
	jmp	Keyscan6312
Timer0ok_4:
	b0mov	a,fantime
	cmprs	a,#0xff	
	incms	fantime
	nop
	b0mov	a,stertime
	cmprs	a,#0xff	
	incms	stertime
	nop
	mov	a,#59
	b0mov	Dsecond,a
	decms	Dminute
	nop
	call	AdjDisplay
	b0mov	a,Dminute
	cmprs	a,#0xff
	jmp	Timer0ok_7
Timer0ok_5:
	b0bts1	F_STER
	jmp	Timer0ok_6
	b0mov	a,Dminute_Dry
	b0mov	Dminute,a
	clr	Dsecond
	clr	flag2
	b0bset	F_DRY60
	b0mov	a,flag2
	b0mov	ledbuffer,a
	call	Clrstatus01
	b0bset	F_DRY
	b0bset	DRY
	jmp	Keyscan6312
Timer0ok_6:
	b0bset	F_FINISH
	jmp	Interruptend
Timer0ok_7:
	b0bts0	F_STER
	jmp	Keyscan6312
	b0mov	a,Dminute
	sub	a,#30
	b0bts1	FC
	jmp	Timer0ok_8		
	b0mov	a,fantime
	sub	a,#20
	b0bts1	FC
	jmp	Keyscan6312
Timer0ok_8:	
	b0bset	FAN
	b0bset	F_FAN
;\\\\\\\\\\\\\\\		
Keyscan6312:
	b0bts1	F_DISPLAY_FLASH
	jmp	Keyscan6312_1_2
	b0bts1	F_FLASH1
	jmp	Keyscan6312_1_1
	b0mov	a,Dminute_Dry
	jmp	Keyscan6312_3_1
Keyscan6312_1_1:
	mov	a,#0
	b0mov	displaybuffer2,a
	b0mov	displaybuffer3,a
	b0mov	displaybuffer4,a
	b0mov	displaybuffer5,a	
	jmp	Keyscan6312_5
Keyscan6312_1_2:	
	b0bts0	F_DELAY
	jmp	Keyscan6312_1	
	b0bts0	F_ON_OFF
	jmp	Keyscan6312_3
Keyscan6312_1:	
	b0mov	a,hour
	cmprs	a,#0x00
	jmp	Keyscan6312_1x
	mov	a,#12
	jmp	Keyscan6312_1xx
Keyscan6312_1x:
	b0mov	a,hour
Keyscan6312_1xx:		
	call	Tobcd
	call	Toseg
	b0bts0	F_FLASH
	b0bset	bufferH.0
	mov	a,#11111110b
	and	a,bufferH
	cmprs	a,#0xee
	jmp	Keyscan6312_2x
	mov	a,#00000001b
	and	bufferH,a
Keyscan6312_2x:	
	b0mov	a,bufferH
	b0mov	displaybuffer2,a
	rrcm	bufferL
	b0mov	a,bufferL
	b0mov	displaybuffer3,a

	b0mov	a,minute
	jmp	Keyscan6312_4
Keyscan6312_3:	
	b0mov	a,Dminute
Keyscan6312_3_1:	
	call	Tobcd
	b0mov	a,bufferHH
	cmprs	a,#0x00
	jmp	Keyscan6312_3xxa
	jmp	Keyscan6312_3xx
Keyscan6312_3xxa:	
	call	Toseg
	b0mov	a,bufferH
	b0mov	displaybuffer4,a
	rrcm	bufferL
	b0mov	a,bufferL
	b0mov	displaybuffer5,a
	clr	bufferH
	b0mov	a,bufferHH
	b0mov	bufferL,a
	call	Toseg
Keyscan6312_2:
	mov	a,#0x00
	b0mov	displaybuffer2,a
	rrcm	bufferL
	b0mov	a,bufferL
	b0mov	displaybuffer3,a		
	jmp	Keyscan6312_5
Keyscan6312_3xx:	
	call	Toseg
	b0bset	bufferH.0	
	b0mov	a,Dminute
	sub	a,#10
	b0bts0	FC
	jmp	Keyscan6312_3x
	mov	a,#00000001b
	and	bufferH,a
Keyscan6312_3x:		
	b0mov	a,bufferH
	b0mov	displaybuffer2,a
	rrcm	bufferL
	b0mov	a,bufferL
	b0mov	displaybuffer3,a
	b0bts1	F_DISPLAY_FLASH
	jmp	Keyscan6312_3x_1
	b0bts0	F_FLASH1
	b0bset	displaybuffer2.0
	mov	a,#0
	jmp	Keyscan6312_4
Keyscan6312_3x_1:	
	b0mov	a,Dsecond
Keyscan6312_4:	
	call	Tobcd
	call	Toseg
	b0mov	a,bufferH
	b0mov	displaybuffer4,a
	rrcm	bufferL
	b0mov	a,bufferL
	b0mov	displaybuffer5,a
			
Keyscan6312_5:
;===============================
	clr	bufferH
	clr	bufferL
	b0bts1	F_STER
	jmp	Keyscan6312_6
	b0mov	a,stertime
	sub	a,#2
	b0bts1	FC
	jmp	Keyscan6312_5_1
	clr	stertime
	b0mov	a,ozone
	sub	a,#7
	b0bts1	FC
	incms	ozone
Keyscan6312_5_1:
	b0mov	Y,#StertableL$M
	b0mov	Z,#StertableL$L
	b0mov	a,sterbuffer
	add	Z,a
	movc
	b0mov	bufferH,a
	b0mov	Y,#StertableH$M
	b0mov	Z,#StertableH$L
	b0mov	a,sterbuffer1
	add	Z,a
	movc	
	jmp	Keyscan6312_6_2	
;;===================
Keyscan6312_6:	
	clr	bufferL
	clr	bufferH
	b0bts1	F_DRY
	jmp	Keyscan6312_6_3
	b0mov	a,ozone
	b0bts0	FZ
	jmp	Keyscan6312_6_3	
	b0mov	a,stertime
	sub	a,#4
	b0bts1	FC
	jmp	Keyscan6312_6_1
	clr	stertime
	decms	ozone
Keyscan6312_6_1:
	mov	a,#0x1f	;00011111b
	b0mov	bufferH,a
	b0mov	Y,#Stertable$M
	b0mov	Z,#Stertable$L
	b0mov	a,ozone
	add	Z,a
	movc		
Keyscan6312_6_2:	
	b0mov	databuffer,a
	b0mov	bufferL,a
	mov	a,#000000111b
	and	databuffer,a
	swapm	databuffer
	b0bclr	FC
	rlcm	databuffer
	b0mov	a,databuffer
	or	bufferH,a
	rrcm	bufferL
	rrcm	bufferL
	rrcm	bufferL
	mov	a,#11110000b
	or	bufferL,a
	b0bts1	F_DRY
	jmp	Keyscan6312_6_3
	b0bclr	bufferL.5
	b0bclr	bufferL.6
Keyscan6312_6_3:
	b0mov	a,bufferH
	b0mov	displaybuffer6,a
	b0mov	a,bufferL
	b0mov	displaybuffer7,a
	
	clr	bufferH
	clr	bufferL
	b0bts1	F_DRY
	jmp	Keyscan6312_7	
	mov	a,#0x70
	b0mov	bufferL,a
	b0bts0	F_FLASH
	b0bclr	bufferL.5
Keyscan6312_7:	
	b0bts1	F_LIGHT
	jmp	Keyscan6312_8
	mov	a,#00001110b
	or	bufferL,a
Keyscan6312_8:
	b0bts1	F_FAN
	jmp	Keyscan6312_11
	b0bset	bufferL.0
	b0mov	a,fanbuffer
	cmprs	a,#0x00
	jmp	Keyscan6312_9
	b0bset	bufferH.7
	jmp	Keyscan6312_11
Keyscan6312_9:	
	b0bts1	fanbuffer.0
	jmp	Keyscan6312_10
	b0bset	bufferH.6
	jmp	Keyscan6312_11
Keyscan6312_10:
	b0bset	bufferH.5
Keyscan6312_11:	
	b0mov	a,bufferH
	b0mov	displaybuffer8,a
	b0mov	a,bufferL
	b0mov	displaybuffer9,a
Setled:
	b0bclr	STB	
	mov	a,#01000001b		;sets led port	
	call	Pt6312writ
	b0bts1	F_ON_OFF
	jmp	Setled01
	b0mov	a,ledbuffer
	jmp	Setled02
Setled01:
	mov	a,#0x00	
Setled02:
	call	Pt6312writ
	b0bset	STB	
Readkey:
	b0bclr	STB
	mov	a,#01000010b
	call	Pt6312writ
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	call	Pt6312read
	b0mov	a,databuffer
	b0mov	keybuffer,a
	call	Pt6312read
	swap	databuffer
	or	keybuffer,a
	b0bset	STB
	b0mov	a,keybuffer1
	cmprs	a,keybuffer
	jmp	Readkey01
	incms	keycounter
	nop
	b0mov	a,keycounter
	sub	a,#10
	b0bts1	FC
	jmp	Interruptend
	jmp	Readkeyend
Readkey01:
	clr	keycounter
	b0mov	a,keybuffer
	b0mov	keybuffer1,a
	jmp	Interruptend	
Readkeyend:
	clr	counter1		;keycounter
	b0mov	a,keybuffer
	b0mov	databuffer,a

⌨️ 快捷键说明

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