आईआईसी नमूना कोड

#शामिल करना “IIC.h

//————-विलंब समय_हमें——————————-
शून्य विलंब(u16 t)
{
जबकि (टी != 0)
टी–;
}

/*void IIC_Start(खालीपन) */
{
एसडीए = 1;
एससीएल = 1;
देरी(विलंब समय);
एसडीए = 0;
देरी(विलंब समय);
एससीएल = 0;
}

/* void IIC_Stop(खालीपन) */
{
एससीएल = 0;
एसडीए = 0;
देरी(विलंब समय);
एससीएल = 1;
देरी(विलंब समय);
एसडीए = 1;
}

/*
unsigned char IIC_Wait_Ack(खालीपन) */
{
u8 rec = 0;

देरी(विलंब समय); //
एसडीए = 1; //
एससीएल = 1;
देरी(विलंब समय);
rec = SDA;
एससीएल = 0; //
देरी(विलंब समय);

return rec;
}

/* void IIC_Ack(खालीपन) */
{
एससीएल = 0;
एसडीए = 0;
देरी(विलंब समय);
एससीएल = 1;
देरी(विलंब समय);
एससीएल = 0;
देरी(विलंब समय);
}

/* void IIC_NAck(खालीपन) */
{
एससीएल = 0;
एसडीए = 1;
देरी(विलंब समय);
एससीएल = 1;
देरी(विलंब समय);
एससीएल = 0;
देरी(विलंब समय);
}


/*
void IIC_Send_Byte(u8 txd) */
{
u8 i;

के लिए(मैं = 0; मैं < 8; मैं++)
{
एसडीए = (txd & 0x80) >> 7; //
txd <<= 1;
देरी(विलंब समय);
एससीएल = 1;
देरी(विलंब समय);
एससीएल = 0;
देरी(विलंब समय);
}
}

/*
u8 IIC_Read_Byte(खालीपन)*/
{
u8 i, rec = 0;

एसडीए = 1; //
के लिए(मैं = 0; मैं < 8; मैं++)
{
एससीएल = 0;
देरी(विलंब समय);
एससीएल = 1;
rec <<= 1;
अगर(SDA) rec |= 1; //
देरी(विलंब समय);
}

return rec;
}
#शामिल करना “XGZP6897D.h

//u8 temp_a5;

//————-डेटा का एक बाइट लिखें,मास्टर से स्लेवर तक डेटा ——————————

//————-स्लेवर पता बिट:01101101——————————-
शून्य लिखें_एक_बाइट(u8 addr, u8 thedata) //लिखना “आंकड़ा” गुलाम के पते पर “प”

{
IIC_Start(); //आईआईसी प्रारंभ
IIC_Send_Byte(0एक्सडीए); //आईआईसी राइट ऑपरेशन,SLAVER address

IIC_Wait_Ack();
IIC_Send_Byte(प); /*पता*/
IIC_Wait_Ack();
IIC_Send_Byte(आंकड़ा); /*आंकड़ा*/
IIC_Wait_Ack();
IIC_Stop(); //आईआईसी स्टॉप
}


//————-डेटा का एक बाइट पढ़ें,स्लेवर से मास्टर तक का डेटा —————————-
u8 Read_One_Byte(u8 addr)
{
u8 mydata;
IIC_Start();
IIC_Send_Byte(0एक्सडीए);
IIC_Wait_Ack();
IIC_Send_Byte(प);
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0एक्सडीबी); //आईआईसी रीड ऑपरेशन
IIC_Wait_Ack();
mydata = IIC_Read_Byte();
IIC_NAck(); //
IIC_Stop();
मेराडेटा लौटाएं;
}


//
void XGZP_Start_Conversion()
{

लिखें_एक_बाइट(0x30, 0x0A); //एक संयुक्त रूपांतरण इंगित करें
जबकि ((पढ़ें_एक_बाइट(0x30) & 0x08) > 0);

}

//————-Write n Bytes of Data—————————-
u8 software_i2c_Write_nByte(u8 SlaveAddress, u8 REG_Address, u8 len, u8 *buf)
{
int i;

//
IIC_Start();

//
IIC_Send_Byte(SlaveAddress);
IIC_Wait_Ack();

//
IIC_Send_Byte(REG_Address);
IIC_Wait_Ack();

//
के लिए (मैं = 0; मैं < len; मैं++) {
IIC_Send_Byte(buf[मैं]);
अगर (IIC_Wait_Ack() == FAILED) {
IIC_Stop();
return FAILED;
}
}

//
IIC_Stop();
return SUCCESS;
}

//————-Read n Bytes of Data—————————-
u8 software_i2c_Read_nByte(u8 SlaveAddress, u8 REG_Address, u8 len, u8 *buf)
{
//
IIC_Start();

//
IIC_Send_Byte(SlaveAddress);
IIC_Wait_Ack();

//
IIC_Send_Byte(REG_Address);
IIC_Wait_Ack();

//
IIC_Start();

//
IIC_Send_Byte(SlaveAddress + 1);
IIC_Wait_Ack();

//
जबकि (len) {
//
*buf = IIC_Read_Byte();
//
अगर (len == 1)
IIC_NAck();
//
अन्य
IIC_Ack();
//
buf++;
//
len–;
}

//
IIC_Stop();

return SUCCESS;
}

//————-Read Three Bytes of Pressure Data—————————-
u8 Read_Pressure_ThreeBytes(u8 *pressure_H, u8 *pressure_M, u8 *pressure_L)
{
u8 buffer[3];
u8 result;

result = software_i2c_Read_nByte(0एक्सडीए, 0x06, 3, buffer); //

अगर(result == SUCCESS) {
*pressure_H = buffer[0]; //
*pressure_M = buffer[1]; //
*pressure_L = buffer[2]; //
return SUCCESS;
} अन्य {
return FAILED;
}
}

शून्य मुख्य()
{
SensorData *p_sensor_data = &sensor_data; //
p_sensor_data->pressure_k = 8192;

LCD1602_Init(); //
LCD1602_show_string(3, 0, “Pressure”); //

जबकि(1)
{
लिखें_एक_बाइट(0x30, 0x0A); //एक संयुक्त रूपांतरण इंगित करें
// जबकि ((पढ़ें_एक_बाइट(0x30) & 0x08) > 0);
विलंब_एमएस(10);

//
अगर(Read_Pressure_ThreeBytes(&p_sensor_data->pressure_H,
&p_sensor_data->pressure_M,
&p_sensor_data->pressure_L) == SUCCESS)
{
//
p_sensor_data->pressure_AD = (unsigned long)((((unsigned long)p_sensor_data->pressure_H) << 16) |
(((unsigned int)p_sensor_data->pressure_M) << 8) |
((unsigned char)p_sensor_data->pressure_L));

//
p_sensor_data->pressure = (p_sensor_data->pressure_AD > 8388608) ?
(double)((p_sensor_data->pressure_AD – 16777216) / (double)(p_sensor_data->pressure_k)) :
(double)(p_sensor_data->pressure_AD / (double)(p_sensor_data->pressure_k));

//
अगर (is_zero_point_set)
{
zero_point_pressure = p_sensor_data->दबाव; //
is_zero_point_set = 0; //
}

p_sensor_data->pressure -= zero_point_pressure;

//
अगर (p_sensor_data->दबाव > 1000.0) {
//
p_sensor_data->pressure /= 1000.0;
float_to_str(p_sensor_data->P_buffer, p_sensor_data->दबाव, 2, ” किलो पास्कल”);
} अन्य {
float_to_str(p_sensor_data->P_buffer, p_sensor_data->दबाव, 2, ” देहात”);
}

LCD1602_show_string(3, 1, p_sensor_data->P_buffer);
}
अन्य
{
//
LCD1602_show_string(3, 1, “READ ERROR”);
}

विलंब_एमएस(200); //
}
}