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

📄 heat.asm

📁 带玻璃显示
💻 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 + -