#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P1^7; // DS18B20與單片機(jī)連接口
sbit R4=P1^6; //進(jìn)料口水分測(cè)量電路與單片機(jī)接口
sbit R9=P1^5; //出料口水分測(cè)量電路與單片機(jī)接口
sbit fj1=P0^0;
sbit fj2=P0^3;
sbit fj3=P0^6;
sbit fjr1=P2^0;
sbit fjr2=P2^2;
sbit fjr3=P2^4; //風(fēng)機(jī)與單片機(jī)連接口
sbit jr1=P0^1;
sbit jr2=P0^2;
sbit jr3=P0^4;
sbit jr4=P0^5;
sbit jr5=P0^7;
sbit jr6=P2^7;
sbit fjr4=P2^1;
sbit fjr5=P2^3;
sbit fjr6=P2^5; //電阻絲與單片機(jī)連接口
uint wendu; //溫度值
uint shuifen1; //進(jìn)料口水分值
uint shuifen2; //出料口水分值
uint tem0,tem1; //計(jì)數(shù)器T1計(jì)數(shù)高低位值
/*************************延時(shí)程序****************************/
void delay1(int i)
{
while(i--);
} //延時(shí)ius
void delay2(unsigned int i)
{
unsigned int j;
while(i--)
{
for(j = 0; j < 125; j++);
}
} //延時(shí)ims
void delay3(unsigned int i)
{
unsigned int j,k,h;
while(i--)
{
for(j=0;j<20;j++)
{
for(k=0;k<200;k++)
{
for(h=0;h<250;h++);
}
}
}
} //延時(shí)is
/*************************DS18B20程序****************************/
void init_18b20() //18b20的復(fù)位函數(shù)
{
DQ=1; //總線拉高電平
delay1(10); //延時(shí)10us
DQ=0;
delay1(750);
DQ=1; //釋放總線
_nop_(); //延時(shí)一個(gè)機(jī)器周期
_nop_();
delay1(560);
DQ=1; //總線拉高
}
void weite(uchar dat) //18b20寫(xiě)函數(shù)
{
uchar i; //定義變量
for(i=0;i<8;i++)
{
DQ=0; //總線拉低
DQ=dat﹠0x01;
delay1(45);
DQ=1; //總線拉高
dat>>=1; //右移一位
}
}
uchar read() //18b20?梁?
{
uchar i,dat=0; //定義變量
DQ=1; //總線拉高,讀數(shù)據(jù)條件
_nop_(); //延時(shí)一個(gè)機(jī)器周期
for(i=0;i<8;i++)
{
DQ=0; //總線拉低
_nop_(); //延時(shí)一個(gè)機(jī)器周期
_nop_();
_nop_();
dat>>=1; //右移一位
DQ=1; //總線拉高
_nop_(); //延時(shí),使數(shù)據(jù)總線穩(wěn)定,保證數(shù)據(jù)沒(méi)有錯(cuò)誤
_nop_();
if(DQ) //判斷總線的值是否為1
dat|=0x80; //條件或
delay1(40); //延時(shí)40us
DQ=1; //總線拉高
}
return dat; //返回所讀數(shù)據(jù)
}
uchar read_tu() //讀取18b20中溫度的函數(shù)
{
uchar a,b; //定義變量
init_18b20(); //18b20復(fù)位
weite(0xcc); //寫(xiě)入0xcc,跳過(guò)序列號(hào)
weite(0x44); //啟動(dòng)溫度轉(zhuǎn)換
init_18b20(); //18b20復(fù)位
weite(0xcc);
weite(0xbe); //讀取溫度
a=read(); //裝低字節(jié)
b=read(); //裝高字節(jié)
b<<=4; //b左移四位,前五位為區(qū)分溫度正負(fù)位
a﹠=0xf0; //條件與
a>>=4; //a右移四位,去溫度小數(shù)位
b+=a; //b=a+b,此時(shí)b為溫度整數(shù)值
returu b; //返回所讀數(shù)據(jù)
}
/*************************定時(shí)器程序****************************/
void timer0() interrupt 1 //T0定時(shí)中斷
{
TR0=0;
TR1=0;
TL0=0xB0; //重裝值,定時(shí)50000us
TH0=0x3C;
tem0=TL1; //讀數(shù)
tem1=TH1;
TL1=0x00; //計(jì)數(shù)器1清零
TH1=0x00;
TR0=1;
TR1=1;
}
void timer1() interrupt 3 //T1計(jì)數(shù)中斷
{
TR0=0;
TR1=0;
TL0=0xB0; //重裝值,定時(shí)50000us
TH0=0x3C;
TL1=0x00; //計(jì)數(shù)器1清零
TH1=0x00;
TR0=1;
TR1=1;
}
void init_timer()
{
TMOD=0x51; //0101 0001 定時(shí)器0在模式1下工作16位定時(shí)器,定時(shí)方式 定時(shí)器1在模式1下工作16位計(jì)數(shù)器,T1負(fù)跳變加1
TL0=0xB0; //定時(shí)器0初值 定時(shí)50000us
TH0=0x3C;
TL1=0x00; //定時(shí)器1清零
TH1=0x00;
TR0=1; //T0開(kāi)始計(jì)時(shí)
TR1=1; //T1開(kāi)始計(jì)數(shù)
}
uchar read_sf() //讀取水分的函數(shù)
{
uchar f,shuifen;
f=tem1*256+tem0;
f=f*20;
if(f<6399)
{
shuifen=16;
}
elseif(f<7038)
{
shuifen=6;
}
elseif(f<7287)
{
shuifen=2;
}
else
{
shuifen=0;
}
return shuifen;
}
uchar read_sf1() //讀取進(jìn)料口水分的函數(shù)
{
uchar c;
R4=1;
R9=0;
c=read_sf();
return c;
}
uchar read_sf2() //讀取出料口水分的函數(shù)
{
uchar d;
R4=0;
R9=1;
d=read_sf();
return d;
}
/*************************控制子程序****************************/
void_kongzhi()
{
if(shuifen1>15)
{
fj1=0;
fj2=0;
fj3=0;
if(wendu<0)
{
jr1=0;
jr2=0;
jr3=0;
jr4=0;
jr5=0;
jr6=0;
}
elseif(wendu<15)
{
jr1=0;
jr3=0;
jr5=0;
}
}
elseif(shuifen1>5)
{
fj1=0;
fj2=0;
if(wendu<0)
{
jr1=0;
jr2=0;
jr3=0;
jr4=0;
}
elseif(wendu<15)
{
jr1=0;
jr3=0;
}
}
else
{
fj1=0;
if(wendu<0)
{
jr1=0;
jr2=0;
}
elseif(wendu<15)
{
jr1=0;
}
}
while(shuifen2>1)
{
int i=1;
if(i<7)
{
fjri=0;
i++;
}
delay3(300);
shuifen2=read_sf2();
}
}
/****************************主程序******************************/
void main()
{
EA=1; //開(kāi)中斷
ET0=1; //允許定時(shí)器0中斷
ET1=1; //允許定時(shí)器1中斷
init_timer(); //定時(shí)器、計(jì)數(shù)器初始化設(shè)置
while(1)
{
wendu=read_tu(); //讀取溫度值給全局變量
shuifen1=read_sf1();
shuifen2=read_sf2();
kongzhi();
delay3(600);
}
}







急求啊...
哪位大神幫幫忙...
萬(wàn)分感謝啊...
| 歡迎光臨 (http://m.raoushi.com/bbs/) | Powered by Discuz! X3.1 |