#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
/*************************变量定义************************************/
sbit DQ=P2^2;//ds18b20 端口
sbit beep=P2^3;//蜂鸣器使能端
sbit dula=P2^6;//数码管段选使能
sbit wela=P2^7;//数码管位选使能
sbit add=P3^5;//加键
sbit sub=P3^4;//减键
sbit alarm=P3^6;//设定报警功能键
sbit record=P3^7;//查询温度记录功能键
uchar code tabled[]={
0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, //0~9的七段数码管段码
0x40,0x63,0x39};//- c 的段码
uchar code tablew[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f};//1~8个数码管的位选码
uchar recordtable[10];//存储过去的十个温度值
uchar temperature;//温度值
uchar countsec,recordnum,count;//计数变量
uint countmin;//计数变量
uchar alanum=30;//报警温度值,初始值为30摄氏度
uchar z=65;//消抖延时函数入口参数
/**********************函数声明***************************************/
void delay1(uchar MS);//动态扫描延时子程序
void delay(uchar i);//DS18B20工作延时子程序
void Init_DS18B20();//DS18B20初始化子程序
void WriteOneChar(unsigned char dat);//向DS18B20写一字节数据
uchar ReadOneChar(void);//向DS18B20读一字节数据
void GetTemperature();//由DS18B20产生温度值
void Display(uchar wei,uchar duan);//数码管驱动子程序
void Alarm();//温度报警
void Showtemperature(uchar tt);//温度显示
void Keeprecord();//记录温度值
void Showrecord();//显示记录的温度值
/*********************主函数*******************************************/
void main()
{
TMOD=0x01;//定时器初始化,定时器0方式1
TH0=(65536-50000)/256;//50ms
TL0=(65536-50000)%256;
EA=1;//开中断
ET0=1;
TR0=1;//启动定时器
while(1)
{
Showtemperature(temperature);//显示实时温度
Alarm();//温度设定、报警
Showrecord();//查询温度记录值
}
}
/************************动态扫描延时函数********************************/
void delay1(uchar MS)
{
int i,j;
for(i=80;i>0;i--)
for(j=MS;j>0;j--);
}
/************************DS18B20工作延时函数*****************************/