📄 ht1621.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 + -