📄 vfd.asm
字号:
;************************************
;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 + -