📄 ht1621.asm
字号:
;===============================================
;TH1621
;时间:06.11.18
;编程:锦扬科技 黄春华
;=================================================
steppin equ p1.5 ;步进设置,用于控制显示进程
_cs equ p1.3
_rd equ p1.2
_wr equ p1.1
data_pin equ p1.0 ;定义MCU与HT1621的连接口
dispd equ 40h ;放置显示的数据,com0-com3
dispa equ 41h ;放置显示的地址,seg0-seg31
comname equ 42h ;放置命令ID码
comcode equ 43h ;放置命令操作数(command code)
;------------------------------------
org 00h
jmp start
;-----------------------
org 30h
start:
setb _cs
setb _rd
setb _wr
setb data_pin ;将各个脚定义为高电平
call initial ;调用初始化程式,设置好TH1621使用的参数,否则可能没法正常显示
;----------------------------------
test: ; 一个测试的例子
test1: ;这是一个全显示的子程式
mov dispa,#00h ; 将显示的地址设定为0,即选择SEG0这条线
mov dispd,#0ffh ; 将显的数据全部设定为1,事实上只占用了其中的4个,即com0-com3
;全为1
test11:
call writedisp ;调用显示程式
inc dispa ;将地址加1,如果原来为seg0,则现在为seg1被选择
mov a,dispa
cjne a,#32,test11 ;是否所有的seg都被选择完
call delay
call delay
; call step
test100: ;这是一个全不显示的子程式,与上在的比较,仅给DISPD中的值不同
mov dispa,#00h
mov dispd,#00h
test1001:
call writedisp
inc dispa
mov a,dispa
cjne a,#32,test1001
call delay
call delay
; call step
test2: ;这是一个显示一部分的子程式
mov r3,#22 ;将要显示22个图案,实际上只有11个(点亮,不点亮各1)
mov dptr,#address
test21:
mov a,#00h
movc a,@a+dptr
mov dispa,a
inc dptr
mov a,#00h
movc a,@a+dptr
mov dispd,a
inc dptr
call writedisp
call delay
call delay
djnz r3,test21
address:
db 00h,02h;点亮 seg0与com1对应的图案,前面为地址,后面为数据,下同
db 00h,00h;不点亮
db 00h,01h;点亮 seg0与com0对应的图案
db 00h,00h
db 01h,01h
db 01h,00h
db 01h,02h
db 01h,00h
db 02h,02h
db 02h,00h
db 02h,01h
db 02h,00h
db 03h,01h
db 03h,00h
db 03h,02h
db 03h,00h
db 04h,02h
db 04h,00h
db 04h,01h
db 04h,00h
db 05h,01h
db 05h,00h
jmp $
;--------------------------------
writedisp:
mov comname,#00000101b;write data command
clr _cs ;从时序图中可看出,要/CS为低电平才可对HT1621进行操作
call writen
call writea
call writed
setb _cs
ret
;---------------------------------
delay:
mov r7,#200
delay1:
mov r6,#248
djnz r6,$
djnz r7,delay1
ret
;--------------------------------------
step:
jb steppin,$
call delay
jb steppin,step
;jnb steppin,$
ret
;------------------------------------------------
initial:
clr _cs
mov comname,#00000100b ;command
call writen
mov r4,#9
mov dptr,#initaltab
initial1:
mov a,#00h
movc a,@a+dptr
mov comcode,a
call writec
inc dptr
djnz r4,initial1
setb _cs
ret
initaltab:
db 0e3h ;NORMAL
db 01h ;;SYS ENABLE
db 02h ;4com;1/3bias
db 03h ;;LCD On
db 04h ;Disable time base output
db 05h ;Disable WDT time-out flag output
db 08h ;Turn off tone outputs
db 18h ;System clock source, on-chip RC oscillator
db 29h ;1/3bias 4commons
db 80h ;Disable IRQ output
;------写入地址---------------------------
writea:;请参考时序图来看此程式
mov r5,#6;
mov a,dispa
rl a
rl a
writea0:
clr _wr
rlc a
mov data_pin,c
setb _wr
djnz r5,writea0
ret
;---------------------------写入数据--------------------------
writed: ;请参考时序图来看此程式
mov r5,#4
mov a,dispd
writed0:
clr _wr
rrc a
mov data_pin,c
setb _wr
djnz r5,writed0
ret
;----------写入命令ID-----------------
writen: ;请参考时序图来看此程式
mov r5,#3
mov a,comname
rlc a
rlc a
rlc a
rlc a
rlc a
writen0:
clr _wr
rlc a
mov data_pin,c
setb _wr
djnz r5,writen0
ret
;---------写入命令代码-------------------------
writec: ;请参考时序图来看此程式,注意HT1621的格式是要9个操作数,最后的一个是没有用的
mov r5,#9
mov a,comcode
writec0:
clr _wr
rlc a
mov data_pin,c
setb _wr
djnz r5,writec0
ret
;-----------------------------------------------------------
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -