#include "60s212864.h"
#include "delay.h"
#include "ds18b20.h"
#include "adc.h"
#include "AtmAsdx015a.h"
sbit tq=P1^1;//天气
sbit yl=P1^2;//雨量
//sbit fx1=P1^4;//风向
u8 cnt,flag;
u16 fs,speed;
/*********************************************************************/
void Init_T0_T1()
{
TMOD =0x15; //T0计数 T1 定时 都是方式1
TH0=0;TL0=0;
TR0=1;TR1=1;
TH1 =(65536-50000)/256;//50ms中断一次
TL1 =(65536-50000)%256;
TF0=0; TF1=0;
ET0=1;ET1=1;
EA=1;
}
void T0_IRQ() interrupt 3 using 3 //定时
// 关键字 中断向量号
{
TH1 =(65536-50000)/256;//50ms中断一次
TL1 =(65536-50000)%256;
cnt++;
if(cnt>=20)
{
cnt=0;
TR0=0;TR1=0;//先关闭定时器
speed=TH0;
speed=speed<<8;
speed+= TL0;//一秒的脉冲数,如果转一圈是60个脉冲那么:转速=一秒计数*60/60刚刚等于一秒计数值
flag=1; //转换结束
TH0=0;TL0=0; //清0重新计数
TR0=1;TR1=1;
//TF1=0;
}
}
void Time0_IRQ() interrupt 1 using 1
{
TH0=0;TL0=0;
// js_cnt++;
}
/******************************************************/
//主函数
//用于观看显示效果
/******************************************************/
void main(void)
{
u8 i,j;
u16 k,wd,fx;
float sd,qy;
//Timer1_init();
Init_T0_T1();
P1_init();
LCD_init();
LCD_Setaddress(1,1);
print("温度");
LCD_Setaddress(1,5);
print("湿度");
LCD_Setaddress(2,1);
print("风速");
LCD_Setaddress(2,5);
print("风向");
LCD_Setaddress(3,1);
print("天气");
LCD_Setaddress(3,5);
print("雨量");
LCD_Setaddress(4,1);
print("气压");
TR0=1;TR1=1;
while(1)
{
wd=read_temp_ds18b20();
Show_Float(1,3,wd*0.1);//温度
sd = ADCResult(0); //P1^0
sd=sd/256*5;
sd=38.12*sd-39.36;
if(sd>100)
sd=99.9;
Show_Float(1,7,sd);//湿度 RH = 0.03812 Vout – 39.36
fs=speed;
Show_Float(2,3,fs*0.1);//风速 //0-70m/s 一圈1.2m/s
fx = ADCResult(4); //P1^4
fx=fx*14;
Show_Number(2,7,fx*0.1);//风向
if(tq==1&&j==0) //天气
{
LCD_Setaddress(3,3);
print("晴");
}
if(tq==0||j>0)
{
LCD_Setaddress(3,3);
print("雨");
}
if(yl==0) //雨量
{
j++;
}
if(k==60) //雨量一分钟清零
{
j=0;
}
Show_Number(3,7,j);//雨量
qy= GetPressure();
Show_Float(4,3,qy*0.1);//气压//P1^3
i++;
delay(1000);
k++;
}
} |