//*************************************************************************
//*************************************************************************
//******************************HT1621处理子程序***************************
//*************************************************************************
//*************************************************************************
#define SYSDIS 0X00 //关振系统荡器和LCD偏压发生器
#define SYSEN 0X01 //开振系统荡器和LCD偏压发生器
#define LCDOFF 0X02 //关LCD显示
#define LCDON 0X03 //开LCD显示
#define TIMEDIS 0X04 //关闭时基输出
#define WDTDIS 0X05 //禁止看门狗
#define TIMEEN 0X06 //打开时基输出
#define WDTEN 0X07 //使能看门狗
#define TONEOFF 0X08 //关蜂鸣器
#define TONEON 0X09 //开蜂鸣器
#define TIMECLR 0X0C //清时基
#define WDTCLR 0X0E //清看门狗
#define XTAL 0x14 //选择时钟为外部晶振
#define RC256 0X18 //选择内部时钟
#define EXT256 0X1C //选择外部输入时钟
#define BIAS 0x29 //1/3duty 4com
#define TONE4K 0X40 //选择蜂鸣器频率为4K
#define TONE2K 0X60 //选择蜂鸣器频率为2K
#define IRQDIS 0X80 //关闭IRQ输出
#define IRQEN 0X88 //打开IRQ输出
#define HT1621_CS PA3//PB1 //设定片选口
#define HT1621_WR PB3//PB7 //设定写控制口
#define HT1621_DATA PB4//PB0 //设定数据口
//以下为LCD七段数码管编码数组
const unsigned char LED_TAB[10]={0xf5,0x60,0xb6,0xf2,0x63,0xd3,0xd7,0x70,0xf7,0xf3};
//*************************************************************************
//***************************写芯片初始化命令子程序************************
//*************************************************************************
void HT1621_Wr_Cmd(unsigned char Cmd_data)
{
unsigned char i,j;
j=0x80;
HT1621_CS=0; //片选为0,HT1621芯片使能
__Asm NOP;
__Asm NOP;
for (i=0;i<3;i++) //送100进HT1621,开始写命令操作
{
if(j&0x80)
{
HT1621_DATA=1;
}
else
{
HT1621_DATA=0;
}
HT1621_WR=0; //WR口上升沿,数据送入HT1621芯片
__Asm NOP;
__Asm NOP;
HT1621_WR=1;
__Asm NOP;
__Asm NOP;
j<<=1;
}
for (i=0;i<9;i++) //送命令代码进HT1621
{
if(Cmd_data&0x80)
{
HT1621_DATA=1;
}
else
{
HT1621_DATA=0;
}
HT1621_WR=0; //WR口上升沿,数据送入HT1621芯片
__Asm NOP;
__Asm NOP;
HT1621_WR=1;
__Asm NOP;
__Asm NOP;
Cmd_data<<=1;
}
HT1621_CS=1; //工作完后,置片选为1,HT1621芯片关闭
__Asm NOP;
__Asm NOP;
}
//*************************************************************************
//****************************写芯片数据命令子程序*************************
//*************************************************************************
void HT1621_Wr_DataCmd(unsigned char Add_data)
{
unsigned char i,j;
j=0xA0;
for (i=0;i<3;i++) //送101进HT1621,开始写数据操作
{
if(j&0x80)
{
HT1621_DATA=1;
}
else
{
HT1621_DATA=0;
}
HT1621_WR=0; //WR口上升沿,数据送入HT1621芯片
__Asm NOP;
__Asm NOP;
HT1621_WR=1;
__Asm NOP;
__Asm NOP;
j<<=1;
}
Add_data<<=2;
for (i=0;i<6;i++) //送6位数据地址进HT1621
{
if(Add_data&0x80)
{
HT1621_DATA=1;
}
else
{
HT1621_DATA=0;
}
HT1621_WR=0; //WR口上升沿,数据送入HT1621芯片
__Asm NOP;
__Asm NOP;
HT1621_WR=1;
__Asm NOP;
__Asm NOP;
Add_data<<=1;
}
}
//*************************************************************************
//****************************写芯片字节数据子程序*************************
//*************************************************************************
void HT1621_Wr_data(unsigned char Disp_data)
{
unsigned char i;
for (i=0;i<8;i++) //送8位显示数据进HT1621
{
if(Disp_data&0x80)
{
HT1621_DATA=1;
}
else
{
HT1621_DATA=0;
}
HT1621_WR=0; //WR口上升沿,数据送入HT1621芯片
__Asm NOP;
__Asm NOP;
HT1621_WR=1;
__Asm NOP;
__Asm NOP;
Disp_data<<=1;
}
}
//*************************************************************************
//*****************************显示数据输出子程序**************************
//*************************************************************************
void Disp_SVR(unsigned char Display_data_H,unsigned char Display_data_M,unsigned char Display_data_L)
{
unsigned char i; //显示两个8位数据
unsigned char Data_1;
unsigned char Data_2;
unsigned char Data_3;
unsigned char Data_4;
unsigned char Data_100W; //数据100位缓存器
unsigned char Data_10W; //数据10位缓存器
unsigned char Data_1W; //数据个位缓存器
//----------------------------------------- //显示第一个8位数据
Data_100W=LED_TAB[Display_data_L/100]; //转换8位数据的100位进缓存器
Data_10W=LED_TAB[Display_data_L/10%10]; //转换8位数据的10位进缓存器
Data_1W=LED_TAB[Display_data_L%10]; //转换8位数据的个位进缓存器
Data_1=(Data_100W&0xf0)|(Data_10W&0x0f); //数据中间处理
Data_2=(Data_10W&0xf0)|(Data_1W&0x0f);
Data_3=(Data_1W&0xf0);
Data_4=(Data_100W&0x0f);
HT1621_CS=0; //片选为0,HT1621使能
HT1621_Wr_DataCmd(3); //选择RAM的地址为3
HT1621_Wr_data(Data_1); //写入数据
HT1621_CS=1; //片选为1,关闭HT1621
__Asm NOP;
__Asm NOP;
__Asm NOP;
__Asm NOP;
__Asm NOP;
HT1621_CS=0; //片选为0,HT1621使能
HT1621_Wr_DataCmd(5); //选择RAM的地址为5
HT1621_Wr_data(Data_2); //写入数据
HT1621_CS=1; //片选为1,关闭HT1621
__Asm NOP;
__Asm NOP;
__Asm NOP;
__Asm NOP;
__Asm NOP;
HT1621_CS=0; //片选为0,HT1621使能
HT1621_Wr_DataCmd(8); //选择RAM的地址为8
HT1621_Wr_data(Data_3); //写入数据
HT1621_CS=1; //片选为1,关闭HT1621
__Asm NOP;
__Asm NOP;
__Asm NOP;
__Asm NOP;
__Asm NOP;
HT1621_CS=0; //片选为0,HT1621使能
HT1621_Wr_DataCmd(9); //选择RAM的地址为9
HT1621_Wr_data(Data_4); //写入数据
HT1621_CS=1; //片选为1,关闭HT1621
//----------------------------------------- //显示第二个8位数据
Data_100W=LED_TAB[Display_data_H%10]; //转换8位数据的100位进缓存器
Data_10W=LED_TAB[Display_data_M/10]; //转换8位数据的10位进缓存器
Data_1W=LED_TAB[Display_data_M%10]; //转换8位数据的个位进缓存器
Data_1=Data_100W; //数据中间处理
Data_2=Data_10W;
Data_3=Data_1W;
HT1621_CS=0; //片选为0,HT1621使能
HT1621_Wr_DataCmd(16); //选择RAM的地址为16
HT1621_Wr_data(Data_1); //写入数据
HT1621_CS=1; //片选为1,关闭HT1621
__Asm NOP;
__Asm NOP;
__Asm NOP;
__Asm NOP;
__Asm NOP;
HT1621_CS=0; //片选为0,HT1621使能
HT1621_Wr_DataCmd(14); //选择RAM的地址为14
HT1621_Wr_data(Data_2); //写入数据
HT1621_CS=1; //片选为1,关闭HT1621
__Asm NOP;
__Asm NOP;
__Asm NOP;
__Asm NOP;
__Asm NOP;
HT1621_CS=0; //片选为0,HT1621使能
HT1621_Wr_DataCmd(12); //选择RAM的地址为12
HT1621_Wr_data(Data_3); //写入数据
HT1621_CS=1; //片选为1,关闭HT1621
}
//*************************************************************************
//*****************************HT1621初始化子程序**************************
//*************************************************************************
void HT1621_INIT()
{
unsigned char i;
HT1621_CS=1; //先置位CS片选口,关HT1621
HT1621_WR=1; //写口及数据口复位
HT1621_DATA=1;
//----------------------------------------- //写HT1621初始化命令
HT1621_Wr_Cmd(SYSEN); //开系统
HT1621_Wr_Cmd(WDTDIS); //关WDT
HT1621_Wr_Cmd(TIMEDIS); //关时基输出
HT1621_Wr_Cmd(TONEOF
评论0