.h文件
#ifndef _HT1621_H
#define _HT1621_H
#define BIAS 0x52 //1/3duty 4com
#define SYSDIS 0X00 //关振系统荡器和LCD偏压发生器
#define SYSEN 0X02 //打开系统振荡器
#define LCDOFF 0X04 //关LCD偏压
#define LCDON 0X06 //打开LCD偏压
#define XTAL 0x28 //外部接时钟
#define RC256 0X30 //内部时钟
#define WDTDIS 0X0A //禁止看门狗
#define SET_HT1621_CS GPIO_Write_High(GPIOA0,4)
#define CLR_HT1621_CS GPIO_Write_Low(GPIOA0,4)
#define SET_HT1621_WR GPIO_Write_High(GPIOA0,3)
#define CLR_HT1621_WR GPIO_Write_Low(GPIOA0,3)
#define SET_HT1621_DAT GPIO_Write_High(GPIOA0,1)
#define CLR_HT1621_DAT GPIO_Write_Low(GPIOA0,1)
void Ht1621Wr_Data(unsigned char Data,unsigned char cnt);
void Ht1621WrCmd(unsigned char Cmd);
void Ht1621WrOneData(unsigned char Addr,unsigned char Data);
void Ht1621WrAllData(unsigned char Addr,unsigned char *p,unsigned char cnt);
void Ht1621_Init(void);
#endif
.c文件
#include "apt32f102.h"
#include "apt32f102_gpio.h"
#include "HT1621.h"
#include "SC_delay.h"
/******************************************************
写数据函数,cnt为传送数据位数,数据传送为低位在前
*******************************************************/
void Ht1621Wr_Data(unsigned char Data,unsigned char cnt)
{
unsigned char i;
for (i=0;i<cnt;i++)
{
CLR_HT1621_WR;
SCDelay_us();
if(Data&0x80)
SET_HT1621_DAT;
else
CLR_HT1621_DAT;
SCDelay_us();
SET_HT1621_WR;
SCDelay_us();
Data<<=1;
}
}
/********************************************************
函数名称:void Ht1621WrCmd(uchar Cmd)
功能描述: HT1621命令写入函数
全局变量:无
参数说明:Cmd为写入命令数据
返回说明:无
设 计 人:ZHCE
版 本:1.0
说 明:写入命令标识位100
********************************************************/
void Ht1621WrCmd(unsigned char Cmd)
{
CLR_HT1621_CS;
SCDelay_us();
Ht1621Wr_Data(0x80,4); //写入命令标志100
Ht1621Wr_Data(Cmd,8); //写入命令数据
SET_HT1621_CS;
SCDelay_us();
}
/********************************************************
函数名称:void Ht1621WrOneData(uchar Addr,uchar Data)
功能描述: HT1621在指定地址写入数据函数
全局变量:无
参数说明:Addr为写入初始地址,Data为写入数据
返回说明:无
设 计 人:ZHCE
版 本:1.0
说 明:因为HT1621的数据位4位,所以实际写入数据为参数的后4位
********************************************************/
void Ht1621WrOneData(unsigned char Addr,unsigned char Data)
{
CLR_HT1621_CS;
Ht1621Wr_Data(0xa0,3); //写入数据标志101
Ht1621Wr_Data(Addr<<2,6); //写入地址数据
Ht1621Wr_Data(Data<<4,4); //写入数据
SET_HT1621_CS;
SCDelay_us();
}
/********************************************************
函数名称:void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt)
功能描述: HT1621连续写入方式函数
全局变量:无
参数说明:Addr为写入初始地址,*p为连续写入数据指针,
cnt为写入数据总数
返回说明:无
设 计 人:ZHCE
版 本:1.0
说 明:HT1621的数据位4位,此处每次数据为8位,写入数据
总数按8位计算
********************************************************/
void Ht1621WrAllData(unsigned char Addr,unsigned char *p,unsigned char cnt)
{
unsigned char i;
CLR_HT1621_CS;
Ht1621Wr_Data(0xa0,3); //写入数据标志101
Ht1621Wr_Data(Addr<<2,6); //写入地址数据
for (i=0;i<cnt;i++)
{
Ht1621Wr_Data(*p,8); //写入数据
p++;
}
SET_HT1621_CS;
SCDelay_us();
}
/********************************************************
函数名称:void Ht1621_Init(void)
功能描述: HT1621初始化
全局变量:无
参数说明:无
返回说明:无
设 计 人:ZHCE
版 本:1.0
说 明:初始化后,液晶屏所有字段均显示
********************************************************/
void Ht1621_Init(void)
{
SET_HT1621_CS;
SET_HT1621_WR;
SET_HT1621_DAT;
SCDelay_ms(10);
Ht1621WrCmd(BIAS); //1/3占空比 4com
Ht1621WrCmd(RC256); //使用内部振荡器
Ht1621WrCmd(SYSDIS); //关振系统荡器和LCD偏压发生器
Ht1621WrCmd(WDTDIS); //禁止看门狗
Ht1621WrCmd(SYSEN); //打开系统振荡器
Ht1621WrCmd(LCDON); //打开LCD偏压
}