51单片机PCF8591基本程序怎么写
时间: 2023-03-20 13:03:49 浏览: 143
您好,关于51单片机PCF8591的基本程序,可以参考以下代码:
```
#include <reg51.h> //头文件
#include <intrins.h> //头文件
#define uchar unsigned char //定义无符号字符类型
#define uint unsigned int //定义无符号整型数据类型
sbit SCL=P1^0; //定义时钟线引脚
sbit SDA=P1^1; //定义数据线引脚
uchar AD_Value; //定义AD转换值
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void Start() //起始信号
{
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}
void Stop() //结束信号
{
SDA=0;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
_nop_();
}
void SendByte(uchar dat) //发送字节数据
{
uchar i;
for(i=0;i<8;i++)
{
SDA=dat/128;
dat=dat<<1;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
_nop_();
_nop_();
}
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}
uchar ReadByte() //读取字节数据
{
uchar i,dat=0;
SDA=1;
for(i=0;i<8;i++)
{
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
dat=dat<<1;
dat=dat|SDA;
SCL=0;
_nop_();
_nop_();
_nop_();
_nop_();
}
return dat;
}
void WriteData(uchar dat) //写数据到PCF8591
{
Start(); //起始信号
SendByte(0x90); //发送设备地址和写命令
ReadByte(); //读应答
SendByte(0x40); //发送控制字节
ReadByte(); //读应答
SendByte(dat); //发送数据
ReadByte(); //读应答
Stop(); //结束信号
}
uchar ReadData() //从PCF8591读取数据
{
uchar dat;
Start(); //起始信号
SendByte(0x90); //发送设备地址和写命令
ReadByte(); //读应答
SendByte(0x41); //发送控制字节
ReadByte(); //读应答
dat=ReadByte(); //读数据
Stop(); //结束信号
return dat;
}
void main()
{
while(1)
{
WriteData(0x00); //写0x00到PCF8591,选择通道0
delay
阅读全文