资讯详情

HT1621B驱动段码液晶屏参考程序——晶拓液晶屏

(1) 段码屏幕的驱动程序与数字管的静态驱动程序相同。只要我们知道如何显示基本单位,我们就可以根据基本单位编写字库表,然后编写字库表 用与(&)和或(|)这两个位运算符可以随意编写我们想要显示的数字或形状。有两种常见的驱动方案:

第一:如果单片机内部集成seg和com引脚液晶驱动模块直接由单片机驱动。

二是单片机用三种IO口跟HT1621用于通信 HT1621驱动段码屏。

这节我重点介绍第二种。HT1621有4个COM,分别是com3,com2,com1,com0。有32个SEG,分别是SEG0,SEG1….SEG31。

什么是COM,什么是SEG?用鸿哥的想法来解释,COM是横向X坐标,SEG是垂直Y坐标。X坐标和Y坐标组合成一个表格,每个网格代表一个显示点。比如HT1621,有4个COM,32个SEG,形成一个32行,每行4个点的表格,共128个点,即最多可以显示128个点,最多可以显示128个数字管。LED灯。Y轴的地址范围为0到31,因为垂直有32行。我们用一个字节来表示每行X轴上的四个点。字节有8位,高4位分别代表4点,低4位为空。比如第一行(SEG0行)的第1个(COM3)显示,第二个(COM2)显示,第三个(COM1)不要显示第四个(COM0)不要显示,然后用字节表示16进制0xc0.只要X轴的数据设置为0,就要点亮这两个点亮xc0,Y轴的数据设置为0x00,然后放入鸿哥精心研制的鸿哥。seg_display(unsigned

char col, unsigned char pag)在驱动程序中就可以了.

(2)功能要求:

在COM和SEG组成的4X第二行第三和第四两点显示在32表中。

(3) 硬件原理:

三个单片机IO口分别跟HT1621的CS,WR,DATA连接。

(4)适合源码的单片机:STC11F04E,晶振为11.0592MHz。

(5)源代码讲解如下:

#include "REG52.H"

#include "absacc.h"

#include "intrins.h"

#include "stdio.h"

#define BIAS 0X52 //这里一定要小心,上个月的一个项目在这里被卡了7天。

///必须跟随硬件电路COM匹配。一个或两个COM:0x42。3个COM:0x4A。4个COM:0x52

#define RC256 0X30

#define SYSTEN 0X02

#define SYSDIS 0X00

#define LCDON 0X06

void SendBitToHT1621(unsigned char nbit,unsigned char n);///在字节中发送N位HT在1621里,驱动程序的底部

void write_com(unsigned char cmdcode); //写命令到LCD

void init_lcd(); //--初始化LCD屏

void seg_display(unsigned char col, unsigned char pag); //显示基本单位点

void screen_clear (); ///清空屏幕内容

//补充说明:程序风格是这样的,所有输出IO后缀都是_dr,凡是输入////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////IO后缀//是_sr

sbit ht162x_data_dr=P3^1;

sbit ht162x_cs_dr=P3^6;

sbit ht162x_wr_dr=P3^0;

main()

{

init_lcd(); ///初始化液晶屏

screen_clear ()

seg_display(0x30,1); //在COM和SEG组成的4X第二行第三和第四两点显示在32表中。

while(1)

{

;

}

}

///在字节中发送N位HT在1621里,驱动程序的底部

void SendBitToHT1621(unsigned char nbit,unsigned char n)

{

unsigned char i;

for(i=0;i

{

ht162x_wr_dr=0;

if(nbit>=0x80) //判断最高位

ht162x_data_dr=1;

else

ht162x_data_dr=0;

_nop_();

_nop_();

_nop_();

ht162x_wr_dr=1;

_nop_();

_nop_();

_nop_();

nbit<<=1;

}

}

//-写命令LCD,,驱动液晶程序的一部分------------------------------

void write_com(unsigned char cmdcode)

{

ht162x_cs_dr=0; //选通HT1621

_nop_();

_nop_();

SendBitToHT1621(0x80,4);

SendBitToHT1621(cmdcode,8);

_nop_();

_nop_();

ht162x_cs_dr=1;

_nop_();

_nop_();

_nop_();

}

//*------------------初始化LCD屏--------------------------*/

void init_lcd()

{

write_com(SYSTEN); //Turn on system oscillator

write_com(RC256); //启动内部256KRC 振荡器

write_com(BIAS); // 1/3 bais . 4 duty

write_com(LCDON); //开启LCD

}

//显示本节基本单位点的核心内容。col代表X轴,X轴的数据用位表示,字节中的高4位表示。pag代表Y轴

void seg_display(unsigned char col, unsigned char pag)

{

pag<<=2;

ht162x_cs_dr=0; //选通HT1621

_nop_();

_nop_();

SendBitToHT1621(0xA0,3); ////发送写作数据模式101

SendBitToHT1621(pag,6); //发送Y轴数据

SendBitToHT1621(col,4); //发送X轴数据

ht162x_cs_dr=1;

_nop_();

_nop_();

}

//*------------------清空屏幕内容---------------*/

void screen_clear ()

{

unsigned char i;

unsigned char y=0;

for(i=0;i<32;i )

{

seg_display(0x00,y);

y=y 1;

}

}

(6)小结:

因为段码屏幕需要定制,每个屏幕的逻辑表都不一样,所以我只在这里列出核心驱动程序。以后大家都会根据项目自己编写上层应用程序,只要多用查表。(&)和或(|)这两种位运算符来处理,不难。初始化软件设置HT在配置1621参数时,应特别注意实际电路上使用了多少个参数COM,然后设置相等COM否则,应用于大段码示屏的项目时,有可能因为驱动力不够,会显示乱码。

标签: ht7327集成电路

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台