/*****ht1621写字节函数*****/
void sendbit(unsigned char data,unsigned char cnt)//data的高cnt位写入,高位在前
{
unsigned char i;
for(i=0;i<cnt;i++)
{
WR=0;
if(data&0x80)
DATA=1;
else
DATA=0;
WR=1;
data<<=1;
}
}
/*****ht1621读字节函数*****/
unsigned char readbit()
{
unsigned char i;
unsigned char data;
for(i=0;i<4;i++)
{
data<<1;
RD=0;
__delay_us(5);
if(DATA==1)
data|=0x01;
else
data|=0x00;
RD=1;
}
return data;
}
/*****ht1621写命令函数*****/
void sendcmd(unsigned char command)
{
CS=0;//打开片选使能
sendbit(0x80,4);//写入标识码“100”+9位command命令
sendbit(command,8);//由于没有使用到更改时钟输出命令,直接将command最高位写0
CS=1;//关闭片选使能
}
/*****ht1621读数据函数*****/
unsigned char readdata(unsigned char addr)
{
unsigned char data;
addr<<=2;//地址左移2位
CS=0;//打开片选使能
sendbit(0xc0,3);//写入标识码“110”
sendbit(addr,6);//写入6位地址
data=readbit();
CS=1;
return data;
}
/*****ht1621写地址+数据函数*****/
void write1621(unsigned char addr,unsigned char data)
{
addr<<=2;//地址左移2位
data<<=4;//数据左移4位
CS=0;//打开片选使能
sendbit(0xa0,3);//写入标识码“101”
sendbit(addr,6);//写入6位地址
sendbit(data,4);//写入4位数据
__delay_us(10); //延时
CS=1;//关闭片选使能
}
程序功能是读写HT1621B操作函数,先写入所有地址的数据是0,再读出来某一个地址的数据,结果不是0,请大家看一下读操作是否正确 |