以下是代码片段
/**************************************************************************************
* LEDÉÁ˸ʵÑé *
ʵÏÖÏÖÏó£ºÏÂÔسÌÐòºóD11ָʾµÆÉÁ˸
×¢ÒâÊÂÏÎÞ
***************************************************************************************/
#include "reg52.h"
#include<intrins.h> //´ËÎļþÖж¨ÒåÁ˵¥Æ¬»úµÄһЩÌØÊ⹦ÄܼĴæÆ÷
typedef unsigned int u16; //¶ÔÊý¾ÝÀàÐͽøÐÐÉùÃ÷¶¨Òå
typedef unsigned char u8;
#define FOSC 12000000L
sbit SCCB_SID=P1^2; //½«µ¥Æ¬»úµÄP0.0¶Ë¿Ú¶¨ÒåΪled
sbit SCCB_SIC=P1^3;
sbit led_switch=P1^4;
sbit led=P1^5;
//P1M0 = 0x00; P1M1 = 0x00;
// P1M0 = 0xff; P1M1 = 0x00;
/*******************************************************************************
* º¯ Êý Ãû : delay
* º¯Êý¹¦ÄÜ : ÑÓʱº¯Êý£¬i=1ʱ£¬´óÔ¼ÑÓʱ10us
*******************************************************************************/
void Delay50us() //@11.0592MHz
{
unsigned char i;
_nop_();
_nop_();
_nop_();
i = 135;
while (--i);
}
void Delay500ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
void SCCB_SID_H(void)
{
SCCB_SID=1;
}
void SCCB_SID_L(void)
{
SCCB_SID=0;
}
void SCCB_SIC_H(void)
{
SCCB_SIC=1;
}
void SCCB_SIC_L(void)
{
SCCB_SIC=0;
}
void startSCCB(void)
{
SCCB_SID_H(); //
Delay50us() ;
SCCB_SIC_H(); //
Delay50us() ;
SCCB_SID_L();
Delay50us() ;
SCCB_SIC_L(); //
Delay50us() ;
}
void stopSCCB(void)
{
SCCB_SID_L();
Delay50us() ;
SCCB_SIC_H();
Delay50us() ;
SCCB_SID_H();
Delay50us() ;
}
void noAck(void)
{
SCCB_SID_H();
Delay50us() ;
SCCB_SIC_H();
Delay50us() ;
SCCB_SIC_L();
Delay50us() ;
SCCB_SID_L();
Delay50us() ;
}
unsigned char SCCBwriteByte(unsigned char m_data)
{
unsigned char j,tem;
for(j=0;j<8;j++) //??8?????
{
if((m_data<<j)&0x80)
{
SCCB_SID_H();
}
else
{
SCCB_SID_L();
}
Delay50us() ;
SCCB_SIC_H();
Delay50us() ;
SCCB_SIC_L();
Delay50us() ;
}
//delay_us(50);
Delay50us() ;
// SCCB_SID_IN;/*??SDA???*/
//SCCB_SID=0;
Delay50us() ;
SCCB_SIC_H();
Delay50us() ;
if(SCCB_SID==1){tem=0;} //SDA=1????,??0}
else {tem=1;} //SDA=0????,??1
SCCB_SIC_L();
Delay50us() ;
//SCCB_SID=1;/*??SDA???*/
return (1);
}
unsigned char SCCBreadByte(void)
{
unsigned char read,j;
read=0x00;
// SCCB_SID_IN;/*??SDA???*/
Delay50us() ;
for(j=8;j>0;j--) //??8?????
{
//delay_us(100);
SCCB_SIC_H();
Delay50us() ;
read=read<<1;
if(SCCB_SID==1)
{
read=read+1;
}
SCCB_SIC_L();
Delay50us() ;
}
//SCCB_SID_OUT;/*??SDA???*/
return(read);
}
unsigned char wr_Sensor_Reg(unsigned char regID, unsigned char regDat)
{
startSCCB();//??SCCB ????????
if(0==SCCBwriteByte(0x42))//???
{
stopSCCB();//??SCCB ????????
return(0);//????
}
Delay50us() ;
if(0==SCCBwriteByte(regID))//???ID
{
stopSCCB();//??SCCB ????????
return(0);//????
}
Delay50us() ;
if(0==SCCBwriteByte(regDat))//???????
{
stopSCCB();//??SCCB ????????
return(0);//????
}
stopSCCB();//??SCCB ????????
return(1);//????
}
unsigned char rd_Sensor_Reg(unsigned char regID, unsigned char *regDat)
{
//????????????
startSCCB();
if(0==SCCBwriteByte(0x42))//???
{
stopSCCB();//??SCCB ????????
return(0);//????
}
Delay50us() ;
if(0==SCCBwriteByte(regID))//
{
stopSCCB();//
return(0);//
}
stopSCCB();//
Delay50us() ;
//
startSCCB();
if(0==SCCBwriteByte(0x43))//???
{
stopSCCB();//
return(0);//
}
Delay50us() ;
*regDat=SCCBreadByte();//
noAck();//
stopSCCB();//
return(1);//
}
/*******************************************************************************
* º¯ Êý Ãû : main
* º¯Êý¹¦ÄÜ : Ö÷º¯Êý
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
void main()
{
u16 s;
unsigned char temp;
temp=0x81;
CLK_DIV=0x80;
led_switch=0;
led=0;
Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();
Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();Delay500ms();
Delay500ms();Delay500ms();Delay500ms();
wr_Sensor_Reg(0x12, temp);
while(1)
{
if (led_switch==1){led=1;}else{led=0;};
Delay500ms();
rd_Sensor_Reg(0x0a, &temp);
rd_Sensor_Reg(0x0b, &temp);
rd_Sensor_Reg(0x1c, &temp);
rd_Sensor_Reg(0x1d, &temp);
}
}