我用的是stc的1T的单片机,程序如下:
/**********************
标题:WriteByte
功能:实现写命令和数据
格式:void WriteByte(uchar,uchar)
输入:往ds1302上写入命令参数及数据
输出:无
返回值:无
**********************/
void WriteByte(uchar cmd_ds,uchar dat_ds)//
{
uchar i_ds=0;// ,j_ds=0
nRST_T=0;//复位引脚为低电平,所有数据传送终止
// _nop_();
_nop_();
_nop_();
SCLK_T=0; //清除时钟总线
// _nop_();
_nop_();
_nop_();
nRST_T=1;//复位引脚为高电平逻辑控制有效
// _nop_();
_nop_();
_nop_();
for(i_ds=0;i_ds<8;i_ds++)
{
SDA_T=cmd_ds&0x01;//将数据传送到发送位
// _nop_();//_nop_()全部为短暂延时
_nop_();
_nop_();
SCLK_T=1; //时钟上升沿发送数据有效
// _nop_();
_nop_();
_nop_();
SCLK_T=0;
// _nop_();
_nop_();
_nop_();
cmd_ds=cmd_ds>>1;
}
for(i_ds=0;i_ds<8;i_ds++)
{
SDA_T=dat_ds&0x01;//将数据传送到发送位
// _nop_();//_nop_()全部为短暂延时
_nop_();
_nop_();
SCLK_T=1; //时钟上升沿发送数据有效
// _nop_();
_nop_();
_nop_();
SCLK_T=0;
// _nop_();
_nop_();
_nop_();
dat_ds=dat_ds>>1;
}
//}
nRST_T=0;//复位引脚为低电平,所有数据传送终止
}
/**********************
标题:ReadByte
功能:实现读数据
格式:uchar ReadByte(uchar)
输入:往lcm上写入数据
输出:无
返回值:uchar
**********************/
uchar ReadByte(uchar cmd_ds)
{
uchar i_ds=0,dat_ds=0;
nRST_T=0;//复位引脚为低电平,所有数据传送终止
// _nop_();
_nop_();
_nop_();
SCLK_T=0; //清除时钟总线
// _nop_();
_nop_();
_nop_();
nRST_T=1;//复位引脚为高电平逻辑控制有效
// _nop_();
_nop_();
_nop_();
for(i_ds=0;i_ds<8;i_ds++)
{
SDA_T=cmd_ds&0x01;//将命令数据传送到发送位
// _nop_();//_nop_()全部为短暂延时
_nop_();
_nop_();
SCLK_T=1; //时钟上升沿发送数据有效
// _nop_();
_nop_();
_nop_();
SCLK_T=0;
// _nop_();
_nop_();
_nop_();
cmd_ds=cmd_ds>>1;
}
for(i_ds=0;i_ds<8;i_ds++)
{
dat_ds=dat_ds<<1;
if(SDA_T)
dat_ds=dat_ds|0x01;//将数据传送到接收位
// _nop_();//_nop_()全部为短暂延时
_nop_();
_nop_();
SCLK_T=1; //时钟置高
// _nop_();
_nop_();
_nop_();
SCLK_T=0;//时钟下降沿接收数据有效
// _nop_();
_nop_();
_nop_();
}
nRST_T=0;//复位引脚为低电平,所有数据传送终止
return(dat_ds);
} |