#include "ht1621.h"
__align(4) uint8_t Ht1621Tab2[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; //用于开机是填屏
__align(4) uint8_t Ht1621Tab1[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; //用于数据更新
//__align(4) uint8_t Ht1621Tab3[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };//用于lts检测不到后清空显示
#define HtDelay 1
/**
* @brief Ht1621引脚初始化
*/
void Ht1621_GPIO_Init(void)
{
SYSCON_AHBPeriphClockCmd(SYSCON_AHBCLK_GPIOA | SYSCON_AHBCLK_GPIOB, ENABLE);
GPIO_Init(PB3, GPIO_Mode_OUT, IOCFG_DEFAULT);
GPIO_Init(PB4, GPIO_Mode_OUT, IOCFG_DEFAULT);
GPIO_Init(PA15, GPIO_Mode_OUT, IOCFG_DEFAULT);
GPIO_Init(PC0, GPIO_Mode_IN, IOCFG_DEFAULT);
GPIO_Init(PC1, GPIO_Mode_IN, IOCFG_DEFAULT);
}
/******************************************************
写数据函数,cnt为传送数据位数,数据传送为低位在前
*******************************************************/
void Ht1621Wr_Data(uint8_t Data, uint8_t cnt)
{
uint8_t i;
for (i = 0; i < cnt; i++)
{
HT1621_WR_CLR;
SysTick_Delay_us(HtDelay);
if (Data & 0x80)
HT1621_DAT_SET;
else
HT1621_DAT_CLR;
SysTick_Delay_us(HtDelay);
HT1621_WR_SET;
SysTick_Delay_us(HtDelay);
Data <<= 1;
}
}
/********************************************************
函数名称:void Ht1621WrCmd(uint8_t Cmd)
功能描述: HT1621命令写入函数
全局变量:无
参数说明:Cmd为写入命令数据
返回说明:无
说 明:写入命令标识位100
********************************************************/
void Ht1621WrCmd(uint8_t Cmd)
{
HT1621_CS_CLR;
SysTick_Delay_us(HtDelay);
Ht1621Wr_Data(0x80, 4); //写入命令标志100
Ht1621Wr_Data(Cmd, 8); //写入命令数据
HT1621_CS_SET;
SysTick_Delay_us(HtDelay);
}
/********************************************************
函数名称:void Ht1621WrOneData(uint8_t Addr,uint8_t Data)
功能描述: HT1621在指定地址写入数据函数
全局变量:无
参数说明:Addr为写入初始地址,Data为写入数据
返回说明:无
说 明:因为HT1621的数据位4位,所以实际写入数据为参数的后4位
********************************************************/
void Ht1621WrOneData(uint8_t Addr, uint8_t Data)
{
HT1621_CS_CLR;
Ht1621Wr_Data(0xa0, 3); //写入数据标志101
Ht1621Wr_Data(Addr << 2, 6); //写入地址数据
Ht1621Wr_Data(Data << 4, 4); //写入数据
HT1621_CS_SET;
SysTick_Delay_us(HtDelay);
}
/********************************************************
HT1621测试程序,2008-2-13, 22:41:43
函数名称:void Ht1621WrAllData(uint8_t Addr,uint8_t *p,uint8_t cnt)
功能描述: HT1621连续写入方式函数
全局变量:无
参数说明:Addr为写入初始地址,*p为连续写入数据指针,
cnt为写入数据总数
返回说明:无
说 明:HT1621的数据位4位,此处每次数据为8位,写入数据
总数按8位计算
********************************************************/
void Ht1621WrAllData(uint8_t Addr, uint8_t *p, uint8_t cnt)
{
uint8_t i;
HT1621_CS_CLR;
Ht1621Wr_Data(0xa0, 3); //写入数据标志101
Ht1621Wr_Data(Addr << 2, 6); //写入地址数据
for (i = 0; i < cnt; i++)
{
Ht1621Wr_Data(*p, 8); //写入数据
p++;
}
HT1621_CS_SET;
SysTick_Delay_us(HtDelay);
}
/********************************************************
函数名称:void Ht1621_Clear_Buff(void)
功能描述: HT1621清除缓存
全局变量:无
参数说明:无
返回说明:无
版 本:1.0
说 明:清除用于更新LCD的缓存
********************************************************/
void Ht1621_Clear_Buff(void)
{
uint8_t i;
for(i=0;i<16;i++)
Ht1621Tab1[i]=0x00;
}
/********************************************************
函数名称:void Ht1621_Init(void)
功能描述: HT1621初始化
全局变量:无
参数说明:无
返回说明:无
版 本:1.0
说 明:初始化后,液晶屏所有字段均显示
********************************************************/
void Ht1621_Init(void)
{
Ht1621_GPIO_Init();
HT1621_CS_SET;
HT1621_WR_SET;
HT1621_DAT_SET;
SysTick_Delay_ms(200);//等待电压稳定
// SysTick_Delay_ms(1000);
Ht1621WrCmd(BIAS);
Ht1621WrCmd(RC256); //使用内部振荡器
Ht1621WrCmd(SYSDIS);
Ht1621WrCmd(WDTDIS);
Ht1621WrCmd(SYSEN);
Ht1621WrCmd(LCDON);
}
评论0
最新资源