1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標題:
單片機溫度報警器 電路圖+程序
[打印本頁]
作者:
benbens
時間:
2015-7-14 19:47
標題:
單片機溫度報警器 電路圖+程序
00000000.png
(73.5 KB, 下載次數: 384)
下載附件
2015-7-14 19:46 上傳
#include <REG52.H>
#include<intrins.h> //包含_nop_()函數定義的頭文件
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
sbit DQ=P3^3;
sbit LED1=P2^3;
sbit LED2=P2^6;
sbit fmq=P1^6;
union{
uchar c[2];
uint x;
}temp;
uint cc,cc2;
float cc1;
bit flag1;
uchar buffer1[]={"dangerous!!"} ;
uchar buffer2[]={"welcome!!!!"};
uchar buffer3[]={"tem"};
uchar num[6]={"+00.0"};
/*void delay1us(uint z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--)
{;} //500us
}*/
void delay500us()
{
unsigned char j;
for(j=0;j<57;j++)
{;} //500us
}
void beep()
{
fmq=0;
delay500us(); /* 頻率為1kHz,500us的低電平,導通(三極管)*/
fmq=1; /* 頻率為1kHz,500us的高電平,未通(三極管)*/
delay500us();
}
//查忙函數
void wait()
{
P0=0xff;
RS=0;
RW=1;
EN=1;
EN=0;
while(P0&0x80)
{
EN=0;
EN=1;
}
}
void wc51com(uchar com)
{
wait();
EN=0;
RS=0;
RW=0;
EN=1;
P0=com;
EN=0;
}
void wc51r(uchar dat)
{
wait();
EN=0;
RS=1;
RW=0;
EN=1;
P0=dat;
EN=0;
}
void init()
{
wc51com(0x01);
wc51com(0x38);
wc51com(0x0c);
wc51com(0x06);
}
/*****************************
**********************************************/
void delay(int useconds)
{
for(; useconds>0;useconds--);
}
uchar ow_reset(void)
{
uchar presence;
DQ=0;//CPU把總線拉低的操作;
delay(50);//拉低480微秒到960微秒
DQ=1;//CPU釋放總線
delay(3);//延時15——60微秒;待總線回到高電平喚醒13B20
presence=DQ;//DS13B20把總線發送低電平表示復位成功;13B20完好可以工作
delay(25);//延時60到240
return(presence) ;
}
uchar read_byte(void)
{
uchar i;
uchar value=0;
for(i=8; i>0;i--)
{
value>>=1;
DQ=0;
DQ=1;
delay(1);
if(DQ) value|=0x80;
delay(6);
}
return(value);
}
void write_byte(uchar val)
{
uchar i;
for(i=8;i>0;i--)
{
DQ=0;
DQ=val&0x01;
delay(5);
DQ=1;
val=val/2;
}
delay(5);
}
void read_Temperature(void)
{
ow_reset();//初始化; 復位
write_byte(0xCC);//溫度變化指令(最開始為0)
write_byte(0xBE);//讀9個字節類容的溫度
temp.c[1]=read_byte(); //讀出來顯示低位
temp.c[0]=read_byte(); //讀出來顯示高位
_nop_(); _nop_();_nop_();
ow_reset(); //初始化
write_byte(0xCC); //溫度變化指令
write_byte(0x44);//讀存入到9個字節中
return;
}
void main()
{
uchar k=0;
uint t=0;
delay(10); fmq=1;
EA=0;
flag1=0;
init();
wc51com(0x80+0x00);
wc51r('m');
wc51r('e');
while(1)
{
delay(10000);
read_Temperature();
cc=temp.c[0]*256.0+temp.c[1];
if(temp.c[0]>0xf8){flag1=1;cc=~cc+1;}else flag1=0;
cc1=cc*0.0625; //得到實際的值;
cc2=cc1*100;//1710
if(((cc2/1000)*10+(cc2/100-(cc2/1000)*10)>=37)&((cc2/1000)*10+(cc2/100-(cc2/1000)*10)<=40))
{
LED2=1;
LED1=0;
wc51com(0x80+0x04);
for(k=0;k<11;k++)
{wc51r(buffer2[k]);}
}
else
{
LED2=0;
LED1=1;
wc51com(0x80+0x04);
for(k=0;k<11;k++)
{
wc51r(buffer1[k]);
}
wc51com(0x80+0x40) ;
for(k=0;k<3;k++)
{
wc51r(buffer3[k]);
}
for(t=0;t<1000;t++) //響
{
{
beep(); //一次循環是1kHz,1MS;1000表示蜂鳴器響起來
}
fmq=1; //不響;
delay500us();
delay500us();
}
}
num[1]=cc2/1000+0x30;//1710/100=1;
if(num[1]==0x30)
num[1]=0x20;
num[2]=cc2/100-(cc2/1000)*10+0x30;//1710/100=17-(1*10)=7;
num[4]=cc2/10-(cc2/100)*10+0x30;//1710/10=171-(17*10)=1
if(flag1==1)
{
num[0]='-';
}
else
num[0]='+';
wc51com(0x80+0x44);
for(k=0;k<5;k++)
{wc51r(num[k]);}
}
}#include <REG52.H>
#include<intrins.h> //包含_nop_()函數定義的頭文件
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
sbit DQ=P3^3;
sbit LED1=P2^3;
sbit LED2=P2^6;
sbit fmq=P1^6;
union{
uchar c[2];
uint x;
}temp;
uint cc,cc2;
float cc1;
bit flag1;
uchar buffer1[]={"dangerous!!"} ;
uchar buffer2[]={"welcome!!!!"};
uchar buffer3[]={"tem"};
uchar num[6]={"+00.0"};
/*void delay1us(uint z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--)
{;} //500us
}*/
void delay500us()
{
unsigned char j;
for(j=0;j<57;j++)
{;} //500us
}
void beep()
{
fmq=0;
delay500us(); /* 頻率為1kHz,500us的低電平,導通(三極管)*/
fmq=1; /* 頻率為1kHz,500us的高電平,未通(三極管)*/
delay500us();
}
//查忙函數
void wait()
{
P0=0xff;
RS=0;
RW=1;
EN=1;
EN=0;
while(P0&0x80)
{
EN=0;
EN=1;
}
}
void wc51com(uchar com)
{
wait();
EN=0;
RS=0;
RW=0;
EN=1;
P0=com;
EN=0;
}
void wc51r(uchar dat)
{
wait();
EN=0;
RS=1;
RW=0;
EN=1;
P0=dat;
EN=0;
}
void init()
{
wc51com(0x01);
wc51com(0x38);
wc51com(0x0c);
wc51com(0x06);
}
/*****************************
**********************************************/
void delay(int useconds)
{
for(; useconds>0;useconds--);
}
uchar ow_reset(void)
{
uchar presence;
DQ=0;//CPU把總線拉低的操作;
delay(50);//拉低480微秒到960微秒
DQ=1;//CPU釋放總線
delay(3);//延時15——60微秒;待總線回到高電平喚醒13B20
presence=DQ;//DS13B20把總線發送低電平表示復位成功;13B20完好可以工作
delay(25);//延時60到240
return(presence) ;
}
uchar read_byte(void)
{
uchar i;
uchar value=0;
for(i=8; i>0;i--)
{
value>>=1;
DQ=0;
DQ=1;
delay(1);
if(DQ) value|=0x80;
delay(6);
}
return(value);
}
void write_byte(uchar val)
{
uchar i;
for(i=8;i>0;i--)
{
DQ=0;
DQ=val&0x01;
delay(5);
DQ=1;
val=val/2;
}
delay(5);
}
void read_Temperature(void)
{
ow_reset();//初始化; 復位
write_byte(0xCC);//溫度變化指令(最開始為0)
write_byte(0xBE);//讀9個字節類容的溫度
temp.c[1]=read_byte(); //讀出來顯示低位
temp.c[0]=read_byte(); //讀出來顯示高位
_nop_(); _nop_();_nop_();
ow_reset(); //初始化
write_byte(0xCC); //溫度變化指令
write_byte(0x44);//讀存入到9個字節中
return;
}
void main()
{
uchar k=0;
uint t=0;
delay(10); fmq=1;
EA=0;
flag1=0;
init();
wc51com(0x80+0x00);
wc51r('m');
wc51r('e');
while(1)
{
delay(10000);
read_Temperature();
cc=temp.c[0]*256.0+temp.c[1];
if(temp.c[0]>0xf8){flag1=1;cc=~cc+1;}else flag1=0;
cc1=cc*0.0625; //得到實際的值;
cc2=cc1*100;//1710
if(((cc2/1000)*10+(cc2/100-(cc2/1000)*10)>=37)&((cc2/1000)*10+(cc2/100-(cc2/1000)*10)<=40))
{
LED2=1;
LED1=0;
wc51com(0x80+0x04);
for(k=0;k<11;k++)
{wc51r(buffer2[k]);}
}
else
{
LED2=0;
LED1=1;
wc51com(0x80+0x04);
for(k=0;k<11;k++)
{
wc51r(buffer1[k]);
}
wc51com(0x80+0x40) ;
for(k=0;k<3;k++)
{
wc51r(buffer3[k]);
}
for(t=0;t<1000;t++) //響
{
{
beep(); //一次循環是1kHz,1MS;1000表示蜂鳴器響起來
}
fmq=1; //不響;
delay500us();
delay500us();
}
}
num[1]=cc2/1000+0x30;//1710/100=1;
if(num[1]==0x30)
num[1]=0x20;
num[2]=cc2/100-(cc2/1000)*10+0x30;//1710/100=17-(1*10)=7;
num[4]=cc2/10-(cc2/100)*10+0x30;//1710/10=171-(17*10)=1
if(flag1==1)
{
num[0]='-';
}
else
num[0]='+';
wc51com(0x80+0x44);
for(k=0;k<5;k++)
{wc51r(num[k]);}
}
}
復制代碼
作者:
ludaijin
時間:
2015-9-25 09:44
怎么有兩個頭件定義啊
作者:
ludaijin
時間:
2015-9-25 10:36
正好做一個太強了,賺點幣
作者:
月靈影只
時間:
2015-9-25 18:52
大神請問一下= =
cc=temp.c[0]*256.0+temp.c[1];
if(temp.c[0]>0xf8){flag1=1;cc=~cc+1;}else flag1=0;
cc1=cc*0.0625; //得到實際的值;
cc2=cc1*100;//1710
這一段是怎么算的= =代表了什么意思
作者:
一閃而過丶
時間:
2015-12-20 19:50
大神可以發張原理圖看看嗎?放大太模糊了
作者:
li8zhen
時間:
2016-6-14 22:04
大神請問一下= =
cc=temp.c[0]*256.0+temp.c[1];
if(temp.c[0]>0xf8){flag1=1;cc=~cc+1;}else flag1=0;
cc1=cc*0.0625; //得到實際的值;
作者:
amazing明
時間:
2016-11-14 18:05
這個圖能發個清晰點點嗎
作者:
羅塔尼尼的黑犬
時間:
2016-11-14 18:19
這個圖能發個清晰點點嗎謝謝分享
作者:
a598089072
時間:
2017-2-26 13:50
沒有文件下載?
作者:
a598089072
時間:
2017-3-25 07:52
學習了,不錯不錯
作者:
way。
時間:
2017-6-13 21:59
有圖嗎
作者:
348652560
時間:
2017-6-15 17:40
非常好
作者:
小和尚2
時間:
2017-6-19 17:38
大神,這個溫度范圍是多少啊,
作者:
A_One
時間:
2017-10-16 10:52
樓主,能不能發一張清楚一點的圖,這個圖太模糊了,謝謝啦
作者:
yyfpy
時間:
2017-10-17 11:16
學習了!
作者:
zlzw1500
時間:
2018-3-18 22:02
可以的
作者:
GTY123
時間:
2018-3-20 17:27
很厲害
作者:
奇怪的荔枝
時間:
2018-5-4 11:07
大神,能把電路圖的文件發來么
作者:
我只是過客
時間:
2019-4-8 21:48
非常給力!!!
作者:
fujiyyqx
時間:
2020-6-15 11:41
可以發下仿真鏈接嗎
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1