HT1621实例测试

HT1621是一32SEG4COMLCD驱动,外部接线非常的简,TH1621使用手,MCU的接线也非常的简,一般只4线,加上电2线,LCM到主板的连线仅6,HT1621常用于一些显示内容不太大的产,DVD,CD,收音,洗衣,电饭煲等家用电器产品.

TH编程的要点:

1要撑握好时序,TH1621使用手册9Timing Diagrams

2HT1621的初始,TH1621使用手册12ID 100的命,差不多要将所100的命令全部定义过一次

3显示目标COM线SEG线的对应关,TH16216位二进制数来表示地0-31(SEG0-SEG31),4位二进制数来表示各个地址上的数(COM0-COM1)来点亮各COMSEG对应的,TH1621使用手册7RAM Mapping

下面是一个实,只是实现了全显,全部不显,点亮了部分图,如果要点更多的图,则照着修改即可

;===============================================

steppin equ p3.2;步进设置,用于控制显示进程

_cs equ p3.0

_rd equ p3.3

_wr equ p3.4

datapin equ p3.5;MCUHT1621的连接口

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 datapin ;将各个脚定义为高电平

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; seg0com1对应的图案,前面为地址,后面为数据,下同

db 00h,00h;不点亮

db 00h,01h; seg0com0对应的图案

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 01h,02h,03h,04h,05h,08h,18h,29h,80h

;--------------------------------------------------------

 

;----------------------------写入地---------------------------

writea:;请参考时序图来看此程式

mov r5,#6;

mov a,dispa

rl a

rl a

writea0:

clr _wr

rlc a

mov datapin,c

setb _wr

djnz r5,writea0

ret

;-----------------------------------------------------

 

;---------------------------写入数--------------------------

writed:;请参考时序图来看此程式

mov r5,#4

 

mov a,dispd

writed0:

clr _wr

rrc a

mov datapin,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 datapin,c

setb _wr

djnz r5,writen0

ret

;-------------------------------------------------------

;---------------------------写入命令代-------------------------

writec:;请参考时序图来看此程,HT1621的格式是9个操作数,最后的一个是没有用的

mov r5,#9

mov a,comcode

writec0:

clr _wr

rlc a

mov datapin,c

setb _wr

djnz r5,writec0

ret

;-----------------------------------------------------------

end

黑白液晶屏

LCD驱动