📄 heat.asm
字号:
Chip SN8P2714
.NoList
includeStd macro1.h
includestd macro2.h
includestd macro3.h
includestd sn8p2x_ice.h
;Chip SN8P2714
.List
.Data
AccBuf ds 1
PflagBuf ds 1
DataBuf0 ds 1
DataBuf1 ds 1
DataNewData ds 1
DataBufData ds 1
DataOldData ds 1
DataChaData ds 1
HT1621RAM:
LCDRAM00 ds 1
LCDRAM01 ds 1
LCDRAM02 ds 1
LCDRAM03 ds 1
LCDRAM10 ds 1
LCDRAM11 ds 1
LCDRAM12 ds 1
LCDRAM13 ds 1
LCDRAM20 ds 1
LCDRAM21 ds 1
LCDRAM22 ds 1
LCDRAM23 ds 1
LCDRAM30 ds 1
LCDRAM31 ds 1
LCDRAM32 ds 1
LCDRAM33 ds 1
SendDataBuf ds 1 ;需写入HT1621的数据
BitCount ds 1 ;写入HT1621位计数器
DataCount ds 1 ;写入HT1621数据计数器
;-------------search2--------------------
head ds 1
tail ds 1
now ds 1
nowbuf ds 1
ad_buf1 ds 1
ad_buf0 ds 1
ad_Lastbuf1 ds 1
ad_Lastbuf0 ds 1
;===============================
r0 ds 1
r1 ds 1
r2 ds 1
r3 ds 1
r4 ds 1
r5 ds 1
r6 ds 1
r7 ds 1
WK00 ds 1
WK01 ds 1
WK02 ds 1
WK03 ds 1
WK04 ds 1
WK05 ds 1
WK06 ds 1
WK07 ds 1
WK08 ds 1
;
;-----------------------------
AD_MAX_HIG equ 57h;027h
AD_MAX_LOW equ 58h;10h
AD_MIN_HIG equ 03h
AD_MIN_LOW equ 0e8h
AD_CNT_MAX equ 60;20
C_50MS equ 12
C_250 equ 250
C_60 equ 60
C_60_1h equ 60
C_setHour equ 12
C_SendCnt32 equ 32
;===============Constant Define
command_mode equ 10000000b ;命令模式码:100
write_mode equ 10100000b ;写模式码 :101
read_mode equ 11000000b ;读模式码 :110
rmw_mode equ 10100000b ;读写模式码:101
mode_length_setup equ 3 ;模式码长度
data_length_setup equ 16
bit_length_setup equ 9 ;命令数据位长度
init_commamd_setup equ 5 ;初始化命令数
addr_length_setup equ 6 ;HT1621内存地址长度
start_addr equ 0 ;写入HT1621的首地址
PTempIncKey equ P5.3
PTempDecKey equ P5.2
PTimeIncKey equ P5.1
PTimeDecKey equ P5.0
PPowerKey equ P0.0
PHeatKey equ P0.1
PRedKey equ P0.2
PRedLED equ P4.0
PGreLED equ P4.1
PCs equ P2.0
PWr equ P2.1
PData equ P2.2
PRedBack equ P4.4
PBluBack equ P4.5
PBuzzer equ P4.3
PHeat equ P4.2
PRed equ P4.6
;===============Program Area============
.Code
org 0
jmp Reset
org 8
jmp Timer0Int
org 10
ht1621_table: ;HT1621初始化参数表
dw 0000001100000001b ;LCD ON;SYS EN
dw 0010100100010100b ;4COM 1/3BIAS;XT32K
dw 0000011000000101b ;TIMER EN;WDT DIS
dw 0000100001000000b ;TONE ON;TONE 4K
dw 1000100010100000b ;IRQ EN ;F1
Reset:
mov a,#07fh
mov stkp,a
clr pflag
mov a,#00h
mov oscm,a
CClrRAM:
clr y
mov a,#0x7f
b0mov z,a
ClrRAMLoop:
clr @yz
decms z
jmp ClrRAMLoop
clr @yz
CarryCheckData:
mov a,#CCheckData0
mov CheckData0,a
mov a,#CCheckData1
mov CheckData1,a
mov a,#CCheckData2
mov CheckData2,a
InitPort:
mov a,#0
mov P0m,a
mov P2m,a
mov P4m,a
mov P5m,a
mov a,#0ffh
mov P0ur,a
mov P2ur,a
mov P4ur,a
mov P5ur,a
bset PRedLEDM
bset PGreLEDM
bset PRedBackM
bset PBluBackM
bset PBuzzerM
bset PHeatM
bset PDataM
bset PRedM
bset PCsM
bset PWrM
bclr PRedLED
bclr PGreLED
bclr PRedBack
bclr PBluBack
bclr PBuzzer
bclr PHeat
bclr PData
bclr PRed
bclr PCs
bclr PWr
InitTimer:
InitData:
MainLoop:
@rst_wdt
call KeyCheck
call Buzzer
call Ht1621
jmp MainLoop
;*************
;-------------------------------------------------------
; HT1621驱动
;-------------------------------------------------------
Ht1621:
data_flash:
bclr PCs
mov a,#write_mode ;发送写模式码
mov SendDataBuf,a
mov a,#mode_length_setup
mov BitCount,a
call SendData
clr SendDataBuf ;发送首地址
mov a,#addr_length_setup
mov BitCount,a
call SendData
mov a,#data_length_setup
mov DataCount,a
mov a,#HT1621RAM$m ;取得HT1621映射内存表头地址
mov y,a
mov a,#HT1621RAM$l
mov z,a
data_loop:
mov a,@yz ;查表,依次发送数据
mov SendDataBuf,a
mov a,#8
mov BitCount,a
jb0 motor_alarm_flag,@f
clr SendDataBuf
cjne_ DataCount,#14,@f
bset SendDataBuf.5
bset SendDataBuf.6
bset SendDataBuf.7
@@:
jb0 leak_alarm_flag,@f
b0bts1 motor_alarm_flag
clr SendDataBuf
cjne_ DataCount,#14,@f
bset SendDataBuf.4
bset SendDataBuf.7
@@:
call SendData
decms DataCount
jmp data_goon
jmp data_over
data_goon:
incms z
nop
jmp data_loop
data_over:
b0bset PCs
ht1621_drive_end:
ret
SendData:
SendDataLoop:
call Delay5us
bclr PWr
bclr PData
b0bts1 SendDataBuf.7
jmp $+2
bset PData
rlcm SendDataBuf
bset PWr
decms BitCount
jmp SendDataLoop
SendDataEnd:
ret
Delay5us:
nop
nop
nop
nop
Delay5usEnd:
ret
;-------------------------------------------------------
; HT1621初始化
;-------------------------------------------------------
InitHt1621:
call SendCommand
mov a,#init_commamd_setup
mov DataCount,a
mov a,#ht1621_table$m ;取得初始化码表头地址
mov y,a
mov a,#ht1621_table$l
mov z,a
InitHt1621Loop:
movc ;查表,依次发送初始化命令
mov SendDataBuf,a ;一次查到两个初始化命令
mov a,#bit_length_setup
mov BitCount,a
call SendData ;发送第几个初始化命令
mov a,r
mov SendDataBuf,a
mov a,#bit_length_setup
mov BitCount,a
call SendData ;发送偶数个初始化命令
decms DataCount
jmp InitLoop
jmp InitHt1621End
InitLoop:
incms z ;未发完初始化命令,指针继续移动
nop
jmp InitHt1621Loop
InitHt1621End:
bset PCs ;初始化全部完成
ret
SendCommand:
bclr PCs
mov a,#command_mode ;发送命令模式码
mov SendDataBuf,a
mov a,#mode_length_setup
mov BitCount,a
call SendData
SendCommEndEnd:
ret
;-------------------------------------------------------
; 刷新全部LCD映身RAM
;-------------------------------------------------------
flash_lcd_all:
mov a,#HT1621RAM$m ;取得HT1621映射内存表头地址
mov y,a
mov a,#HT1621RAM$l
mov z,a
mov a,#16
mov DataCount,a
flash_loop:
mov a,#00h
b0bts1 power_on_flag
mov a,#0ffh
mov @yz,a ;查表,依次发送数据
decms DataCount
jmp flash_goon
jmp flash_lcd_all_end
flash_goon:
incms z
nop
jmp flash_loop
flash_lcd_all_end:
ret
;-------------------------------------------------------
; 刷新全部LCD初始化点RAM
;-------------------------------------------------------
flash_lcd_point:
mov_ LCDRAM31,#0fah
mov LCDRAM32,a
mov LCDRAM33,a
mov_ LCDRAM30,#0Ah
mov_ LCDRAM12,#0fh
flash_lcd_point_end:
ret
;*************
KeyCheck:
b2b PPowerKey KeyNewData.0
b2b PRedKey KeyNewData.1
b2b PHeatKey KeyNewData.2
b2b PTempIncKey KeyNewData.3
b2b PTempDecKey KeyNewData.4
b2b PTimeIncKey KeyNewData.5
b2b PTimeDecKey KeyNewData.6
bset KeyNewData.7
mov a,KeyNewData
xor a,#0ffh
mov KeyNewData,a
KeyNewCmpeOld:
mov a,KeyNewData
cmprs a,KeyOldData
jmp KeyNewCmpeBuf
clr KeyDelayTime
jmp KeyCheckEnd
KeyNewCmpeBuf:
mov a,KeyNewData
cmprs a,KeyBufData
jmp CarryNewToBuf
DecKeyDelayTime:
decms KeyDelayTime
jmp KeyCheckEnd
mov a,#12
mov KeyDelayTime,a
mov a,KeyOldData
xor a,#0ffh
and KeyBufData
mov KeyChaData
mov a,KeyNewData
mov KeyOldData,a
b0bts1 KeyChaData.0
call KeyPower
b0bts1 KeyChaData.1
call KeyRed
b0bts1 KeyChaData.2
call KeyHeat
b0bts1 KeyChaData.3
call KeyTempInc
b0bts1 KeyChaData.4
call KeyTempDec
b0bts1 KeyChaData.5
call KeyTimeInc
b0bts1 KeyChaData.6
call KeyTimeDec
jmp KeyCheckEnd
CarryNewToBuf:
mov a,KeyNewData
mov KeyBufData,a
mov a,#12
mov KeyDelayTime,a
jmp KeyCheckEnd
KeyPower:
nop
nop
ret
KeyHeat:
nop
nop
ret5
KeyRed:
nop
nop
ret
KeyTempInc:
nop
nop
ret
KeyTempDec:
nop
nop
ret
KeyTimeInc:
nop
nop
ret
KeyTimeDec:
nop
nop
ret
;*************
Buzzer:
mov a,BuzzerTime
cmprs a,#0
jmp DecBuzzerTime
clr BuzzerTime
bclr PBuzzer
jmp BuzzerEnd
DecBuzzerTime:
decms BuzzerTime
jmp SetBuzzer
clr BuzzerTime
bclr PBuzzer
jmp BuzzerEnd
SetBuzzer:
bset PBuzzer
jmp BuzzerEnd
BuzzerEnd:
ret
;-------
InitBuzzerTime:
mov a,#75
mov BuzzerTime,a
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -