標題: 51單片機代碼完成的保溫箱代碼 精度0.05 帶報警顯示功能 按鍵控制 [打印本頁]
作者: stubi 時間: 2018-4-25 15:30
標題: 51單片機代碼完成的保溫箱代碼 精度0.05 帶報警顯示功能 按鍵控制
Ex6.c#include<reg52.h> // 包括單片機寄存器定義的頭文件
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit BEEP=P3^7;
sbit DQ=P3^6;
sbit point=P0^7;
sbit motor=P1^1;
sbit lamp=P1^0;
uchar disbuf[3];
uchar code LEDData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//延時子函數//
void delay(uint num)
{
while(num--);
}
//*************初始化*************//
void Init_DS18B20(void)
{
unsigned char x=0;
DQ=1; //DQ先置高電平
delay(8); //稍延時
DQ=0; //·發送復位脈沖
delay(80); //延時(¨>480us)
DQ=1; //拉高數據線
delay(5); //等待(15~60us)
x=DQ; //用x的值來判斷初始化有沒有成功,18B20存在的話x=0,否則x=1
delay(20);
}
//************讀一個字節*************//
ReadOneChar(void)
// 主機數據線先從高拉至低電平1us以上再使數據升為高電平,產生信號//
{
unsigned char i=0;
//每個讀周期最短的持續時間為60us,各個讀周期之間必須有10us以上的高電平恢復期
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);
}
//****************寫一個字節****************//
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
//數據線從高電平拉至低電平,產生起始信號,15us之內將所需寫的位送到數據線上//
for(i=8;i>0;i--)
//在15-60us之間對數據進行采樣,如果是高電平就寫1,否則寫0//
{
DQ=0; //在另一個寫周期前必須有1us以上的高電平恢復期
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
delay(4);
}
//*****************讀取溫度******************//
uchar ReadTemperature(void)
{
uchar fg=0;
uchar tempL=0;
uchar tempH=0;
uint sdate;
uchar pointnum;
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0x44);
delay(125);
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0xbe);
tempL=ReadOneChar();
tempH=ReadOneChar();
if(tempH>0x7f)
{
tempL=~tempL;
tempH=~tempH+1;
fg=1;
}
sdate=tempL/16+tempH*16;
pointnum=(tempL&0x0f)*10/16;
if(fg==1)
{
sdate-=15;
pointnum=0;
-
-
build.rar
2018-4-25 15:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
31.07 KB, 下載次數: 6, 下載積分: 黑幣 -5
代碼
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |