标题: 求一个可以适配程序的仿真电路!急求 [打印本页]
作者: dura 时间: 2018-10-22 15:09
标题: 求一个可以适配程序的仿真电路!急求
include <AT89C51.h>
#define unchar unsigned char
#define uint unsigned int
uchar Tem1,Tem2,Smok1,Smok2;
uchar Tem=3.6,Smok=4.6; //设定温度烟雾报警阈值
uchar a,a1,a2,b,b1,b2;
void caiji_wenyan();
void delay_10ms(uint i); //程序声明
void panduan );
void baojing();
void main()
{
P10=0;P20=0;WR=1;RD=1;
P0=0XFa;P23=1;P24=1;P25=1;P26=0; //初始化
while(1) //主程序
{
caiji _wenyan (); //第一次采集温度烟雾信号
Tem2=Tem1;Smok2=Smok1;
delay_10ms(5); //延时50ms,让ADC0809准备好第二次数据转换
caiji _wenyan(); //第二次采集温度烟雾信号
panduan(); //将转换的数据与设定的报警阈值比较
baojing(); //报警程序
delay_10ms(1500); //系统隔15s对现场判断
};
}
void caiji_wenyan()
{
P0=0XF8; //选通IN-0,转换温度信号
WR=0;
if(EOC=1) {RD=0;Tem1=P0}; //当ADC0809转换结束,AT89C51打开AD的三态门,AD输出数据
else RD=1; //否则,AD继续转换
delay_10ms(1);
P0=0XF9; //选通IN-1,转换烟雾信号
WR=0;
if(EOC=1){RD=0;Smok1=P0};
else RD=1;
}
void delay_10ms(uint i) //10ms延时程序
{
while(i--)
{
uchar i,j,k;
for(i=5;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
}
}
void panduan()
{
if(Tem1<Tem)a1=1; //当采集的温度高于阈值置1,否则,置0
else a1=0;
if(Tem2<Tem) a2=1;
else a2=0;
if(Smok1<Smok)b1=1; //当采集的烟雾浓度高于阈值置1,否则,置0
else b1=0;
if(Smok2<Smok) b2=1;
else b2=0;
}
baojing()
{
if(a1=a2&&b1=b2) //两次采集数据的标志位相同
{
a=a1;
b=b1;
if(a=1&&b=1){P23=0;P10=1;P26=1}; //温度烟雾标志位都是1,发生火灾
if(a=1&&b=0){P24=0;P10=1;P26=1};
if(a=0&&b=1){P24=0;P10=1;P26=1}; //温度烟雾标志位只有一个1,异常
if(a=0&&b=0)P26=0; //温度烟雾标志位都为0,正常
};
else{P25=0;P10=1;P26=1} //两次采集
作者: admin 时间: 2018-10-22 15:32
根据经验 求程序仿真的帖子一般不会有人回答(网站也不提倡),楼主还是自行在51hei搜索答案吧,在24小时必答区一看就知道怎么提问才有人回答.
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |