📄 main.c
字号:
#include <main.h>
#include <Adjust.h>
#include <ISR.h>
#include <Meansure.h>
#include <math.h>
sbit P00=P0^0;
sbit P01=P0^1;
sbit P02=P0^2;
sbit P03=P0^3;
sbit P04=P0^4;
sbit P05=P0^5;
sbit P06=P0^6;
sbit P07=P0^7;
sbit P27=P2^7;
void Reset();
char timer_trik,up_warn_T=100,low_warn_T=0,up_warn_H=100,low_warn_H=0;
unsigned int disp_val1=0,disp_val2=0;
/******************************************/
//程序名:void delay()
//功能:延时程序
//作者:唐立军
//时间:2007.11.15
/******************************************/
void delay()
{
unsigned char del1,del2;
for(del1=0;del1<96;del1++)
for(del2=0;del2<255;del2++);
}
/******************************************/
//程序名:void Getkey()
//功能:获取键值程序
//作者:唐立军
//时间:2007.11.15
/******************************************/
unsigned char Getkey()
{
unsigned char temp1,temp2;
temp1 = P2;
temp1 = temp1 & 0x1f;
if(temp1==0)
return 0;
else
{
delay();
temp2 = P2;
temp2 = temp2&0x3f;
if(temp1 == temp2)
return(temp2);
}
}
/******************************************/
//程序名:timer0_initialize(void)
//功能:定时器0初始化程序
//作者:唐立军
//时间:2007.11.15
/******************************************/
static void timer0_initialize(void)
{
EA = 0;
timer_trik = 0;
TR0 = 0;
TMOD &= 0xf0;
TMOD |=0x01;
TL0 = (TIME0_COUNT&0xff);
TH0 = (TIME0_COUNT>>8);
PT0 = 0;
ET0 = 1;
TR0 = 1;
EA = 1;
}
/******************************************/
//程序名:
//功能:
//作者:唐立军
//时间:2007.11.15
/******************************************/
void main()
{
unsigned char c=0;
unsigned char key,flag=0;
unsigned char *p_value1, *p_checksum1;
unsigned char *p_value2, *p_checksum2;
float *p_humidity,*p_temperature,temp1,temp2;
timer0_initialize();
while(1)
{
key = Getkey();
switch(key)
{
case KEY1:
flag++;
if(flag>4)
flag=0;
break;
case KEY2:
break;
case KEY3:
break;
case KEY4:
switch(flag)
{
case 1:T_warn_UP();
break;
case 2:T_warn_LOW();
break;
case 3:H_warn_UP();
break;
case 4:H_warn_LOW();
break;
default:
break;
}
break;
case KEY5:
if(++c==2)
{
Reset();
c=0;
// P02 = 1;P03 = 1;P04 = 1;P05 = 1;P06 = 1;P27=0; //复位LED灯亮
}
break;
default:
break;
}
switch(flag)
{
case 0: P02 = 0;P03 = 1;P04 = 1;P05 = 1;P06 = 1;P27=1; //指示显示温度和湿度LED灯亮
break;
case 1:
P02 = 1;P03 = 0;P04 = 1;P05 = 1;P06 = 1;P27=1; //指示设定温度上限LED灯亮
break;
case 2:
P02 = 1;P03 = 1;P04 = 0;P05 = 1;P06 = 1;P27=1; //指示设定温度下限LED灯亮
break;
case 3:
P02 = 1;P03 = 1;P04 = 1;P05 = 0;P06 = 1;P27=1; //指示设定湿度上限LED灯亮
break;
case 4:
P02 = 1;P03 = 1;P04 = 1;P05 = 1;P06 = 0;P27=1; //指示设定湿度下限LED灯亮
break;
default:
break;
}
}
s_measure(p_value1, p_checksum1, TEMP); //测量温度
s_measure(p_value2, p_checksum2, HUMI); //测量湿度
*p_temperature = (float)(*p_value1+(*(p_value1+1)&0x01)*256+(*(p_value1+1)&0x02)*512+(*(p_value1+1)&0x04)*1024+(*(p_value1+1)&0x08)*2048
+(*(p_value1+1)&0x10)*4096+(*(p_value1+1)&0x20)*8192); //14位温度数据转换为浮点型
*p_humidity = (float)(*p_value1+(*(p_value1+1)&0x01)*256+(*(p_value1+1)&0x02)*512+(*(p_value1+1)&0x04)*1024+(*(p_value1+1)&0x08)*2048); //12位湿度数据转换为浮点型
calc_sth15( p_humidity, p_temperature); //温度和湿度的标度变换
temp1 = *p_temperature;
temp2 = *p_humidity;
temp1=fabs(temp1); //取样获取的浮点数转成绝对值
disp_val1=(int)(temp1*100); //小数点标志point置1。
temp2=fabs(temp2); //取样获取的浮点数转成绝对值
disp_val2=(int)(temp2*100); //小数点标志point置1。
if((disp_val1*100>up_warn_T|disp_val1*100<low_warn_T|disp_val2*100>up_warn_H|disp_val2*100<low_warn_H)) //报警判断
P07=1; //开始报警
}
/******************************************/
//程序名:Reset()
//功能:报警复位
//作者:唐立军
//时间:2007.11.15
/******************************************/
void Reset()
{
P07=0; //报警停止
up_warn_T=100; //将温度上下限设为100,0
low_warn_T=0;
up_warn_H=100; //将湿度上下限设为100,0
low_warn_H=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -