欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
stc15f2k60s2單片機(jī)DS18B20芯片溫度采集與控制源碼
[打印本頁(yè)]
作者:
dianfanbaoyihao
時(shí)間:
2018-5-12 21:33
標(biāo)題:
stc15f2k60s2單片機(jī)DS18B20芯片溫度采集與控制源碼
單片機(jī)源程序如下:
//******************溫度采集與控制*******DS18B20芯片*******************//
#include<stc15f2k60s2.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P1^4; //單總線接口
//數(shù)碼管顯示、按鍵、板子初始化、延時(shí)函數(shù)定義
void delayms(int ms);
void allinit();
//void keyscan();
void keyscan16();
void Timer0Init(void);
void display1(uchar yi,uchar er);
void display2(uchar san,uchar si);
void display3(uchar wu,uchar liu);
void display4(uchar qi,uchar ba);
//溫度轉(zhuǎn)化函數(shù)
uchar Tempget();
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
uchar yi,er,san,si,wu,liu,qi,ba;
uchar wendu,tt=0;
uchar max=35,min=25,qujian;
bit S7_Flag=0,S6_Flag=0,S5_Flag=0,S4_Flag=0,fla=0;
//********************************主函數(shù)******************************//
void main()
{
allinit();
Timer0Init();
yi=10;er=1;san=10;si=11;wu=11;liu=11;qi=0;ba=0;
while(1)
{
wendu=Tempget();
if(wendu<min)
{
qujian=0;P2|=0xa0;P2&=0xbf;P0=0x00;
}
else if((wendu>=min)&&(wendu<=max))
{
qujian=1;P2|=0xa0;P2&=0xbf;P0=0x00;
}
else if(wendu>max)
{
qujian=2;P2|=0xa0;P2&=0xbf;P0=0x10;
}
yi=10;er=qujian,san=10,si=11,wu=11,liu=11,qi=wendu/10;ba=wendu%10;
//keyscan();
keyscan16();
display1(yi,er);
display2(san,si);
display3(wu,liu);
display4(qi,ba);
}
}
//*****************************溫度設(shè)置函數(shù)*************************//
//void
//*****************************定時(shí)函數(shù)****************************//
void Timer0Init(void) //5毫秒@11.0592MHz
{
AUXR |= 0x80; //定時(shí)器時(shí)鐘1T模式
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TL0 = 0x00; //設(shè)置定時(shí)初值
TH0 = 0x28; //設(shè)置定時(shí)初值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時(shí)器0開始計(jì)時(shí)
ET0=1;EA=1;//打開定時(shí)器
}
void timer0() interrupt 1
{
tt++;
if((tt==160)&&(qujian==0))
{
tt=0;
if(fla==1){fla=0;P2|=0x80;P2&=0x9f;P0=0xfe;}
else if(fla==0){fla=1;P2|=0x80;P2&=0x9f;P0=0xff;}
}
if((tt==80)&&(qujian==1))
{
tt=0;
if(fla==1){fla=0;P2|=0x80;P2&=0x9f;P0=0xfe;}
else if(fla==0){fla=1;P2|=0x80;P2&=0x9f;P0=0xff;}
}
if((tt==40)&&(qujian==2))
{
tt=0;
if(fla==1){fla=0;P2|=0x80;P2&=0x9f;P0=0xfe;}
else if(fla==0){fla=1;P2|=0x80;P2&=0x9f;P0=0xff;}
}
}
//*****************************DS18B20芯片************溫度函數(shù)開始************************//
//單總線延時(shí)函數(shù)
void Delay_OneWire(unsigned int t)
{
unsigned char i;
while(t--){
for(i=0; i<8; i++);
}
}
//通過(guò)單總線向DS18B20寫一個(gè)字節(jié)
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ = 0;
DQ = dat&0x01;
Delay_OneWire(50);
DQ = 1;
dat >>= 1;
}
Delay_OneWire(50);
}
//從DS18B20讀取一個(gè)字節(jié)
unsigned char Read_DS18B20(void)
{
unsigned char i;
unsigned char dat;
for(i=0;i<8;i++)
{
DQ = 0;
dat >>= 1;
DQ = 1;
if(DQ)
{
dat |= 0x80;
}
Delay_OneWire(50);
}
return dat;
}
//DS18B20設(shè)備初始化
bit init_ds18b20(void)
{
bit initflag = 0;
DQ = 1;
Delay_OneWire(120);
DQ = 0;
Delay_OneWire(800);
DQ = 1;
Delay_OneWire(100);
initflag = DQ;
Delay_OneWire(50);
return initflag;
}
//DS18B20溫度獲取函數(shù)
uchar Tempget()
{
uchar temp,low,high;
init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
Delay_OneWire(200);
init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
low=Read_DS18B20();
high=Read_DS18B20();
temp=high<<4;temp|=(low>>4);
return temp;
}
//************************DS18B20芯片****************溫度函數(shù)結(jié)束***********************//
//************************延時(shí)函數(shù)***************************//
void delayms(int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=845;j>0;j--);
}
//***********************板子初始化函數(shù)**********************//
void allinit()
{
P2|=0xa0;P2&=0xbf;P0=0x00;
P2|=0x80;P2&=0x90;P0=0xff;
P2|=0xc0;P2&=0xdf;P0=0xff;
P2|=0xe0;P2&=0xff;P0=0xff;
}
////***********************獨(dú)立按鍵函數(shù)************************//
//void keyscan()
//{
// if(P30==0)
// {
// S7_Flag=1;
// }
// else if(P31==0)
// {
// S6_Flag=1;
// }
// else if(P32==0)
// {
// S5_Flag=1;
// }
// else if(P33==0)
// {
// S4_Flag=0;
// }
//
// if((P30==1)&&(S7_Flag==1))
// {
// S7_Flag=0;
// yi=2;san=11;
// }
// else if((P31==1)&&(S6_Flag==1))
// {
// S6_Flag=0;
// yi=3;san=10;
// }
// else if((P32==1)&&(S5_Flag==1))
// {
// S5_Flag=0;
// yi=4;san=9;
// }
// else if((P33==1)&&(S4_Flag==1))
// {
// S4_Flag=0;
// yi=5;san=8;
// }
//}
//***************************矩陣按鍵****************************//
void keyscan16()
{
uchar temp;
//第一列
P44=0;P42=1;P3=0x7f;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
delayms(5);
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0x7e:break;
case 0x7d:break;
case 0x7b:break;
case 0x77:break;
}
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0x0f;
}
}
//第二列
P44=1;P42=0;P3=0xbf;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
delayms(5);
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0xbe:break;
case 0xbd:break;
case 0xbb:break;
case 0xb7:break;
}
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0x0f;
}
}
//第三列
P44=1;P42=1;P3=0xdf;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
delayms(5);
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0xde:break;
case 0xdd:break;
case 0xdb:break;
case 0xd7:break;
}
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0x0f;
}
}
//第四列
P44=1;P42=1;P3=0xef;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
delayms(5);
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0xee:break;
case 0xed:break;
case 0xeb:break;
case 0xe7:break;
}
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0x0f;
}
}
}
//********************數(shù)碼管顯示函數(shù)******************//
//第一、二個(gè)數(shù)碼管
void display1(uchar yi,uchar er)
{
P2|=0xc0;P2&=0xdf;P0=0x01;
P2|=0xe0;P2&=0xff;P0=tab[yi];
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
溫度采集與控制.rar
(41.16 KB, 下載次數(shù): 63)
2018-5-12 21:33 上傳
點(diǎn)擊文件名下載附件
DS18B20
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1