📄 ch375prt.c
字号:
SCL=0;
}
else
{
while(i--)
{
SCL=0;
_nop_();
SDA=(bit)(demand&0x01);
demand>>=1;
I2CWait();
SCL=1;
I2CWait();
}
SCL=0;
}
}
/*********MCU从SD2200读入一字节*********/
UCHAR I2CReceiveByte(bit order)//order=1,H_L;order=0,L_H
{
UCHAR i=8;
UCHAR ddata=0;
SDA=1;
if(order)
{
while(i--)
{
ddata<<=1; //数据从高位开始读取
SCL=0;
I2CWait();
SCL=1;
I2CWait(); //从高位开始 ddata|=SDA;ddata<<=1
if(SDA)
{
ddata|=0x01;
}
}
}
else
{
while(i--)
{
ddata>>=1; //数据从低位开始读取
SCL=0;
I2CWait();
SCL=1;
I2CWait(); //从低位开始 ddata|=SDA;ddata>>=1
if(SDA)
{
ddata|=0x80;
}
}
}
SCL=0;
return ddata;
}
/******读SD2200实时数据寄存器******/
void I2CReadDate(void)
{
UCHAR n;
if(!I2CStart())return;
I2CSendByte(0x65,1);//从年开始读取数据
if(!I2CWaitAck()){I2CStop();return;}
for(n=0;n<7;n++)
{
date[n]=I2CReceiveByte(0);
if (n!=6) //最后一个数据不应答
{
I2CAck();
}
}
I2CNoAck();
I2CStop();
date[4]&=0x3f;
}
/*写SD2200状态寄存器命令*/
void I2CWriteStatus(void)
{
if(!I2CStart())return;
I2CSendByte(0x60,1); //发送SD2200状态寄存器_1命令
if(!I2CWaitAck()){I2CStop();return;}
I2CSendByte(0x03,0); //IC进行复位初始化,24小时制
I2CWaitAck();
I2CStop();
I2CStart();
I2CSendByte(0x62,1); //发送SD2200状态寄存器_2命令
I2CWaitAck();
I2CSendByte(0x00,0); //清TEST位,禁止中断输出
I2CWaitAck();
I2CStop();
}
/*写SD2200时间寄存器命令*/
void I2CWriteTime(void)
{
UCHAR n;
I2CStart();
I2CSendByte(0x64,1); //发送SD2200写时间寄存器命令,
I2CWaitAck();
for(n=0;n<7;n++)
{
I2CSendByte(date[n],0);
I2CWaitAck();
}
I2CStop();
}
/*********************以上是时钟操作***********************************************/
unsigned int HexToBCD(unsigned char Value)
{
unsigned int i;
// i=(unsigned int)(Value/10)*16+(unsigned int)(Value&0x0f);
i=Value;
return(i);
}
void mInitSTDIO( )
{
t2con=0x30; //timer2 used for baud rate generator
scon0=0x50; //
rcap2h=0x0ff; //bundrate 9600
rcap2l=0xdc;//
TMOD=0x21; //
scon1=0x50; //
TH1=0xfd; //bundrate 9600
TL1=0xfd;
ES=1;
TR1=1;
tr2=1;
PCON = 0x00;
EA=1;///
}
/*
void SendStr()
{
unsigned char idata i;
TI=0;
RI=0;
for(i=0;i<53;i++)
{
SBUF=buffer[i];
while(TI);
TI=0;
mDelaymS( 50 );
}
}
*/
void SendTime()
{
unsigned int sum=0;
unsigned char i;
sum=0x40;
TI=0;
RI=0;
SBUF=0x8;
while(!TI);
TI=0;
mDelaymS( 2 );
SBUF=0x40;
while(!TI);
TI=0;
mDelaymS( 2 );
for(i=0;i<7;i++)
{
sum+=date[i];
SBUF=date[i];
while(!TI);
TI=0;
mDelaymS( 2 );
}
SBUF=(sum>>8)&0x00ff;
while(!TI);
TI=0;
mDelaymS( 2 );
SBUF=sum&0x00ff;
while(!TI);
TI=0;
mDelaymS( 2 );
}
void RecvStr()
{
TI=0;
RI=0;
if(SBUF==0xfa){SBUF=0xfc;RecvStart=2;}//读取
if(SBUF==0xfb)
{RecvStart=3;RecvCount=0;}
else if(RecvStart==3)
{
date[RecvCount]=SBUF;
RecvCount++;
if(RecvCount==7)
{
RecvStart=0;
RecvFlage=2;
}
}
if(SBUF==0xfd)
{
RecvStart=1;
RecvCount=70;
}
else
if(RecvStart==1)
{
buffer[RecvCount]=SBUF;
RecvCount++;
if(RecvCount==123)
{
RecvStart=0;
RecvFlage=1;
}
}
}
void ComInt() interrupt 4
{
TI=0;
if(RI) RecvStr();
}
void ChangeData()
{
//编号
buffer[0]=HexToBCD(buffer[70]);
buffer[1]=HexToBCD(buffer[71]);
//年龄
buffer[2]=HexToBCD(buffer[72]);
//身高
buffer[3]=HexToBCD(buffer[73]);
buffer[4]=HexToBCD(buffer[74]);
//腰围
buffer[5]=HexToBCD(buffer[75]);
buffer[6]=HexToBCD(buffer[76]);
//体重
buffer[7]=HexToBCD(buffer[77]);
buffer[8]=HexToBCD(buffer[78]);
//类型
if(buffer[79])
buffer[9]='G';// generic=1;motile=0
else
buffer[9]='M';// generic=1;motile=0
//性别
if(buffer[80])
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -