应用三 便携式甲醛检测仪(下)--- HT1622

前言

在上篇文章中,着重介绍了基于I2C接口的温湿度传感器SHT30的用法,本篇文章着重介绍HT1622液晶驱动的用法。HT162x 系列是由 HOLTEK 公司开发的支持多种显示方式的 LCD 驱动芯片,内部 RAM 直接映射到相对应的 LCD 显示单元。支持串行通信方式。

HT1622代码

先贴上代码再说(本部分代码是从工程里面摘出来的,GPIO口配置可能有多余的,其他相关子函数没有问题)

/******************************HT1622.h***********************************************/
#ifndef __HT1622_H
#define __HT1622_H
#include "sys.h"
#define HT1622_CS		PBout(11)	//片选端口
#define HT1622_WR		PBout(13)	//写控制端口
#define HT1622_DAT	PBout(14)	//数据传输端口

void LCD_GPIO(void);
void Ht1622Wr_bit(u8 Data,u8 cnt);
void Ht1622Wr_data(u8 Data,u8 cnt);	
void Ht1622WrCmd(u8 Cmd);
void Ht1622_Init(void);
void Ht1622WrOneData(u8 Addr,u8 Data);


/***************************************************HT1622.c**************************/
#include "HT1622.h"
#include "delay.h"

/***************初始化LCD相关的GPIO********************/
void LCD_GPIO(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;     
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_13 | GPIO_Pin_14; 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);	
		      
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD ;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
}

/**
  * @brief  HT1622 写地址写命令用,先移最高位
  * @param  Data 写入输入,cnt 写入位数 
  * @retval None
  */
void Ht1622Wr_bit(u8 Data,u8 cnt) 
{
	u8 i;
	for (i=0;i<cnt;i++)
	{
		HT1622_WR = 0;	//上升沿写数据到HT1622 RAM
		delay_us(10);
		if(Data&0x80)
			HT1622_DAT = 1;
		else
			HT1622_DAT = 0;
		delay_us(10);
		HT1622_WR = 1;
		delay_us(10);
	  Data<<=1;
	}
}

/**
  * @brief  写数据用,先移最低位
  * @param  Data 写入数据,cnt写入位数
  * @retval None
  */
void Ht1622Wr_data(u8 Data,u8 cnt)
{
	u8 i;
	for (i=0;i<cnt;i++)
	{
		HT1622_WR=0;		
		if(Data&0x01)
			HT1622_DAT=1;
		else
			HT1622_DAT=0;
		delay_us(10);
		HT1622_WR=1;
		delay_us(10);
		Data>>=1;
	}
}


/**
  * @brief  写命令
  * @param  cmd写命令
  * @retval None
  */
void Ht1622WrCmd(u8 Cmd)
{
	HT1622_CS=1;
	delay_us(10);	
	HT1622_CS=0;
	Ht1622Wr_bit(0x80,3); //  写ID100表示命令模式
	Ht1622Wr_bit(Cmd,9); //   写9位命令(看手册命令就是九位)
	delay_us(10);	
}

/**
  * @brief  在指定地址写数据
  * @param  addr地址,data写入数据
  * @retval None
  */
void Ht1622WrOneData(u8 Addr,u8 Data)
{	
	HT1622_CS=1;
	delay_us(10);
	HT1622_CS=0;
	Ht1622Wr_bit(0xa0,3); //  写数据功能码就是101
	Ht1622Wr_bit(Addr<<2,6); // 从手册看出写数据地址是6位
	Ht1622Wr_data(Data,4); // 从手册看出写数据是4位
	delay_us(10);
}


/**
  * @brief  初始化函数
  * @param  None
  * @retval None
  */
void Ht1622_Init(void)
{
	u8 i;
	Ht1622WrCmd(0x18); //系统时钟源,片内RC振荡器
	Ht1622WrCmd(0x01); // 开启系统振荡器	
	Ht1622WrallData(0x00);//清屏
	Ht1622WrCmd(0x03); //  打开LCD偏置电压

}

void lcd_init(void)
{	
   LCD_GPIO();
   Ht1622_Init();

}

int main()
{
    lcd_init();
    while(1);
}

手册分析

写命令

在这里插入图片描述
上图是写命令的时序图,注意三点:第一,数据每一位写的时候WR处于上升沿;第二,写命令的时候先发三位功能码100,再发9位命令,参考函数void Ht1622WrCmd(u8 Cmd),且注意,从时序图看出命令码从C8开始,即先发高位。

写数据

在这里插入图片描述
上图是写数据的时序图,注意四点:第一还是WR上升沿写数据;第二写数据先发三位功能码101;第三,功能码之后再发六位RAM地址,最后发四位数据(仔细看时序图,地址先发高位A5,数据先发低位D0),参考代码void Ht1622WrOneData(u8 Addr,u8 Data)

如何使用HT1622控制显示

在这里插入图片描述

图1 RAM映射图

在这里插入图片描述

图2 段码屏CAD图

说明:
1.无论所用的段码屏显示是什么样的,格式制图通常都是图2这种,包括屏幕显示内容和一个表格(对应相应的COM,SEG)
2.段码屏的意思就是屏幕显示的内容是不连续的,一段段的,每个显示的部位都可以单独控制点亮,具体看屏幕设计。

如图2,我们想要点亮屏幕上系统初始化“”这几个字,发现这几个字对应S1,然后去表格中查找发现S1对应COM2.SEG3(这里截图不准确,仅仅是打个比方),接着查看手册的RAM映射图,将COM2,SEG3处置1,从而知道,要想点亮S1,只需要在地址6处,发送数据4即可,即调用函数Ht1622WrOneData(0x06, 0x04)
在这里插入图片描述

总结

至此,关于便携式甲醛检测仪项目最重要的SHT30的使用,HT1622的使用基本介绍完毕,当然还有其他的部分功能,由于相对简单一些,不在此赘述。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

foreverwlh

你的鼓励将是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值