HT1621驱动段码液晶屏
HT1623 QFP100液晶显示驱动IC

HT1623是专门为I / O型微控制器用于扩大显示功能的外围设备。
该设备的显示段是384模式(48X8)。
HT1623 LQFP100代理.它也支持串行接口,蜂鸣器响,看门狗定时器或时基定时器功能。
该HT1623是一个内存映射和多功能的LCD控制器。
该HT1623的软件配置特性使它适用于多种LCD应用,包括LCD模块和显示子系统。
只有三根线所需要的主机控制器和HT1623之间的接口。
该HT162X 系列有多种适应不同的应用产品。
HT1623产品特点★工作电压:2.7V~5.2V★内置RC振荡器★外部32.768kHz晶体或32kHz的频率源输入★1/4 bias,1/8 duty,帧频为64Hz★最大支持48X8模式,8commons,48segments★内置的内部电阻型偏置发生器★3线串行接口★8种时基/ WDT选择★时基或WDT溢出输出★内置LCD显示RAM★读/写地址自动递增★两个选择蜂鸣器频率(2kHz/4kHz)★断电命令降低功耗★软件配置功能★数据模式和命令模式指令★三种数据访问模式★VLCD引脚调整LCD工作电压★HT1623:100引脚LQFP封装 QFP100封装 DICE/裸片(下一页附图片)基本说明1623是一个外围设备专门设计的I / O型微控制器用于扩大显示功能。
该装置的显示部分384模式(48x8)。
它也支持串行接口,蜂鸣器响,看门狗定时器或时基定时器功能。
HT1623是一个内存映射和多功能的LCD 控制器。
在1623软件配置特征使它适合于多种LCD应用包括液晶显示模块和显示子系统。
只有三线的主机控制器和HT1623之间的接口要求。
该HT162X系列多种相匹配的各种应用产品。
(下一页附图片)。
用HT1621驱动LCD的方法

用HT1621驱动LCD的方法HT1621是一种专门用于驱动液晶显示屏的电路芯片。
它主要由一个128x32位的RAM、一个系统控制单元、一个液晶电压驱动器和一个驱动信号产生器组成。
下面将详细介绍如何使用HT1621来驱动液晶显示屏。
首先,我们需要了解HT1621的引脚和功能。
HT1621具有36个I/O引脚,其中包括数据线D0-D15、片选线CS、读/写线WR、串行时钟线CLK、复位线RESET和外部时钟线CLOCK。
可以通过这些引脚来与HT1621进行通信和控制。
接下来,我们需要了解液晶显示屏的工作原理。
一般来说,液晶屏主要由一个像素矩阵和一个驱动电路组成。
驱动电路负责根据控制信号来控制像素的亮度。
液晶显示屏的像素矩阵可以根据需要进行修改,以显示所需的图形或文本。
基于以上原理,我们可以开始使用HT1621来驱动液晶显示屏。
以下是一个基本的步骤:1.连接电路:首先,将HT1621和液晶显示屏连接起来。
根据液晶显示屏的引脚分配表和HT1621的引脚分配表,进行正确的连接。
确保电路在工作时不会发生短路或其他问题。
2.初始化HT1621:在开始使用HT1621之前,需要执行一些初始化操作。
这包括设置像素矩阵的大小、选择使用的驱动模式(静态或动态)以及配置其他相关参数。
可以通过向HT1621发送一系列特定的配置命令来完成这些初始化操作。
3.发送数据:一旦HT1621完成初始化,就可以开始向液晶显示屏发送数据了。
可以通过编程将所需的图形或文本数据写入HT1621的RAM中。
注意,HT1621的RAM大小为128x32位,所以需要将图形或文本数据适当地分割和映射到RAM中的相应位置。
4.刷新液晶显示屏:一旦数据写入HT1621的RAM中,需要根据需要刷新液晶显示屏以显示所需的图形或文本。
可以通过向HT1621发送刷新命令来触发刷新操作。
HT1621将读取RAM中的数据并根据驱动电路的要求控制液晶显示屏中的像素亮度。
ht1621液晶显示驱动原理及程序

Ht1621液晶显示驱动使用说明1.概述HT1621是128点内存映象和多功能的LCD驱动器,HT1621的软件配置特性使它适用于多种LCD应用场合,包括LCD模块和显示子系统。
用于连接主控制器和HT1621的管脚只有4或5条,HT1621还有一个节电命令用于降低系统功耗。
在虎风所做的这个系统中ht1621用于驱动一个静态的LCD液晶显示器。
液晶显示的方式分为静态显示和动态显示。
静态与动态的区别在于静态显示是持续供电的,而动态显示是利用人的视觉停留效果,快速扫描数码管各个段,让人在视觉上感觉到数码管是同时显示的。
2.HT1621接线原理图3.静态LCD结构图4.几个曾经纠结的概念Time base:时基,即时间基准,可以用来输出,作为外部时钟的时间基准。
占空比:将所有公共电极(COM)各施加一次扫描电压的时间叫一帧,单位时间内扫描多少帧的频率叫帧频,将扫描公共电极(COM)选通的时间与帧周期之比叫占空比。
通常占空比等于公共电极数N的倒数,即1/N。
这就是说假如你要驱动4个液晶,就需要4个COM,那么你的占空比就要设定为1/4。
偏压比:指的是液晶的偏压系数,可以看看专业技术文章,偏压目的是克服交叉效应,通过把半选择点与非选择点的电压平均,适度提高非选择点的电压来抵消半选择点上的一部分电压,使半选择点上的电压下降,从而提高显示对比度;最终行半选择点和非选择点上的电压均为显示电压的1/a,1/a就称为偏压系数,也称为偏压。
此方法称为1/a偏压的平均电压法,简称为1/a偏压法。
VLCD(LCD驱动电压): LCD的驱动电压为加在点亮部分的段电压与公共电压之差(峰-峰值)。
5.关于RAM地址映射的概念为了这个问题困扰了很久,虎风太愚钝啦……Ht1621有一个32*4的LCD驱动,映射到32*4的RAM地址。
上图中写命令101后面跟6位RAM地址,那么这个地址是如何确定的呢?其实说白了也很简单,RAM地址就是SEG的序号。
液晶驱动芯片HT1621及其在便携式血糖仪中的应用

液晶驱动芯片HT 1621及其在便携式血糖仪中的应用唐日泉α 袁景淇α 邱宪波 摘 要 H T 1621x 系列是HOL T EK公司推出的L CD 显示驱动芯片,它能够应用于便携式仪器仪表、通信设备以及医疗设备等系统的显示模块中。
本文介绍了L CD 显示的基本原理、H T 1621的工作原理和内部结构,并给出了它在便携式血糖仪中与E M 78P 458单片机的SP I 接口电路以及相应的显示驱动程序。
关键词 H T 1621 SP I 接口 E M 78P 458 便携式血糖仪一、LCD 显示的基本原理、特点液晶是一种能同时呈现出固体和液体的某些特征的物质。
从流体力学的观点来说,液晶是一种具有排列性质的液体:它就像是一把撒入长江的树枝,起初树枝在滔滔江水中会显得了凌乱无章,但不用多久所有的树枝长轴都会自然而然地和江水流动的方向一致。
即在受到外力影响时,液晶的分子会自动产生精确而又有序的排列。
而树枝则被看作为晶体的各个分子,江水流动所产生的力则相当于分子受到的外力。
如对分子的排列加以适当的控制,液晶分子将会允许光线穿透。
而光线穿透液晶的路径可以由构成它的分子排列来决定,这是固体的一种特征。
液晶通过这一特性显示黑白明暗和各种色彩。
液晶显示器(L CD )以其功耗低、体积小、外形美观、价格低廉等多种优势在仪器仪表产品中得到越来越多的应用。
与发光二极管(L ED )相比,它虽然存在驱动电路逻辑比较复杂、较难与单片机连接等缺点,但随着大规模集成电路的迅速发展,这些缺点已经被克服,液晶显示器已经进入成熟阶段。
二、HT 1621的结构框图、引脚说明和工作特点H T 1621B 的内部采用了模块化设计原则,其整体功能由几个相互独立的功能子模块协调实现,主要包括:控制与计时电路、音频发生器、显示RAM 、L CD 驱动及偏置、监视定时器等,具体的内部结构如图1所示。
H T 1621B 采用了48脚SSO P 封装,这使得它具有体积小和功耗低的优点,非常适合于应用在便携式仪器仪表中,引脚功能的详细描述见表1。
STC单片机驱动段码式液晶显示屏程序STC12C5612 HT1621B

/*********************************消息类型定义***********************************************************/
typedef enum
{
#define Char_D_Index 13
#define Char_E_Index 14
#define Char_F_Index 15
#define Char_G_Index 16
#define Char_H_Index 17
#define Char_L_Index 18
{0x05,0x0e}, //U段码 20
{0x02,0x00}, //-段码 21
{0x08,0x00}, //.段码 如果是SEG4则为单位Kvar 22
{0x00,0x0f}, //“)”段码 23
{0x02,0x07}, //F段码 15
{0x04,0x0f}, //G段码 16
{0x07,0x06}, //H段码 17
{0x00,0x0e}, //L段码 18
{0x03,0x07}, //P段码 19
{0x06,0x0b}, //5段码
{0x06,0x0f}, //6段码
{0x05,0x01}, //7段码
{0x07,0x0f}, //8段码
{0x07,0x0b}, //9段码
//#include "reg2051.h"
#include "STC12C5612AD.H"
#include "intrins.h"
#include "ht1621.h"
HT1621与MCP144液晶驱动器性能比较

HT1621与MCP144比较
微控网
1 / 1
HT1621与MCP144比较
微控网 DC
项目HT1621 MCP144 开显示工作电流≥160uA ≈6uA(低功耗模式)
关显示休眠电流>10uA ≈0.09uA 显示段数128段144段
封装体积SSOP48(16x7.5x2.3mm) TSSOP48(12.6x6.2x1.1mm) 接口介绍3-4 GPIO 2 GPIO 或I2C 成本≈1.5 RMB(1KU Price) ≤3.0RMB(1KU Price) 器件类型非低功耗类型低功耗类型
应用场合消费类、普通设备、家电费率表、仪器仪表、医疗、工控
我该如何选择?
如果对你的产品对低成本、货源供应多、应用场合要求不
高的话,选用HT1621是合适的。
但产品以性能可靠性优先、功耗要求苛刻、显示段数多、仪
器仪表领域应用,推荐你使用MCP144。
除此之外,在有I2C模块的MCU应用中还可以减少程序代
码量。
在系统中同时可以与其他I2C接口的器件分享总线,
从而节省MCU的GPIO资源使用。
HT1621驱动LCD程序

void Ht1621Wr_Data(uchar Data,uchar cnt)
{
uchar i;
for (i=0;i<cnt;i++)
{
HT1621_WR=0;
_Nop();
HT1621_DAT=Data&0x80;
//delay us
void Delay(uchar us) //5,7,9
{
while(--us);
}
//delay ms
void DelayMS(uint iMs)
{
uint i,j;
for(i=0;i<iMs;i++)
for(j=0;j<65;j++) Delay(1);
HT1621_CS=0;
Ht1621Wr_Data(0xa0,3); //写入数据标志101
Ht1621Wr_Data(Addr<<2,6); //写入地址数据
for (i=0;i<cnt;i++)
{
Ht1621Wr_Data(*p,8); //写入数据
p++;
Ht1621WrOneData(i,t);
t<<=1;
t++;
P1_5=~P1_5;
Ht1621WrCmd(RC256); //使用内部振荡器
Ht1ቤተ መጻሕፍቲ ባይዱ21WrCmd(SYSDIS);
Ht1621WrCmd(WDTDIS);
Ht1621WrCmd(SYSEN);
Ht1621WrCmd(LCDON);
HT1621测试驱动程序,高手勿喷!

HT1621测试驱动程序,高手勿喷!最近在某宝淘元件的时候,一同买了几种段码LCD模块。
据说是HT1621驱动的,所以在网上搜索来搜索去。
下了好多代码,基本都是加了其他功能的,对于我一个新手来说,其实要的只是驱动显示LCD的程序就可以了。
在不断的搜索研究中发现一位网友发布的一个HT1621测试驱动程序。
这里我在里做了一点点修改和增加了一些备注。
下面上代码:1.// - - * * * * * * * HT1621 段码屏驱动 * * * * * * *2.// - - * MCU: AT89C51 单片机 *3.// - - * MCU-Crystal: 12M 24M 晶振 *4.// - - * Version: 00 版本 *5.// - - * Last Updata: *6.// - - * Author: *7.// - - * Description: HT1621 段码屏驱动 *8.// - - * C 语言程序 *9.// - - * * * * * * * * * * * * * * * * * * * * * * *10.11.12./********************************************************13.功能描述: HT1621芯片测试程序14.15.说明:本测试程序能够测试HT1621的每一个字段,16.17.依次点亮每一个字段18.19.参数:20.********************************************************/21.22.// - - 引用库23.#include24.25.26.// - - 定义函数27.#define uchar unsigned char28.#define uint unsigned int29.30.#define BIAS 0x52 //0b1000 0101 0010 1/3duty 4com31.#define SYSDIS 0X00 //0b1000 0000 0000 关振系统荡器和LCD偏压发生器32.#define SYSEN 0X02 //0b1000 0000 0010 打开系统振荡器33.#define LCDOFF 0X04 //0b1000 0000 0100 关LCD偏压34.#define LCDON 0X06 //0b1000 0000 0110 打开LCD偏压35.#define XTAL 0x28 //0b1000 0010 1000 外部接时钟36.#define RC256 0X30 //0b1000 0011 0000 内部时钟37.#define TONEON 0X12 //0b1000 0001 0010 打开声音输出38.#define TONEOFF 0X10 //0b1000 0001 0000 关闭声音输出39.#define WDTDIS 0X0A //0b1000 0000 1010 禁止看门狗40.41.// - - 定义接口42.// - - HT1621控制位(液晶模块接口定义,根据自已的需要更改)43.sbit HT1621_CS=P3^2; // - - HT1621使能引脚44.sbit HT1621_WR=P3^3; // - - HT1621时钟引脚45.sbit HT1621_DAT=P3^4; // - - HT1621数据引脚46.47.// - - 定义变量,数组48.uchar code49.Ht1621Tab[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,50.51.0x00,0x00,0x00,0x00,0x00};52.53.// - - 定义子程序函数54.void Ht1621_Init(void); // - - 初始化 HT162155.void Ht1621Wr_Data(uchar Data,uchar cnt); // - - HT1621 写入数据函数56.void Ht1621WrCmd(uchar Cmd); // - - HT1621 写入命令函数57.void Ht1621WrOneData(uchar Addr,uchar Data); // - - HT1621 在指定地址写入数据函数58.void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt); // - - HT1621 连续写入数据函数59.60.void Ht1621_delay_10us(uint n); // - - 10微秒的延时子程序61.void Ht1621_delayms(uint xms); // - - 1毫秒延时程序62.63./********************************************************64.函数名称:void Ht1621_Init(void)65.功能描述: HT1621初始化66.全局变量:无67.参数说明:无68.返回说明:无69.版本:1.070.说明:初始化后,液晶屏所有字段均显示71.********************************************************/72.void Ht1621_Init(void)73.{74.HT1621_CS=1;75.HT1621_WR=1;76.HT1621_DAT=1;77.Ht1621_delayms(500); // - - 延时使LCD工作电压稳定78.Ht1621WrCmd(BIAS);79.Ht1621WrCmd(RC256); // - - 使用内部振荡器80.Ht1621WrCmd(SYSDIS); // - - 关振系统荡器和LCD偏压发生器81.Ht1621WrCmd(WDTDIS); // - - 禁止看门狗82.Ht1621WrCmd(SYSEN); // - - 打开系统振荡器83.Ht1621WrCmd(LCDON); // - - 打开声音输出84.}85.86./******************************************************87.函数名称:void Ht1621Wr_Data(uchar Data,uchar cnt)88.功能描述: HT1621数据写入函数89.全局变量:无90.参数说明:Data为数据,cnt为数据位数91.返回说明:无92.说明:写数据函数,cnt为传送数据位数,数据传送为低位在前93.*******************************************************/94.void Ht1621Wr_Data(uchar Data,uchar cnt)95.{96.uchar i;97.for (i=0;i<>98.{99.HT1621_WR=0;100.Ht1621_delay_10us(1);101.HT1621_DAT=Data&0x80;102.Ht1621_delay_10us(1);103.HT1621_WR=1;104.Ht1621_delay_10us(1);105.Data<>106.}107.}108.109./******************************************************** 110.函数名称:void Ht1621WrCmd(uchar Cmd)111.功能描述: HT1621命令写入函数112.全局变量:无113.参数说明:Cmd为写入命令数据114.返回说明:无115.说明:写入命令标识位100116.********************************************************/ 117.void Ht1621WrCmd(uchar Cmd)118.{119.HT1621_CS=0;120.Ht1621_delay_10us(1);121.Ht1621Wr_Data(0x80,4); // - - 写入命令标志100 122.Ht1621Wr_Data(Cmd,8); // - - 写入命令数据123.HT1621_CS=1;124.Ht1621_delay_10us(1);125.}126.127./******************************************************** 128.函数名称:void Ht1621WrOneData(uchar Addr,uchar Data)129.功能描述: HT1621在指定地址写入数据函数130.全局变量:无131.参数说明:Addr为写入初始地址,Data为写入数据132.返回说明:无133.说明:因为HT1621的数据位4位,所以实际写入数据为参数的后4位134.********************************************************/ 135.void Ht1621WrOneData(uchar Addr,uchar Data)136.{137.HT1621_CS=0;138.Ht1621Wr_Data(0xa0,3); // - - 写入数据标志101139.Ht1621Wr_Data(Addr<2,6); -="" -="">140.Ht1621Wr_Data(Data<4,4); -="" -="">141.HT1621_CS=1;142.Ht1621_delay_10us(1);143.}144.145./******************************************************** 146.函数名称:void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt)147.功能描述: HT1621连续写入方式函数148.全局变量:无149.参数说明:Addr为写入初始地址,*p为连续写入数据指针,t为写入数据总数151.返回说明:无152.说明:HT1621的数据位4位,此处每次数据为8位,写入数据153.总数按8位计算154.********************************************************/ 155.void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt) 156.{157.uchar i;158.HT1621_CS=0;159.Ht1621Wr_Data(0xa0,3); // - - 写入数据标志101160.Ht1621Wr_Data(Addr<2,6); -="" -="">161.for (i=0;i<>162.{163.Ht1621Wr_Data(*p,8); // - - 写入数据164.p++;165.}166.HT1621_CS=1;167.Ht1621_delay_10us(1);168.}169.170.void Ht1621_delay_10us(uint n) // - - 10微秒的延时子程序171.{172.uint i,j;173.for(i=n;i>0;i--)174.for(j=2;j>0;j--);175.}176.177.void Ht1621_delayms(uint xms) // - - 1毫秒延时程序178.{179.uint i,j;180.for(i = xms;i > 0;i --)181.for(j = 110;j > 0;j --);182.}183.184.185./***********************************186.HT1621 测试程序,作为库文件请注释掉187.***********************************/188.void main()189.{190.uchar i,j,t;191.Ht1621_Init(); // - - 上电初始化LCD192.Ht1621_delayms(5000); // - - 延时一段时间193.while(1){194.Ht1621_delayms(2000);195.Ht1621WrAllData(0,Ht1621Tab,16); // - - 清除1621寄存器数据,暨清屏196.for (i=0;i<>197.{198.t=0x01;199.for (j=0;j<>200.{201.Ht1621WrOneData(i,t);202.t<>203.t++;204.P1_5=~P1_5; // - - 循环点亮LED205.Ht1621_delayms(500);206.}207.}208.}209.}210.经测试在12M 24M 的晶振下能正常显示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十七节:液晶屏第三大类定律—任意位置显示一个点(HT1621驱动段码液晶屏)
(1)开场白:
段码液晶屏往往应用在出货量比较大的家用消费类电子,比如空调遥控器,小时候带的电子手表等,都是段码屏。
段码屏是非标屏,都是客户定做的,第一次开模费大概一两千元,厂家一般都会有起订量的要求,除此之外,它的单位成本相对要比点阵屏要便宜,而且我个人认为显示的效果要比点阵屏漂亮。
段码屏的驱动程序跟数码管的静态驱动程序一样,只要我们弄懂了怎样显示一个基本单位,根据此基本单位编写一个字库表,然后用与(&)和或(|)这两种位运算符就可以随心所欲编写我们要显示的数字或者形状。
有两种常用的驱动方案:
第一种:如果单片机内部集成了seg和com引脚的液晶驱动模块,直接用单片机驱动。
第二种:单片机用3个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灯。
因为纵向上有32行,因此Y轴的地址范围是0到31。
每一行X轴上的4个点,我们用一个字节来表示。
一个字节有8位,高4位分别代表这个4个点,低4位为空。
比如第一行(SEG0行)的第1个(COM3)要显示,第2个(COM2)要显示,第3个(COM1)不要显示,第4个(COM0)不要显示,那么用一个字节来表示就是十六进制的0xc0.要把这两个点点亮,只要把X轴的数据设置成0xc0,Y轴的数据设置成0x00,然后放到鸿哥精心研制的seg_display(unsigned char col, unsigned char pag)驱动程序里就可以了.
(2)功能需求:
在COM和SEG组成的4X32表格中,显示第二行的第3和第4两个点。
(3)硬件原理:
用单片机的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匹配。
1个或者2个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位到HT1621里,驱动程序的最底层部分
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组成的4X32表格中,显示第二行的第3和第4两个点。
while(1)
{
;
}
}
//发送一个字节中的N位到HT1621里,驱动程序的最底层部分
void SendBitToHT1621(unsigned char nbit,unsigned char n)
{
unsigned char i;
for(i=0;i<n;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)小结:
因为段码屏是一种客户定做的屏,每种屏的字库表都会不一样,因此我在这节只列出最核心的驱动程序,上层的应用程序大家以后根据项目自己编写,只要多利用查表,与(&)和或(|)这两种位运算符来处理,不难。
软件设置初始化HT1621的配置参数时,要特别注意实际电路上用了多少个COM,然后设置相等的COM配置,否则,应用在大段码显示屏的项目时,有可能因为驱动力不够,会显示乱码。
鸿哥在上个月的一个项目中就是被这样的问题卡住了,还好鸿哥功力深厚,仅仅用了7天就找出了问题,现在分享给大家。
(注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。
可复制、编制,期待你的好评与关注)。