上篇讲解了HT1621驱动芯片的功能及操作命令等相关资料,这篇注意讲解代码程序。
/*************************************************************
写数据函数
cnt 传送数据位数 数据传送为高位在前
**************************************************************/
void HT1621_1_WriteData(uint8_t Data,uint8_t cnt)
{
uint8_t i;
for(i=0;i<cnt;i++)
{
HT1621B_1_WR = 0;
delay_us(5);
if((Data&0x80)==0x00)
HT1621B_1_DA = 0;
else
HT1621B_1_DA = 1;
delay_us(5);
HT1621B_1_WR = 1;
delay_us(5);
Data<<=1;
}
}
//1621低CNT位写入
void HT1621_1_WriteData_LSB(uint8_t Data,uint8_t cnt)
{
uint8_t i;
for(i=0;i<cnt;i++)
{
HT1621B_1_WR = 0;
delay_us(5);
if((Data&0x01)==0)
HT1621B_1_DA = 0;
else
HT1621B_1_DA = 1;
delay_us(5);
HT1621B_1_WR = 1;
delay_us(5);
Data>>=1;
}
}
/********************************************************************
函数名称:void HT1621_WriteCMD
功能描述:HT1621命令写入函数
参数说明:Cmd----写入的命令
*********************************************************************/
void HT1621_1_WriteCMD(uint8_t Cmd)
{
HT1621B_1_CS = 0;
HT1621_1_WriteData(0x80,4);//写入命令标志 1000
HT1621_1_WriteData(Cmd,8);//写入地址数据
HT1621B_1_CS = 1;
}
/********************************************************************
函数名称:HT1621_WriteOneData
功能描述:HT1621单个字节写入函数
参数说明:Add----HT1621的RAM地址
Data---写入的数据 也即HT1621的COM口
*********************************************************************/
void HT1621_1_WriteOneData(uint8_t Addr,uint8_t Data)
{
HT1621B_1_CS = 0;
HT1621_1_WriteData(0xa0,3);//写入命令标志 101
HT1621_1_WriteData(Addr<<2,6);//写入地址数据
HT1621_1_WriteData(Data<<4,4);//写入数据
HT1621B_1_CS = 1;
}
/********************************************************************
函数名称:HT1621_WriteAllData
功能描述:HT1621连续字节写入函数
参数说明:addr---写入初始地址
*pDat---连续写入数据指针
cnt---写入数据总数
*********************************************************************/
void HT1621_1_WriteAllData(uint8_t Addr,uint8_t *pDat,uint8_t cnt)
{
uint8_t i;
HT1621B_1_CS = 0;
HT1621_1_WriteData(0xa0,3);//写入数据101
HT1621_1_WriteData(Addr<<2,6);//写入地址
for(i=0;i<cnt;i++)
{
HT1621_1_WriteData(*pDat,8);
pDat++;
}
HT1621B_1_CS = 1;
}
void HT1621_1_WrAllData(uint8_t dat)
{
uint8_t i;
HT1621B_1_CS = 0;
HT1621_1_WriteData(0xa0,3);//写入数据101
HT1621_1_WriteData(0X00<<2,6);//写入地址
for(i=0;i<16;i++)
{
HT1621_1_WriteData(dat,8);
}
HT1621B_1_CS = 1;
}
/********************************************************************
函数名称:HT1621_1_Init
功能描述:HT1621初始化
参数说明:
*********************************************************************/
void HT1621_1_Init()
{
HT1621B_1_CS = 1;;
HT1621B_1_WR = 1;
HT1621B_1_DA = 1;
HAL_Delay(200);
HT1621_1_WriteCMD(BIAS);
HT1621_1_WriteCMD(RC256);
HT1621_1_WriteCMD(SYSDIS);
HT1621_1_WriteCMD(WDTDIS);
// HT1621_1_WriteCMD(SYSEN);
// HT1621_1_WriteCMD(LCDON);
}
/////////////////////////////////////////////////////////////////////////////////////
////HT1621第二个芯片操作函数如下
/////////////////////////////////////////////////////////////////////////////////////////
/*************************************************************
写数据函数
cnt 传送数据位数 数据传送为高位在前
**************************************************************/
void HT1621_2_WriteData(uint8_t Data,uint8_t cnt)
{
uint8_t i;
for(i=0;i<cnt;i++)
{
HT1621B_2_WR = 0;
delay_us(5);
if((Data&0x80)==0x00)
HT1621B_2_DA = 0;
else
HT1621B_2_DA = 1;
delay_us(5);
HT1621B_2_WR = 1;
delay_us(5);
Data<<=1;
}
}
//1621低CNT位写入
void HT1621_2_WriteData_LSB(uint8_t Data,uint8_t cnt)
{
uint8_t i;
for(i=0;i<cnt;i++)
{
HT1621B_2_WR = 0;
delay_us(5);
if((Data&0x01)==0)
HT1621B_2_DA = 0;
else
HT1621B_2_DA = 1;
delay_us(5);
HT1621B_2_WR = 1;
delay_us(5);
Data>>=1;
}
}
/********************************************************************
函数名称:void HT1621_WriteCMD
功能描述:HT1621命令写入函数
参数说明:Cmd----写入的命令
*********************************************************************/
void HT1621_2_WriteCMD(uint8_t Cmd)
{
HT1621B_2_CS = 0;
HT1621_2_WriteData(0x80,4);//写入命令标志 1000
HT1621_2_WriteData(Cmd,8);//写入地址数据
HT1621B_2_CS = 1;
}
/********************************************************************
函数名称:HT1621_WriteOneData
功能描述:HT1621单个字节写入函数
参数说明:Add----HT1621的RAM地址
Data---写入的数据 也即HT1621的COM口
*********************************************************************/
void HT1621_2_WriteOneData(uint8_t Addr,uint8_t Data)
{
HT1621B_2_CS = 0;
//delay_us(5);
HT1621_2_WriteData(0xa0,3);//写入命令标志 101
HT1621_2_WriteData(Addr<<2,6);//写入地址数据
HT1621_2_WriteData(Data<<4,4);//写入数据
//delay_us(5);
HT1621B_2_CS = 1;
}
/********************************************************************
函数名称:HT1621_WriteAllData
功能描述:HT1621连续字节写入函数
参数说明:addr---写入初始地址
*pDat---连续写入数据指针
cnt---写入数据总数
*********************************************************************/
void HT1621_2_WriteAllData(uint8_t Addr,uint8_t *pDat,uint8_t cnt)
{
uint8_t i;
HT1621B_2_CS = 0;
HT1621_2_WriteData(0xa0,3);//写入数据101
HT1621_2_WriteData(Addr<<2,6);//写入地址
for(i=0;i<cnt;i++)
{
HT1621_2_WriteData(*pDat,8);
pDat++;
}
HT1621B_2_CS = 1;
}
void HT1621_2_WrAllData(uint8_t dat)
{
uint8_t i;
HT1621B_2_CS = 0;
HT1621_2_WriteData(0xa0,3);//写入数据101
HT1621_2_WriteData(0X00<<2,6);//写入地址
for(i=0;i<16;i++)
{
HT1621_2_WriteData(dat,8);
}
HT1621B_2_CS = 1;
}
/********************************************************************
函数名称:HT1621_1_Init
功能描述:HT1621初始化
参数说明:
*********************************************************************/
void HT1621_2_Init()
{
HT1621B_2_CS = 1;;
HT1621B_2_WR = 1;
HT1621B_2_DA = 1;
HAL_Delay(200);
HT1621_2_WriteCMD(BIAS);
HT1621_2_WriteCMD(RC256);
HT1621_2_WriteCMD(SYSDIS);
HT1621_2_WriteCMD(WDTDIS);
// HT1621_2_WriteCMD(SYSEN);
// HT1621_2_WriteCMD(LCDON);
}