|
/****
函数名main.c*****/
#include <reg52.h>
#include "main.h"
#include "display.h"
#include "18b20.h"
#include "alarm.h"
//extern unsigned char idata flag; //定义外部变量
void main()
{
initalarm();
while(1)
{
SetHighTem();
alarm();
}
}
/*****函数名;display.c
数码管显示采集的温度***/
#include "display.h"
#include "main.h"
unchar ; code table[]={ //共阴极数码管显示
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x40,0x76,0x38};
unchar ; code table1[]={ //第三个数码管有小数点,所以不一样
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,
0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};
/***********
*数码管显示函数
*参数:dat
*返回无
*************/
void diaplay(uint first,uint second,uint third,uint forth)
//显示负温度的函数,第一个数码管显示‘-’
{
wela=0xfe;
dula=table[first];
dealy_ms(5);
dula=0x00;
wela=0xfd;
dula=table[second];
dealy_ms(5);
dula=0x00;
wela=0xfb;
dula=table1[third];
dealy_ms(5);
dula=0x00;
wela=0xf7;
dula=table1[forth];
dealy_ms(5);
dula=0x00;
}
/*****延时函数
*参数:timer
*返回无
**************/
void delay_ms(uint timer)
{
uint i,j;
for(i=0;i<timer;i++)
for(j=0;j<110;j++)
}
#include "main.h"
unsigned char idata flag;
unchar show[4]={1,2,3,4};
void delay_us(uchar a)
{
while(--a);
}
//****初始化子程序
void init1820()
{
DQ=1;_nop_();
DQ=0; //拉低数据线
delay_us(125); //延时510us
delay_us(125);
DQ=1; //提升数据线
delay_us(15); //延时35us
while(DQ) //等待slave器件的ACK信号
{
_nop_();
}
delay_us(60); //延时125us
DQ=1; //提升 数据线,准备数据传输
}
//******write*****
void write1820(uchar a)
{
uchar i;
for(i=0;i<8;i++)
{
if(a & 0x01) //低位在前
{
DQ=0; //结束recovery time
_nop_();_nop_();_nop_();
DQ=1; //发送数据
}
else
DQ=0; //结束recovery time
_nop_();_nop_();_nop_();
DQ=0;}
delay_us(30);
DQ=1;
_nop_(); //开始recovery time
a>>=1;
}
}
//**********read
unsigned char read1820(void)
{
unsigned char i;
unsigned char tmp=0;
DQ=1;_nop_(); //准备读
for(i=0;1<8;i++)
{
tmp>>=1; //低位先发
DQ=0; //读初始化
_nop_();
DQ=1;
delay_us(2);
_nop_();
if(DQ)
tmp |=0x80;
delay_us(30);
DQ=1;_nop_();
}
return tmp;
}
uchar gettemp()
{
unsigned int tp;
init1820();
write1820(0xcc);
delay_ms(2);
write1820(0x44);
_nop_();
DQ=1;
delay_ms(250);delay_ms(250);delay_ms(250);
init1820();
write1820(0xcc);
write1820(0xbe);
show[0]=read1820();
show[1]=read1820();
init1820();
tp=show[1]*256+show[0];
flag=show[1]>>7;
if(flag==0){tp=tp>>4;}
if(flag==1){tp=tp>>4;tp=256-tp;}
//show[0]=(unsigned char)(tp/10);
//show[1]=(unsigned char)(tp% 10);
return tp;
}
#include "main.h"
#include "alarm.h"
#include "display.h"
#include "18b20.h"
extern unsigned char idata flag; //定义外部变量,温度正负标志
uint HNum=50;LNum=10;
uint Tem;
/**********
*显示温度函数
*参数无
*返回无
***********/
void ShowTem()
{
Tem=gettemp(); //读取采集的温度
if(flag==1)
display(16,(Tem% 100)/10,Tem% 10,(Tem* 10)/10);
if(flag==0)
display(Tem/100,(Tem% 100)/10,Tem% 10,(Tem* 10)/10);
}
/*************
*设置低温温度
*参数无
*返回无
************/
void SetLowTem()
{
while(1)
{
display(18,(LNum% 100)/10,LNum% 10,(LNum* 10)/10);
if(k2==0)
delay_ms(50); //按键消抖
if(k2==0)
{
while(!k2); //等待按键释放
LNum++;
}
if(k3==0)
delay_ms(50);
if(k3==0)
{
while(!k3);
LNum--;
}
if(k4==0)
delay_ms(50);
if(k4==0)
{
while(!k4);
break;
}
}
}
/*******
*设置高温温度
*参数无
*返回无
************/
void SetHighTem()
{
HNum=50;
if(k1==0)
delay_ms(10); //按键消抖
if(k1==0)
{
while(!k1); //等待按键释放
while(1)
{
display(17,(HNum% 100)/10,HNum% 10,(HNum* 10)/10);
if(k1==0)
delay_ms(50);
if(k1==0)
{
while(!k1);
break;
}
if(k2==0)
delay_ms(50);
if(k2==0)
{
while(!k2);
HNum++;
}
if(k3==0)
delay_ms(50);
if(k3==0)
{
while(!k3);
HNum--;
}
if(k4==0)
delay_ms(50);
if(k4==0)
{
while(!k4);
break;
}
}
}
ShowTem();
}
/***************
*LED蜂鸣器初始化
*参数无
*返回值无
*****************/
void initalarm()
{
led1=0;
led2=0;
led3=0;
buzzer=1;
}
/***************
*LED蜂鸣器控制
*参数无
*返回值无
*****************/
void alarm()
{
Tem=gettemp();
if( Tem > HNum)
{
led1=1;
led2=0;
led3=0;
buzzer=0;
}
else if( Tem< LNum)
{
led1=1;
led2=0;
led3=0;
buzzer=0;
}
else
{
led1=1;
led2=0;
led3=0;
buzzer=1;
}
}
|
|