久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
三點溫度采集及串口發送51單片機源碼
[打印本頁]
作者:
ZdaRui
時間:
2018-4-18 21:02
標題:
三點溫度采集及串口發送51單片機源碼
三個DS18B20的溫度采集單片機源程序如下:
#include <reg52.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit ds = P2^0;
sbit ds2 = P2^1;
sbit ds3 = P2^2;
sbit Led1 = P0^4;
sbit Led2 = P0^5;
sbit Led3 = P0^7;
uint temp,temp2,temp3; //整形溫度數據
float f_temp1,f_temp2,f_temp3; //浮點型溫度數據
uchar rev=0,flag_rev=0;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*****DS18B20復位,初始化函數*****/
void dsreset(void)
{
uint i;
ds = 0;
i = 103;
while(i>0)
i--;
ds = 1;
i = 4;
while(i>0)
i--;
}
void dsreset2(void)
{
uint i;
ds2 = 0;
i = 103;
while(i>0)
i--;
ds2 = 1;
i = 4;
while(i>0)
i--;
}
void dsreset3(void)
{
uint i;
ds3 = 0;
i = 103;
while(i>0)
i--;
ds3 = 1;
i = 4;
while(i>0)
i--;
}
/*****讀1位數據函數*****/
bit tempreadbit(void)
{
uint i;
bit dat;
ds = 0;
i++;
ds = 1;
i++;
i++;
dat = ds;
i = 8;
while(i>0)
i--;
return (dat);
}
bit tempreadbit2(void)
{
uint i;
bit dat;
ds2 = 0;
i++;
ds2 = 1;
i++;
i++;
dat = ds2;
i = 8;
while(i>0)
i--;
return (dat);
}
bit tempreadbit3(void)
{
uint i;
bit dat;
ds3 = 0;
i++;
ds3 = 1;
i++;
i++;
dat = ds3;
i = 8;
while(i>0)
i--;
return (dat);
}
/*****讀一個字節數據函數*****/
uchar tempread(void)
{
uchar i,j,dat;
dat = 0;
for(i=1;i<=8;i++)
{
j = tempreadbit();
dat = (j<<7)|(dat>>1);
}
return (dat);
}
uchar tempread2(void)
{
uchar i,j,dat;
dat = 0;
for(i=1;i<=8;i++)
{
j = tempreadbit2();
dat = (j<<7)|(dat>>1);
}
return (dat);
}
uchar tempread3(void)
{
uchar i,j,dat;
dat = 0;
for(i=1;i<=8;i++)
{
j = tempreadbit3();
dat = (j<<7)|(dat>>1);
}
return (dat);
}
/*****向DS18B20寫一個字節數據函數*****/
void tempwritebyte(uchar dat)
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb = dat&0x01;
dat = dat>>1;
if(testb)
{
ds = 0;
i++; i++;
ds = 1;
i = 8;
while(i>0)
i--;
}
else
{
ds = 0;
i = 8;
while(i>0)
i--;
ds = 1;
i++; i++;
}
}
}
void tempwritebyte2(uchar dat)
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb = dat&0x01;
dat = dat>>1;
if(testb)
{
ds2 = 0;
i++; i++;
ds2 = 1;
i = 8;
while(i>0)
i--;
}
else
{
ds2 = 0;
i = 8;
while(i>0)
i--;
ds2 = 1;
i++; i++;
}
}
}
void tempwritebyte3(uchar dat)
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb = dat&0x01;
dat = dat>>1;
if(testb)
{
ds3 = 0;
i++; i++;
ds3 = 1;
i = 8;
while(i>0)
i--;
}
else
{
ds3 = 0;
i = 8;
while(i>0)
i--;
ds3 = 1;
i++; i++;
}
}
}
void tempchange(void)
{
dsreset();
delay(1);
tempwritebyte(0xcc); //寫跳過讀ROM指令
tempwritebyte(0x44); //寫溫度轉換指令
}
void tempchange2(void)
{
dsreset2();
delay(1);
tempwritebyte2(0xcc); //寫跳過讀ROM指令
tempwritebyte2(0x44); //寫溫度轉換指令
}
void tempchange3(void)
{
dsreset3();
delay(1);
tempwritebyte3(0xcc); //寫跳過讀ROM指令
tempwritebyte3(0x44); //寫溫度轉換指令
}
/*****讀取寄存器中存儲的溫度數據*****/
uint get_temp()
{
uchar a,b;
dsreset();
delay(1);
tempwritebyte(0xcc);
tempwritebyte(0xbe);
a = tempread(); //低八位
b = tempread(); //高八位
temp = b;
temp<<=8;
temp = temp|a;
f_temp1 = temp*0.0625;
temp = f_temp1*10+0.5;
f_temp1 = f_temp1+0.05;
return temp;
}
uint get_temp2()
{
uchar a,b;
dsreset2();
delay(1);
tempwritebyte2(0xcc);
tempwritebyte2(0xbe);
a = tempread2(); //低八位
b = tempread2(); //高八位
temp2 = b;
temp2<<=8;
temp2 = temp2|a;
f_temp2 = temp2*0.0625;
temp2 = f_temp2*10+0.5;
f_temp2 = f_temp2+0.05;
return temp2;
}
uint get_temp3()
{
uchar a,b;
dsreset3();
delay(1);
tempwritebyte3(0xcc);
tempwritebyte3(0xbe);
a = tempread3(); //低八位
b = tempread3(); //高八位
temp3 = b;
temp3<<=8;
temp3 = temp3|a;
f_temp3 = temp3*0.0625;
temp3 = f_temp3*10+0.5;
f_temp3 = f_temp3+0.05;
return temp3;
}
/*****串口配置部分*****/
void int_com(void)
{
TMOD = 0X20;
PCON = 0X00;
SCON = 0X50;
TH1 = 0XFd; //波特率9600
TL1 = 0XFd;
TR1 = 1;
SM0 = 0;
SM1 = 1;
REN = 1;
EA = 1;
ES = 1;
}
void comm(char *parr)
{
do
{
SBUF = *parr++; //發送數據
while(!TI); //等待發送完成標志為1
TI = 0; //標志位清0
}
while(*parr); //保持循環直到字符為'\0'
}
void main()
{
uchar buff1[4],buff2[4],buff3[4],buffer[12];
uint m;
int_com();
while(1)
{
tempchange();
tempchange2();
tempchange3();
get_temp(); //獲取溫度
get_temp2();
get_temp3();
sprintf(buff1,"%f",f_temp1); //浮點型溫度格式轉換為字符型
sprintf(buff2,"%f",f_temp2);
sprintf(buff3,"%f",f_temp3);
/*****數據打包處理*****/
for(m=0;m<4;m++)
{
buffer[m] = buff1[m];
buffer[m+4] = buff2[m];
buffer[m+8] = buff3[m];
}
comm(buffer); //串口發送數據
if(flag_rev == 1)
{
ES = 0;
switch(rev)
{
case '0': Led1=1;Led2=1;Led3=1;
break;
case '1': Led1=0;Led2=1;Led3=1;
break;
case '2': Led1=1;Led2=0;Led3=1;
break;
case '3': Led1=1;Led2=1;Led3=0;
break;
case '4': Led1=0;Led2=0;Led3=1;
break;
case '5': Led1=1;Led2=0;Led3=0;
break;
case '6': Led1=1;Led2=0;Led3=1;
break;
case '7': Led1=0;Led2=0;Led3=0;
break;
}
ES = 1;
flag_rev = 0;
}
}
}
void ser() interrupt 4
{
RI = 0;
rev = SBUF;
flag_rev = 1;
}
復制代碼
所有資料51hei提供下載:
三點溫度采集及串口發送51.zip
(88.42 KB, 下載次數: 37)
2018-4-18 21:02 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
精品视频一区二区三区在线观看
|
国产黄色在线
|
久久综合一区二区三区
|
欧美精品二区
|
久久久久9999亚洲精品
|
久草视频观看
|
中国人pornoxxx麻豆
|
亚洲日日操
|
成人免费视频
|
天色综合网
|
中文字幕人成乱码在线观看
|
亚洲精品国产电影
|
日韩一区和二区
|
精品免费国产一区二区三区四区介绍
|
日韩视频在线播放
|
亚洲精品大片
|
国产免费拔擦拔擦8x高清
|
99久久久无码国产精品
|
日韩成人一区
|
一级一级毛片免费看
|
午夜网站视频
|
日韩欧美专区
|
北条麻妃一区二区三区在线观看
|
久久久精品一区二区三区
|
黄色片免费看
|
超碰超碰
|
99reav
|
成人久久18免费网站图片
|
国产中文在线
|
密色视频
|
亚洲欧美日韩高清
|
91在线导航
|
亚洲国产高清高潮精品美女
|
永久免费av
|
亚洲欧美日韩精品久久亚洲区
|
波多野结衣av中文字幕
|
国产一区二区三区免费视频
|
国产精品揄拍一区二区久久国内亚洲精
|
久久av一区二区三区
|
国产三级
|
国产精品美女久久久久久免费
|