温度(温度传感器ds18b20)控制系统(水温) 带ds1302时间显示 lcd1602显示

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
delay(12);
if(k4==0)
{
(times[4])--;
if((times[4])==0x00)
{(times[4])=0x12;}
}
write_1302(0x88,times[4]);
}
break;
case 4:
{
if(k3==0);
delay(12);
if(k3==0)
{
(times[6])++;
i++;i++;
b=DQ;
i=8;
while(i>0)
i--;
return (b);
}
/************************************************************
*Function:读18B20的一个字节
*************************************************************/
delay(12);
if(k3==0)
{
(times[1])++;
if((times[1])==0x60)
{(times[1])=0x00;}
}
if(k4==0);
delay(12);
if(k4==0)
{
(times[1])--;
if((times[1])==0x00)
{(times[1])=0x60; }
void wenduxianshi();
void buzzer();
void jidianqi();
void delay(uint z);
uchar l=0,temp=20;
sbit k2= P3^0;
sbit k3= P3^1;
sbit k4= P3^2;
sbit t= P2^0;
sbit b= P2^2;
}
/************************************************************/
void rdtemp(void)
{
txreset();
rxwait();
delay_b(1);//延时
wrbyte(0xcc);
wrbyte(0xbe);
tpl=rdbyte();
/******************************ds1302******************************************/
#include <intrins.h>//包含_nop_()延时函数
#define uchar unsigned char
#define uint unsigned int
}
write_1302(0x82,times[1]);
}
break;
case 1:
{
if(k3==0);
delay(12);
if(k3==0)
{
(times[2])++;
if((times[2])==0x24)
{(times[2])=0x00;}
write_1302(0x84,times[2]);
}
suanwendu()
{
delay_2(1);
convert();
delay_2(1000);
rdtemp();
x1=(tpl&0xf0)/16+(tph&0x07)*16;
x2=(tpl&0x0f)*(100/16);
}
void xianshi()
{ห้องสมุดไป่ตู้
suanwendu();
LCD_command(0x89);
#define DQ P2_1 //温度接收口
uchar tpl;
uchar tph;
uchar x1,x2;
void delay_b(uint t)
{
uint i;
while(t--)
{
for(i=0;i<125;i++);
}
}
/************************************************************/
**函数名称: write_1302_byte(uchar byte)
**功能描述:向DS1302写入1字节(8位)函数
**输 入: uchar byte
**输出:无
**全局变量:无
**调用模块:无
**说明:
**注意:
*********************************************************/
#include <regX52.h>
#include <intrins.h>
#define uint unsigned int
#define ucharunsigned char
#include"lcd1602.h"
#include"ds1302.h"
#include"ds18b20.h"
void keyscan();
*Function:温度转换
*************************************************************/
void convert(void)
{
txreset();
rxwait();
delay_b(1);//延时
wrbyte(0xcc);
wrbyte(0x44);
}
if(k4==0);
delay(12);
if(k4==0)
{
temp--;
}
}
break;
default: break;
}
}
void wenduxianshi()
{
LCD_command(0xcb);
LCD_write_string("k");
LCD_dat(l%10+0x30);
LCD_write_string(" ");
uchar rdbyte(void)
{
uchar i,j,b;
for(i=1;i<=8;i++)
{
j=rdbit();
b=(j<<7) | (b>>1);
}
return (b);
}
/************************************************************
LCD_dat(temp/10+0x30);
LCD_dat(temp%10+0x30);
}
void buzzer()
{
if(temp==x1)
{
b=0;
delay(200);
b=1;
delay(200);
}
}
void jidianqi()
{
if(temp==x1)
{
t=0;
}
}
void main(void)
void delay(uint z)
{
uint i,j;
for(i=0;i<=z;i++)
for(j=0;j<=500;j++);
}
void keycan()
{
if(k2==0);
delay(12);
if(k2==0)
{
l++;
if(l==7)
{l=0;}
}
switch(l)
{
case 0:
{
if(k3==0);
sbit SCLK_1302=P3^5;//串行时钟引脚位定义
sbit IO_1302=P3^4;//数据引脚位定义
sbit RST_1302=P3^3;//复位引脚位定义
uchar times[]={0x00,0x10,0x21,0x15,0x03,0x20,0x11};//{0x00,0x00,0x00,0x00,0x00,0x00,0x00};
*Function:向18B20写入一个字节
*************************************************************/
void wrbyte(uchar b)
{
uint i;
uchar j, btm;
for(j=1; j<=8;j++)
{
btm=b&0x01;
}
if(k4==0);
delay(12);
if(k4==0)
{
(times[5])--;
if((times[5])==0)
{(times[5])=7;}
}
write_1302(0x8a,times[5]);
}
break;
case 6:
{
if(k3==0);
delay(12);
if(k3==0)
{
temp++;
tph=rdbyte();
}
/************************************************************/
void delay_2(uchar a)//延时函数
{
uchar b,c;
for(b=0;b<a;b++)
for(c=0;c<225;c++);
}
void txreset(void)
{
uint i;
DQ=0;
i=100;
while(i>0) i--;
DQ=1;
i=4;
while(i>0) i--;
}
/************************************************************/
void rxwait(void)
LCD_dat((x1/10)|0x30);
LCD_dat((x1%10)|0x30);
LCD_write_char('.');
LCD_dat((x2/10)|0x30);
LCD_dat((x2%10)|0x30);
LCD_write_char(0xdf);
LCD_write_char('C');
}
}
if(k4==0);
delay(12);
if(k4==0)
{
(times[6])--;
}
write_1302(0x8c,times[6]);
}
break;
case 5:
{
if(k3==0);
delay(12);
if(k3==0)
{
(times[5])++;
if((times[5])==8)
{(times[5])=1;}
{
init_1302();
LCD1602_init();
while(1)
{
Display();
keycan();
xianshi();
wenduxianshi();
jidianqi();
buzzer();
}
}
/************************ds18b20***********************************************/
}
}
/*********************************************************
if(k4==0);
delay(12);
if(k4==0)
{
(times[2])--;
if((times[2])==0x00)
{(times[2])=0x24;}
}
write_1302(0x84,times[2]);
}
break;
case 2:
{
if(k3==0);
delay(12);
if(k3==0)
b=b>>1;
if(btm==1)
{
DQ=0;
i++;i++;
DQ=1;
i=8;
while(i>0)
i--;
}
else
{
DQ=0;
i=8;
while(i>0)
i--;
DQ=1;
i++; i++;
}
}}
/************************************************************
{
uint i;
while(DQ);
while(!DQ);
i=4;
while(i>0) i--;
}
/************************************************************/
bit rdbit(void)
{
uint i;
bit b;
DQ=0;
i++;
DQ=1;
//1302振荡得到的准确时间:秒分时日月星期年
//uchar code inittime[] ={0x00,0x10,0x21,0x15,0x03,0x01,0x11};
//uchar alarm_clock[]={0x14,0x09}; //初始报警时间
/*********************************************************
void write_1302_byte(uchar byte)
{
uchar i;
for(i=0;i<8;i++)
{
if(byte&0x01)//从低字节开始传送
IO_1302=1;//写入1
else
IO_1302=0;//写入0
SCLK_1302=0;
SCLK_1302=1;//写时为上升沿写入
byte=byte>>1;
{
(times[3])++;
if((times[3])==0x31)
{(times[3])=0x00;}
write_1302(0x86,times[3]);
}
if(k4==0);
delay(12);
if(k4==0)
{
(times[3])--;
if((times[3])==0x00)
{(times[3])=0x31;}
}
write_1302(0x86,times[3]);
}
break;
case 3:
{
if(k3==0);
delay(12);
if(k3==0)
{
(times[4])++;
if((times[4])==0x12)
{(times[4])=0x00;}
write_1302(0x8e,0x80);
}
if(k4==0);
相关文档
最新文档