
头衔:未定义
等级:小学生
帖数:6
金钱:97
S币:0
|
|
收藏 举报 1F 资料 | 留言 | 编辑 | 引用 | 评帖 | 主页
[自解决]求一个51板做的程序段
现有程序段如下,求高手指点拼接
********************DS18B20********************
#include <reg52.h>
#define uchar unsigned char //预定义 uchar 为 unsigned char 的一个代名词
#define uint unsigned int //预定义uint 为 unsigned int 的一个代名词
sbit L0=P1^0; //定义L0为P1口的第1位
sbit L1=P1^3; //定义L1为P1口的第3位
sbit DQ=P0^2; //定义DQ为P0口的第2位
*******************延时电路*************************
void Delay(uint num)
{
while(num--) ;
}
********************延时0.2s电路********************
void delay02s(void)
{
unsigned char i,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
********************初始化LED灯********************
Init Led()
{
L0=1;
L1=1;
}
********************初始化DS18B20********************
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1;
Delay(8);
DQ = 0;
Delay(80);
DQ = 1;
Delay(14);
x=DQ;
Delay(20);
}
********************读DS18B20********************
ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0;
dat>>=1;
DQ = 1;
if(DQ)
dat|=0x80;
Delay(4);
}
return(dat);
}
********************写DS18B20********************
WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
Delay(5);
DQ = 1;
dat>>=1;
}
Delay(4);
}
********************读取温度值********************
uint ReadTemperature(void)
{
unsigned char m=0;
unsigned char n=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);
m=ReadOneChar();
n=ReadOneChar();
t=n;
t<<=8;
t=t|m;
tt=t*0.0625;
t= tt*10+0.5;
return(t);
}
********************主函数********************
void main(void)
{unsigned int temp;
while(1)
{ temp=ReadTemperature();
if(temp<35) { L0=1;L0=0; }
if(temp>35) { L1=1;L1=0; }
}
}

主程序段如1楼所示,电路图如2楼所示
要实现的功能
1.先是预热,整个电路先初始化,在系统连接正常的情况下L0灯亮
2.MQ-2检测到烟雾,DS18B20在温度达到70度时(同时)L1灯亮并产生蜂鸣
3.当系统中出现故障的情况下L3灯亮
求高手指点,在线等高手
|
----签名档 --------------------------------------------------------
眼镜蛇论坛欢迎您!
Posted:2011-06-03 16:33:07
| |
|