用keil5写红外测温
时间: 2024-01-15 07:18:28 浏览: 77
```c
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
sbit SDA = P2^0; // I2C数据线
sbit SCL = P2^1; // I2C时钟线
void delay(unsigned int i)
{
while (i--);
}
void I2CStart()
{
SDA = 1;
SCL = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA = 0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL = 0;
}
void I2CStop()
{
SDA = 0;
SCL = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void I2CAck()
{
SDA = 0;
SCL = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL = 0;
_nop_();
_nop_();
_nop_(); _nop_();
_nop_();
}
void I2CNoAck()
{
SDA = 1;
SCL = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL = 0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
unsigned char I2CSendByte(unsigned char dat)
{
unsigned char a, b;
for (a = 0; a < 8; a++)
{
if (dat & 0x80)
SDA = 1;
else
SDA = 0;
SCL = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL = 0;
dat <<= 1;
}
SDA = 1;
SCL = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
b = SDA;
SCL = 0;
return b;
}
unsigned char I2CReadByte()
{
unsigned char a, dat = 0;
SDA = 1;
for (a = 0; a < 8; a++)
{
dat <<= 1;
SCL = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
if (SDA)
dat |= 0x01;
SCL = 0;
}
return dat;
}
void main()
{
unsigned char temp;
I2CStart();
I2CSendByte(0x90);
I2CSendByte(0x07);
I2CStart();
I2CSendByte(0x91);
temp = I2CReadByte();
I2CNoAck();
I2CStop();
}
```
阅读全文