| 首页 | 颜色分类LCD段码屏 | 类型分类段码屏 | 行业分类段码屏 | 段码驱动 | 段码屏是什么 | 联系我们 | |
您当前位置 -> 段码驱动 |
HT1621实例测试 发布时间:2021年4月26日 10时40分
HT1621是一个32SEG和4COM的LCD驱动器,外部接线非常的简单,详见TH1621使用手册,与MCU的接线也非常的简单,一般只用4条线,加上电源2条线,LCM到主板的连线仅有6条,HT1621常用于一些显示内容不太大的产品,如DVD,CD,收音机,洗衣机,电饭煲等家用电器产品上. TH编程的要点是: 1要撑握好时序图,见TH1621使用手册第9页Timing Diagrams 2对HT1621的初始化,见TH1621使用手册第12页ID 100的命令,差不多要将所有100的命令全部定义过一次 3显示目标与COM线和SEG线的对应关系,TH1621用6位二进制数来表示地址0-31(对应SEG0-SEG31),用4位二进制数来表示各个地址上的数据(对应COM0-COM1)来点亮各个COM与SEG对应的点,见TH1621使用手册第7页RAM Mapping 下面是一个实例,只是实现了全显示,全部不显示,点亮了部分图案,如果要点更多的图案,则照着修改即可 ;=============================================== steppin equ p3.2;步进设置,用于控制显示进程 _cs equ p3.0 _rd equ p3.3 _wr equ p3.4 datapin equ p3.5;定义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 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;点亮 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 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 |
|