#include<reg52h>
#include<intrinsh>
#define _Nop() _nop_() /定义空指令/
sbit D18B20=P3^7;
sbit k1=P1^5;
unsigned char flag;
unsigned char u,d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
void TempDelay (unsigned char us)
{
while(us--);
}
void Init18b20 (void)
{
D18B20=1;
_nop_();
D18B20=0;
TempDelay(80); //delay 530 uS//80
_nop_();
D18B20=1;
TempDelay(14); //delay 100 uS//14
_nop_();
_nop_();
_nop_();
if(D18B20==0)
flag = 1; //detect 1820 success!
else
flag = 0; //detect 1820 fail!
TempDelay(20); //20
_nop_();
_nop_();
D18B20 = 1;
}
/
Function:向18B20写入一个字节
parameter:
Return:
Modify:
/
void WriteByte (unsigned char wr) //单字节写入
{
unsigned char idata i;
for (i=0;i<8;i++)
{
D18B20 = 0;
_nop_();
D18B20=wr&0x01;
TempDelay(3); //delay 45 uS //5
_nop_();
_nop_();
D18B20=1;
wr >>= 1;
}
}
/
Function:读18B20的一个字节
parameter:
Return:
Modify:
/
unsigned char ReadByte (void) //读取单字节
{
unsigned char idata i;
for(i=0;i<8;i++)
{
D18B20 = 0;
u >>= 1;
D18B20 = 1;
if(D18B20==1)
u |= 0x80;
TempDelay (2);
_nop_();
}
return(u);
}
main()
{unsigned char a,b,c,j;
while(1)
{
Init18b20();
WriteByte(0xcc); //skip rom
WriteByte(0x44); //保存设定值
Init18b20();
WriteByte(0xcc); //skip rom
WriteByte(0xbe); //read Temperature//回调设定值
a=ReadByte();
b=ReadByte();
a=a>>4;
b=b<<4;
c=a+b;
if(c>30)
k1=0;
else
k1=1;
for(j=0;j<250;j++)
{
P0=d[c/10];
P2=0xe3;
TempDelay(100);
P0=d[c%10];
P2=0xe7;
TempDelay(100);
}
}
}
是的,这个可以从主机点位信息中直接启动或者是从总线盘按钮直接启动声光报警器的,上面显示的没有问题的。
主要信息:
青鸟消防股份有限公司于2001年06月15日成立。法定代表人蔡为民,公司经营范围包括:消防设备研发、生产销售、代理;自营进出口业务;普通货运(仅限分支机构经营)等。
“消防”即是消除隐患,预防灾患(即预防和解决人们在生活、工作、学习过程中遇到的人为与自然、偶然灾害的总称),当然狭义的意思在人们认识初期是:(扑灭)火灾的意思。
主要包括火灾现场的人员救援,重要设施设备、文物的抢救,重要财产的安全保卫与抢救,扑灭火灾等。目的是降低火灾造成的破坏程度,减少人员伤亡和财产损失。战时由各级人民防空指挥部统一指挥,以专业消防力量为骨干。
动员企业事业单位、乡镇的专职消防队伍、志愿者队伍和人民群众实施。消防行动主要有:①查明火情及受损情况,了解火灾现场的地形、风向,起火建筑的结构、出入口,被困人员的情况等。②实施现地指挥,组织力量迅速赶往火场。
根据火灾性质选用灭火剂和消防装备,根据火场情况正确运用灭火战术,主要方法包括阻火、设立隔火带、封锁火道、扑灭余火和看守火场等。③迅速抢救被困人员,对受伤人员进行转移后送离。④及时撤离或隔离火场附近的危险物品,防止发生次生灾害。
OE=1;
getdata=P0; // 获取AD转换结果,为8位二进制,0~255
OE=0;
temp=getdata25;
temp=temp/64; // 将结果转换为0~99
dispbuf[6]=temp/10; // 将结果的两位十进制分开,存放在dispbuf数组
dispbuf[7]=temp%10;
P2=0xff;
P1=dispcode[dispbuf[dispcount]]; // 获取数码管显示内容的段码
P2=dispbitcode[dispcount];
dispcount++;
if(dispcount==8) // 数码管应该有8个,前6个显示的什么这段程序中看不出来,你的程序不完整,后面两个就是显示转换的结果。
{
dispcount=0; // 显示完8个,从头开始显示
} 这一部分是什么意思啊
if((lowflag==1) && (highflag==0)) // 因为看不到完整的程序,这部分我猜应该是温度偏低
{
cnta++; // 注意你的这个函数是定时器的中断函数,根据你的初值,我猜定时时间大概是500us,cnta就是在温度偏低的情况下记录过了多少个500us
if(cnta==800) // 当温度偏低的时间到达400ms
{
cnta=0; // 重新开始计时
alarmflag=~alarmflag; // 报警器响或停止响
}
总体上看,你的这个程序要做的是一个温度超限的报警,每500us检测一次,若低于温度下限,则报警,报警声为每04s响一次,再停一次;若高于温度上限,则报警,报警声为每02s响一次,再停一次;不过你的程序不完整,所以上述只是我的猜测。
另外,从程序中看,你的这个程序好像还有点问题,至少我没有看到AD转换结束后又重新启动下一次AD转换,当然,也可能你在其他地方做的,但最好是能在这个中断函数中完成。
以上就是关于谁可以帮我用at89c51编一段温度检测报警器的C语言程序,真的需要你的帮忙全部的内容,包括:谁可以帮我用at89c51编一段温度检测报警器的C语言程序,真的需要你的帮忙、北大青鸟消防主机可编程声光报警器程序如下,1.设置是否有问题2.若要启动声光需要主机自动或者手动、基于ADC0808的调温报警器的程序解释等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)