#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++;
}
} |