unsigned char read()
{
unsigned char i,d;
for(i=0;i<8;i++)
{
d=d>>1;
sclk=0; //这里不需要再把数据线拉高了,因为写完后必须马上进行读,而写完后的数据线已经被拉高了,这时只需拉低产生一个脉冲
if(io) d=d|0x80;
}
return d;
}
这是我写的,你参考下吧,我那是在1602上显示的,程序已经通过的,希望能帮到你
void write_ds1302byte(uchar date) //写字节
{
uchar i;
for(i=0;i<8;i++)
{
ds1302_clk=0;
ds1302_io=date&0x01;
ds1302_clk=1;
date=date>>1;
}
}
void write_ds1302(uchar addr,uchar date) //写数据,如需写入数据到1302里面,则还需要对保护寄存器进行设置
{
ds1302_rst=0;
_nop_();
ds1302_clk=0;
_nop_();
ds1302_rst=1;
_nop_();
write_ds1302byte(addr);
write_ds1302byte(date);
ds1302_rst=0;
_nop_();
ds1302_clk=0;
ds1302_io=1;
}
uchar read_ds1302(uchar addr) //读数据
{
uchar i,temp;
ds1302_rst=0;
_nop_();
ds1302_clk=0;
_nop_();
ds1302_rst=1;
_nop_();
write_ds1302byte(addr);
for(i=0;i<8;i++)
{
ds1302_clk=0;
temp=temp>>1;
if(ds1302_io)
temp=temp|0x80;
ds1302_clk=1;
}
ds1302_rst=0;
_nop_();
ds1302_clk=0;
ds1302_io=1;
return temp;//得出的是BCD码,如十进制的24表示成BCD码就是0010 0100,切记BCD码是用四位二进制表示一位数,且范围是0~9,如果把十进制24转换为BCD码就是24/16为十位,24%16为个位
} //切记如果把24/10,24%10那么现在转换出来的十位和个位就是十进制的