|
楼主 |
发表于 2014-2-14 11:27:24
|
显示全部楼层
移植了驱动但是总觉得这驱动有问题
/*****************************************************************
HT1622 底层驱动 Data 数据 Length 数据长度
*****************************************************************/
void Write_HT1622_Byte(unsigned char Data,unsigned char Length)
{
unsigned char i,Temp=0x80;
for (i=0;i<Length;i++)
{
CLR_BIT ( HT1621_WR ); //“写”时钟置0
if (Data&Temp)
SET_BIT ( HT1621_DAT );//数据线置1
else
CLR_BIT ( HT1621_DAT );//数据线置0
Temp>>=1; //准备下一位
SET_BIT ( HT1621_WR ); //“写”时钟置1
}
}
/*****************************************************************
HT1622写入数据函数 Address 写数据地址 Data 数据
*****************************************************************/
void Write_HT1622_Data(unsigned char Address,unsigned char Data)
{
CLR_BIT ( HT1621_CS ); //片选置0
Address <<= 2; //将实际地址挪到高位
Data <<= 4; //将实际数据挪到高位
Write_HT1622_Byte(0xA0,3); //写入写数据的ID 101 高3位有效
Write_HT1622_Byte(Address,6);//写入6个位初始地址 高6位有效
Write_HT1622_Byte(Data,4); //写入4个位数据 高4位有效
SET_BIT ( HT1621_CS ); //片选置1
}
/*****************************************************************
//HT1622写命令函数 Command 命令
*****************************************************************/
void Write_HT1622_Command(unsigned char Command)
{
CLR_BIT ( HT1621_CS ); //片选置0
Write_HT1622_Byte(0x80,3); //写入命令的ID:100
Write_HT1622_Byte(Command,8);//写入实际命令的高8位(CMD.):C8-C1
SET_BIT ( HT1621_DAT ); //|写入一个“1”即手册上所指“无关位”的那一个数据位
CLR_BIT ( HT1621_WR ); //|
_NOP();_NOP();_NOP(); //|
SET_BIT ( HT1621_WR ); //|
SET_BIT ( HT1621_CS ); //片选置1
}
/*****************************************************************
显示数字函数 *Data显示内容指针 Address 显示首位置 Length内容长度
*****************************************************************/
void Display(unsigned char *Data,unsigned char Address,unsigned char Length)
{
unsigned char i = 0,Temp=0x0F;
unsigned char ADDH,ADDL;
for(;i<Length;i++)
{
Temp=DIS[*Data]; //数据解析
ADDL = Address*2; //低4位地址解析
ADDL = ADDL*2+2-(ADDL/31)*59; //低4位地址解析
Write_HT1622_Data(ADDL,Temp&0x0F);//写低4位数据
ADDH = Address*2-1; //高4位地址解析
ADDH = ADDH*2+2-(ADDH/31)*59; //高4位地址解析
Temp>>=4; //高4位数据解析
Write_HT1622_Data(ADDH,Temp&0x0F);//写高4位数据
Data ++; //显示数据指针增一
Address ++; //显示地址增一
}
}
在datasheet里面明明写的地址 和数据高低位不一致 地址高位在前 数据低位在前 |
|