久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機實現電子溫度計
[打印本頁]
作者:
topzho
時間:
2019-6-30 12:08
標題:
51單片機實現電子溫度計
功能:用單片機實現電子溫度計,測溫范圍:-55~125 并提供低溫高溫報警,報警溫度可設定
元器件:89s52單片機,DS18B20,12M晶振,10us電容,四聯共陰數碼管各一個.9015三極管兩個,紅綠發光二極管各一個,30p電容兩個,
按鈕四個.電阻若干(見原理圖)
供電:5V.(可采用7805實現更高電壓供電)
按鈕說明:按鈕一(與p1.0相連),按一次進入報警設定,第二次推出設定
按鈕二(與p1.1相連),設定是菜單切換
按鈕三(與p1.2相連),減設定
按鈕四(與p1.3相連),加設定
功用:經適當改裝,可用于各種需要控制溫度的場合,比如空調的溫度控制,鍋爐的控制等...
---------------------
單片機源程序如下:
#include "reg52.h"
#include "absacc.h"
unsigned char code tab[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X40}; //共陰 (cc)
sbit DQ=0xb7; //c51與DS18B20通信口
sbit P07=0x87; //小數點
sbit RED=0x97; //高溫報警燈
sbit GREEN=0x96; //低溫報警燈
sbit SET=0x90; //以下按鈕設置
sbit NEXT=0x91;
sbit REDUCE=0x92;
sbit ADD=0x93;
unsigned char tempL=0; //溫度低八位
unsigned char tempH=0; //溫度高八位
float temperature; //顯示溫度值
float temperatureH=35,temperatureL=0; //報警溫度
int tH=1,tL=1;//報警狀態,1為關閉
int m,k=1,l,keyon,keytype,out=0;//設置報警溫度時使用的中間變量
void delay(unsigned int time)
{
unsigned int n;
n=0;
while(n<time) n++;
return;
}
void display(float k) //顯示溫度
{
if(k>=0) //正溫度顯示
{
P2=0xf7;
P0=tab[(int)(k/100)];
delay(260);
P0=0x00;
}
else //負溫度顯示負號
{
k=-k;
P2=0xf7;
P0=0x40;
delay(260);
P0=0x00;
}
P2=0xfb; //溫度十位顯示 有錯誤 少了個%100
P0=tab[(((int)k)%100)/10];
delay(260);
P0=0x00;
P2=0xfd; //溫度個位顯示
P0=tab[((int)k)%10];
P07=1;
delay(260);
P0=0x00;
P2=0xfe; //溫度一位小數顯示
P0=tab[((int)(k*10))%10];
delay(260);
P0=0x00;
}
Init_DS18B20(void)
{
unsigned char x=0;
DQ=1;
delay(8);
DQ=0;
delay(85);
DQ=1;
delay(14);
x=DQ;
delay(20);
}
ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat=0;
for (i=8;i>0;i--)
{
DQ=1;
delay(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ) dat|=0x80;
delay(4);
}
return(dat);
}
WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
delay(4);
}
ConversionTemperature()
{
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0x44);
delay(20);
}
ReadTemperature(void)
{
char ctempL,ctempH;
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0xbe);
tempL=ReadOneChar();
tempH=ReadOneChar();
if(tempH<0xf8) //溫度是否小于零
temperature=((tempH*256)+tempL)* 0.0625;//大于零
else
{
ctempL=tempL;
ctempH=tempH;
temperature=(((~ctempH)*256)+(~ctempL)+1)* 0.0625;
temperature=-temperature;
}
//delay(200);
//return(temperature);
}
///////////////////////////報警設置顯示/////////////////////////
void Display2()
{ ///////////////////高溫報警顯示////////////////////
if(m==0||m==1)
{
P2=0xf7;
P0=0x76;
delay(70);
P0=0x00;
if(m==0&&k==-1) delay(70);
else
{
if(tH==1)
{
P2=0xfb;
P0=0x71;
delay(70);
P0=0x00;
}
else
{
P2=0xfb;
P0=0x3f;
delay(70);
P0=0x00;
}
}
if(m==1&&k==-1) delay(100);
else
{
if(temperatureH>=0)
{
P2=0xfd;
P0=tab[(int)(temperatureH/10)];
delay(70);
P0=0x00;
P2=0xfe;
P0=tab[(int)(temperatureH)%10];
delay(70);
P0=0x00;
}
else
{
P2=0xfd;
P0=0x40; //////顯示負號
delay(70);
P0=0x00;
P2=0xfe;
P0=tab[(int)(-temperatureH)%10];
delay(70);
P0=0x00;
}
}
}
//////////////////////////////////////////////////
///////////////////低溫報警顯示//////////////////
else if(m==2||m==3)
{
P2=0xf7;
P0=0x38;
delay(70);
P0=0x00;
if(m==2&&k==-1) delay(70);
else
{
if(tL==1)
{
P2=0xfb;
P0=0x71;
delay(70);
P0=0x00;
}
else
{
P2=0xfb;
P0=0x3f;
delay(70);
P0=0x00;
}
}
if(m==3&&k==-1) delay(100);
else
{
if(temperatureL>=0)
{
P2=0xfd;
P0=tab[(int)(temperatureL/10)];
delay(70);
P0=0x00;
P2=0xfe;
P0=tab[(int)(temperatureL)%10];
delay(70);
P0=0x00;
}
else
{
P2=0xfd;
P0=0x40; ////顯示負號
delay(70);
P0=0x00;
P2=0xfe;
P0=tab[(int)(-temperatureL)%10];
delay(70);
P0=0x00;
}
}
}
///////////////////////////////////////////////////////
if(l==200){k=-k;l=0;}
l++;
}
/////////////////////////////報警設置顯示結束///////////////////////////////////
////////////////////////////////報警設置/////////////////////////////////////////
void seting()
{
if(SET==1&&NEXT==1&&REDUCE==1&&ADD==1); //無鍵盤按下
else /////有鍵盤按下時
{
keyon=1;
if(SET==0)keytype=0;
if(NEXT==0)keytype=1;
if(REDUCE==0)keytype=2;
if(ADD==0)keytype=3;
}
if(keyon==1&&SET==1&&NEXT==1&&REDUCE==1&&ADD==1) //鍵盤松開后判斷鍵盤狀態
{
if(keytype==1)////////////////菜單下翻
{
if(m>=3)m=0;
else m++;
}
if(keytype==2) ////////////////加操作
{
if(m==0)tH=-tH;
if(m==1)
{
if(temperatureH>(temperatureL+1)) temperatureH--;
else temperatureH=99;
}
if(m==2)tL=-tL;
if(m==3)
{
if(temperatureL>-9) temperatureL--;
else temperatureL=(temperatureH-1);
}
}
if(keytype==3) ////////////////減操作
{
if(m==0)tH=-tH;
if(m==1)
{
if(temperatureH<99) temperatureH++;
else temperatureH=(temperatureL+1);
}
if(m==2)tL=-tL;
if(m==3)
{
if(temperatureL<(temperatureH-1)) temperatureL++;
else temperatureL=-9;
}
}
if(keytype==0) ///////////跳出溫度設置
{
keyon=0;
keytype=4;
out=1;
}
keyon=0;
keytype=4;
}
}
/////////////////////////////報警設置結束/////////////////////////////////////////
void main()
{
P1=0XFF;
while(1)
{
ConversionTemperature();//溫度轉換
display(temperature);//顯示溫度
if(SET==0) /////////////////////////進入報警溫度設定
{
out=0;
delay(300);
while(SET==0);
m=0;
l=0;
keyon=0;
keytype=4;
while(1)
{
Display2();
seting();
if (out==1)break;
}
delay(200);
while(SET==0);
}
if(tH==1)RED=1;
else if(tH==-1&&temperature>=temperatureH) RED=0; //////滿足條件是開啟高溫報警
else if(temperature<(temperatureH-0.2))RED=1;
if(tL==1)GREEN=1;
if(tL==-1&&temperature<=temperatureL) GREEN=0;//////滿足條件時開啟低溫報警
else if(temperature>(temperatureL+0.2)) GREEN=1;
ReadTemperature();//讀取溫度
display(temperature);//顯示溫度
}
}
復制代碼
所有資料51hei提供下載:
ab2989ca9f6b9ceb6de043c63cd7cc5320100307060217.rar
(2.05 KB, 下載次數: 39)
2019-6-30 12:07 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
5a6b387e6eb881d2978f9b1febb2d45020100307060022.rar
(54.36 KB, 下載次數: 34)
2019-6-30 12:07 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:weixin_34194087
來源:CSDN
原文:
https://blog.csdn.net/weixin_34194087/article/details/87296694
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
三级在线免费观看
|
国产区一区二区三区
|
黄免费观看视频
|
亚洲精品久久久久国产
|
国产成人在线视频
|
欧美精产国品一二三区
|
在线免费看黄
|
久久这里只有精品首页
|
人人玩人人添人人澡欧美
|
国产一区二区精品在线
|
精品国产免费人成在线观看
|
久久久久国产视频
|
国产精品亚洲综合
|
午夜一级做a爰片久久毛片 精品综合
|
成人福利视频网站
|
精品一二
|
欧美一区二区三区国产
|
亚洲一区二区三区在线播放
|
国产精品2
|
亚洲不卡av在线
|
亚洲三级免费看
|
日韩三级一区
|
国产伊人精品
|
成年人精品视频在线观看
|
欧美视频在线播放
|
精品99在线
|
国产美女久久
|
亚洲欧美一区二区三区国产精品
|
亚洲精品中文字幕在线观看
|
欧美三区视频
|
亚洲国产欧美在线
|
国产激情网
|
亚洲一区中文字幕
|
国产精品久久久av
|
国产有码
|
91就要激情
|
一区在线视频
|
99久久精品免费看国产四区
|
精品国产乱码久久久久久蜜柚
|
国产一区二区黑人欧美xxxx
|
天天草天天干天天
|