|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2014-6-29 12:58:13
|
显示全部楼层
//==============MAIN.C==================
#include"config.h"
bit flag_get,keyflag; //定义采集温度标志位和按键标志位
sbit PWM=P3^4; //定义脉冲端口
unsigned char UpT,DoT,NowT; //上限温度,下限温度,目前温度
unsigned int temp; //定义中间变量
unsigned char dat[8]; //定义显示数组
unsigned int ReadTemperature(void); //读当前温度
void deplay_50us(unsigned char t); //50us延时函数
main() //主函数
{
// ct107_init(); //初始化板(关蜂鸣器,继电器,LED等)
//开定时器T0
EA=1; //开总中断
while(1)
{
// key();
temp=ReadTemperature();
NowT=temp>>4; //读温度整数部分
flag_get=0;
}
}
/*------------------------------------------------------
读取温度
-------------------------------------------------------*/
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned int b=0;
unsigned int t=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
delay(50);
Init_DS18B20();
EA=0;
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
a=ReadOneChar(); //低位
b=ReadOneChar(); //高位
b<<=8;
t=a+b;qc
EA=1;
return(t);
}
/*-----------------------------------------------------------
定时器中断
------------------------------------------------------------*/
/*-----------------------------------------------------------
大约50us的延时函数
-----------------------------------------------------------*/
void deplay_50us(unsigned char t)
{
unsigned char j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
#ifndef config_h_
#define config_h_
//==================CONFIG.H================
#include "reg52.h"
#include "18b20.h"
#include <reg52.h>
#include <intrins.h>
sbit IO_18B20 = P3^2; //DS18B20 通信引脚
/* 软件延时函数,延时时间(t*10)us */
void DelayX10us(unsigned char t)
{
do {
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
} while (--t);
}
#endif |
|