做一个用火焰传感器和单片机的寻火小车、、可以找到火源将其吹灭、、

核心提示我用的AD是PCF8591、单片机用的C52,电路图、源程序全是我自己原创。。。--------------------------------------------------------------------------------

我用的AD是PCF8591、单片机用的C52,电路图、源程序全是我自己原创。。。

-----------------------------------------------------------------------------------------------

电路图:

C语言程序:

#include "reg52.h"

#include "PCF8591.h"

main()

{ char x;

x=PCF8591_AD(channel); //channel默认为通道3

//电压值为:(x/256*参考电压)

}

包含的头文件:

PCF8591.h

i2c.h

--------------------------以下为PCF8591.h内容-----------------------------------------------------------

#include "i2c.h"

#ifndef _PCF8591_

#define _PCF8591_

#define PCF8591 0x90 //PCF8591 输入地址 (输出地址=输入地址+1)

char channel=3; //默认为通道3

#endif

#ifndef _iic_

#define _iic_

sbit scl=P1^5;

sbit sda=P3^6;

#endif

void PCF8591_DA(char x)

{iic_start();

iic_sendbyte(PCF8591); for(ack=1;ack;)ack=iic_recack();

iic_sendbyte(0x40); for(ack=1;ack;)ack=iic_recack(); //允许"模拟输出"

iic_sendbyte(x); for(ack=1;ack;)ack=iic_recack();

iic_stop();

}

char PCF8591_AD(char channel)

{char x;

iic_start(); //设置模拟输入通道

iic_sendbyte(PCF8591); for(ack=1;ack;)ack=iic_recack();

iic_sendbyte(0x40+channel); for(ack=1;ack;)ack=iic_recack();

iic_stop();

iic_start();

iic_sendbyte(PCF8591+1); for(ack=1;ack;)ack=iic_recack();

x=iic_recbyte(); iic_ack(0);

iic_stop();

return x;

}

------------------------以上为PCF8591.h内容-------------------------------------------------------------

------------------------以下为i2c.h内容---------------------------------------------------------------------

#include<reg52.h>

#include"intrins.h"

#ifndef _iic_

#define _iic_

sbit scl=P1^5;

sbit sda=P3^6;

bit ack;

#endif

void delay5us(void)

{ _nop_();

_nop_();

_nop_();

_nop_();

_nop_();

}

void iic_start(void)

{ delay5us();

sda=1;

delay5us();

scl=1;

delay5us();

sda=0;

delay5us();

scl=0;

}

void iic_stop(void)

{ delay5us();

sda=0;

delay5us();

scl=1;

delay5us();

sda=1;

delay5us();

}

void iic_sendbyte(unsigned char x)

{char i;

for(i=0;i<8;i++)

{ delay5us();

sda=x&0x80;

delay5us();

scl=1;

delay5us();

scl=0;

x=x<<1;

}

}

unsigned char iic_recbyte(void)

{unsigned i,x;

for(i=0;i<8;i++)

{x=x<<1;

delay5us();

sda=1;

delay5us();

scl=1;

delay5us();

x=x|sda;

scl=0;

}

return x;

}

void iic_ack(bit ack)

{if(ack)

sda=1;

else sda=0; //给出"0"响应表示收到,给出"1"响应表示没收到(不响应)

delay5us();

scl=1;

delay5us();

scl=0;

}

bit iic_recack(void)

{bit ack;

sda=1;

delay5us();

scl=1;

delay5us();

ack=sda; //收到"0"响应表示发送成功,收到"1"响应表示发送失败(从机未响应)

scl=0;

return ack;

}

------------------------以上为i2c.h内容---------------------------------------------------------------------

电眼与探针的区别 就好比人的视觉概念与触觉概念差不多 电眼是在看的光或者是紫外线的情况下动作 传给程控器信号 而探针则是火焰烧到上面与形成离子流 在一般油机上面都是用电眼 气机多用探针 油气两用机型也是用电眼 安徽国赛燃烧器设备销售有限公司

 
友情链接
鄂ICP备19019357号-22