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

📄 ht1621.asm

📁 ELAN IR接收
💻 ASM
字号:
include "HT1621.inc"
include "chip.inc"

public	delay_4us, lcd_sendcomm, Panel_init, lcd_wr_data
public  set_lcd_light, clear_lcd_light, test_lcd_light, output_tone
extern  delayX64us, delay_long

		org	600
delay_4us:	PROC
		mov	a,	@0x18
		mov	delay_4, a
	do_delay_4us:
		djz	delay_4
		jmp	do_delay_4us
		ret
		ENDP

lcd_send_one:	PROC
		bc	PORT5,	LCD_WT
		call	delay_4us
		bs	PORT6,	LCD_DATA
		call	delay_4us
		bs	PORT5,	LCD_WT
		call	delay_4us
		ret
		ENDP

lcd_send_zero:	PROC
		bc	PORT5,	LCD_WT
		call	delay_4us
		bc	PORT6,	LCD_DATA
		call	delay_4us
		bs	PORT5,	LCD_WT
		call	delay_4us
		ret
		ENDP		

lcd_sendcomm:	PROC
		call	delay_4us
		bc	PORT6,	LCD_CS		;set lcd cs to low, start trasfer 
		
		;发送高4位				
		mov	a,	@0x04			;高字节有7个位要发送
		mov	ht1621_temp, a			;ht1621_temp用于循环计数
	send_high_4:	
		jbs	ht1621_comm_high, 0x03	;判断第4为是否为1
		jmp	send_high_zero		;不为1,发送0
		jmp	send_high_one		;为1,发送1
	lcd_send_high:	
		;call	delay_4us
		rlc	ht1621_comm_high	;左移
		djz	ht1621_temp		;循环4次
		jmp	send_high_4
		
		;发送第8位
		mov	a,	@0x08			;低字节有8个位要发送
		mov	ht1621_temp, a			;ht1621_temp用于循环计数
	send_low_8:
		jbs	ht1621_comm_low, 0x07	;判断第7为是否为1
		jmp	send_low_zero		;不为1,发送0
		jmp	send_low_one		;为1,发送1
	lcd_send_low:	
		;call	delay_4us
		rlc	ht1621_comm_low		;左移
		djz	ht1621_temp		;循环8次
		jmp	send_low_8		
		
		jmp	end_lcd_comm

		;send opration
	send_high_one:
		call	lcd_send_one
		jmp	lcd_send_high
	send_high_zero:
		call	lcd_send_zero
		jmp	lcd_send_high
		
	send_low_one:	
		call	lcd_send_one
		jmp	lcd_send_low
	send_low_zero:	
		call	lcd_send_zero
		jmp	lcd_send_low
		
	end_lcd_comm:
		
		bs	PORT5,	LCD_WT		;set lcd wt to high, transfer end
		bs	PORT6,	LCD_DATA	;set lcd data to high, transfer end
		bs	PORT6, 	LCD_CS		;set lcd cs to high, transfer end
		call	delay_4us
		ret
		ENDP

lcd_wr_data:	PROC
		call	delay_4us
		bc	PORT6,	LCD_CS

		;send wr id
		call	lcd_send_one
		call	lcd_send_zero
		call	lcd_send_one

		;send addr
		mov	a,	@0x06
		mov	ht1621_temp, a
	wr_addr_6:
		jbs	ht1621_wr_addr,	0x05
		jmp	wr_addr_zero
		jmp	wr_addr_one
	wr_addr:
		rlc	ht1621_wr_addr
		djz	ht1621_temp
		jmp	wr_addr_6

		;发送4为数据
		mov	a,	@0x04
		mov	ht1621_temp, a
	wr_data_4:
		jbs	ht1621_wr_data, 0x00
		jmp	wr_data_zero
		jmp	wr_data_one
	wr_data:
		rrc	ht1621_wr_data
		djz	ht1621_temp
		jmp	wr_data_4

		jmp	end_lcd_wr
		
	wr_addr_zero:
		call	lcd_send_zero
		jmp	wr_addr
	wr_addr_one:
		call	lcd_send_one
		jmp	wr_addr

	wr_data_zero:
		call	lcd_send_zero
		jmp	wr_data
	wr_data_one:
		call	lcd_send_one
		jmp	wr_data		
		
	end_lcd_wr:
		bs	PORT5,	LCD_WT		;set lcd wt to high, transfer end
		bs	PORT6,	LCD_DATA	;set lcd data to high, transfer end
		bs	PORT6, 	LCD_CS		;set lcd cs to high, transfer end
		call	delay_4us
		ret
		ENDP

Panel_init:	PROC
		;panel sys en		
		mov	a,	@lcd_sys_en_high
		mov	ht1621_comm_high, a
		mov	a,	@lcd_sys_en_low
		mov	ht1621_comm_low,  a
		call	lcd_sendcomm
		
		call	delayX64us
		
		;panel lcd 1/3 bias 4 commons option.
		mov	a,	@lcd_BIAS3_4C_high
		mov	ht1621_comm_high, a
		mov	a,	@lcd_BIAS3_4C_low
		mov	ht1621_comm_low, a
		call	lcd_sendcomm

		call	delayX64us
		
		;panel lcd on
		mov	a,	@lcd_on_high
		mov	ht1621_comm_high, a
		mov	a,	@lcd_on_low
		mov	ht1621_comm_low, a
		call	lcd_sendcomm

		call	delayX64us
		
		;panel timer off
		mov	a,	@lcd_tmr_off_high
		mov	ht1621_comm_high, a
		mov	a,	@lcd_tmr_off_low
		mov	ht1621_comm_low, a
		call	lcd_sendcomm

		call	delayX64us
		
		;panel wdt off
		mov	a,	@lcd_wdt_off_high
		mov	ht1621_comm_high, a
		mov	a,	@lcd_wdt_off_low
		mov	ht1621_comm_low, a
		call	lcd_sendcomm

		call	delayX64us

		;panel tone 4k
		mov	a,	@lcd_tone_4k_high
		mov	ht1621_comm_high, a
		mov	a,	@lcd_tone_4k_low
		mov	ht1621_comm_low, a
		call	lcd_sendcomm
		
		call	delayX64us
		ret
		ENDP

set_lcd_light:	PROC
		mov	a, 	@0x20
		mov	ht1621_val, a
	fill_all:	
		mov	a,	ht1621_val
		mov	ht1621_wr_addr, a
		mov	a,	@0xff
		mov	ht1621_wr_data, a
		call	lcd_wr_data
		djz	ht1621_val
		jmp	fill_all
		ret
		ENDP

clear_lcd_light:PROC
		mov	a, 	@0x20
		mov	ht1621_val, a
	clear_all:	
		mov	a,	ht1621_val
		mov	ht1621_wr_addr, a
		mov	a,	@0x00
		mov	ht1621_wr_data, a
		call	lcd_wr_data
		djz	ht1621_val
		jmp	clear_all
		ret
		ENDP

test_lcd_light: PROC
		mov	a, 	@0x00
		mov	ht1621_wr_addr, a
		mov	a,	@0x02
		mov	ht1621_wr_data, a
		call	lcd_wr_data
		ret
		ENDP

output_tone:	PROC
		disi
		;panel tone on
		mov	a,	@lcd_tone_on_high
		mov	ht1621_comm_high, a
		mov	a,	@lcd_tone_on_low
		mov	ht1621_comm_low, a
		call	lcd_sendcomm

		call	delay_long
		call	delay_long
		call	delay_long

		;panel tone off
		mov	a,	@lcd_tone_off_high
		mov	ht1621_comm_high, a
		mov	a,	@lcd_tone_off_low
		mov	ht1621_comm_low, a
		call	lcd_sendcomm

		call	delay_long
		call	delay_long
		call	delay_long

		;panel tone on
		mov	a,	@lcd_tone_on_high
		mov	ht1621_comm_high, a
		mov	a,	@lcd_tone_on_low
		mov	ht1621_comm_low, a
		call	lcd_sendcomm

		call	delay_long
		call	delay_long
		call	delay_long

		;panel tone off
		mov	a,	@lcd_tone_off_high
		mov	ht1621_comm_high, a
		mov	a,	@lcd_tone_off_low
		mov	ht1621_comm_low, a
		call	lcd_sendcomm		

		call	delayX64us
		clr	rec_is
		eni
		ret
		ENDP

⌨️ 快捷键说明

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