|
本帖最后由 0711zhao 于 2020-11-5 21:37 編輯
/*********************************************************************
程序名稱:7要素氣象站
程序版本:V1.0
作 者: 飛花攬月
編寫時間:2020年11月5日
硬件支持: STC12C5A60S2 LCD12864 一體式風速風向傳感器 18B20溫度傳感器 HTG3515濕度傳感器 ACDX01PAAA5氣壓傳感器
接口說明: P1.0 濕度傳感器 P1.1 天氣狀況 P1.2 雨量計算 P1.3 氣壓傳感器 P1.4 風向傳感器 P3.4 風速傳感器
程序說明:1;顯示的12864是帶字庫的
2;因為找不到HTG3515的溫度解析資料用的是18B20作為溫度檢測
3;天氣狀況是模擬感雨計,本質上是一個通斷信號,接通就有雨,斷開就是晴
4:雨量計是模擬翻斗式的翻一下就接通一下,雨量就加一,一分鐘數據清零一下
5;風向是電壓式0-5v 代表360度。
6;風速是脈沖信號,一圈12個脈沖,一圈1.2m/s 一個脈沖0.1m/s
7;氣壓傳感器電壓式0.5v-4.5v 滿量程103.425kpa
PS:目前只是做讀取顯示,并沒做數據存儲。
下一版本要解決的問題:
1;加上歷史數據存儲 是用I2C的24c02類的芯片存儲還是加個SD卡存儲,那個好
2;代碼優化,想向工程化學習,試試用51OS系統等類似的方式
3;顯示增加菜單,目前就一個顯示界面太單調
**********************************************************************/
/***********************************************************************
頭文件包含/SFR定義
***********************************************************************/
#include "60s212864.h"
#include "delay.h"
#include "ds18b20.h"
#include "adc.h"
#include "AtmAsdx015a.h"
/*
**********************************************************************
* 本地數據類型/宏定義
**********************************************************************
*/
/*
**********************************************************************
* 單片機IO口位定義
**********************************************************************
*/
sbit tq=P1^1;//天氣
sbit yl=P1^2;//雨量
/*
**********************************************************************
* 本地全局變量/數組定義
**********************************************************************
*/
u8 cnt;k;
u16 fs;
unsigned int j;
/*
**********************************************************************
* 函數原型聲明
**********************************************************************
*/
/*********************************************************************
*函數名稱:main
*函數功能:主函數
*函數調用:
*參數列表:無
*返 回 值:無
*結 果:
*備 注:
*********************************************************************/
void Timer_Init(void) //T1定時模式 T0計數模式
{
unsigned int a=500;
TMOD = 0x15;
TH1 = (65536-9216)/256;
TL1 = (65536-9216)%256; //10毫秒溢出 0.35%誤差
TH0 = 0x00;
TL0 = 0x00;
TR1 = 1;
TR0 = 1;
ET1 = 1;
while(a--);
EA = 1;
}
void Pulse()
{
fs=TL0+TH0*256; //賦值脈沖
TH0=0x00; //清零
TL0=0x00;
}
void T11(void) interrupt 3 //0 外0 1 定0 2 外1 3 定1 4 串
{
TH1 = (65536-9216)/256; //10ms定時 0%誤差
TL1 = (65536-9216)%256;
cnt++;
if(cnt>=100)
{
Pulse();
cnt=0;
k++;
}
}
/*********************************************************************/
/******************************************************/
//主函數
/******************************************************/
void main(void)
{
u8 i,j;
u16 wd,fx;
float sd,qy;
Timer_Init();
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
Show_Float(2,3,fs*0.1);//風速 //0-70m/s 一圈1.2m/s
fx = ADCResult(4); //P1^4
fx=fx*14;//fx/256*360
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;
k=0;
}
Show_Number(3,7,j);//雨量
qy= GetPressure();//氣壓//P1^3
Show_Float(4,3,qy*0.1);//氣壓//P1^3
i++;
delay(1000);
}
}
新手上路,多多指教
看到有人問我原理圖什么的,我是用一塊60S2代替我開發板上的89C52芯片,然后直接接上12864顯示,利用60S2的P1口帶的ADC功能檢測電壓,直接實物接上去的,沒有畫原理圖,也沒有用仿真,所以沒有,我現在傳上開發版的截圖,大家可以看看。
|
-
-
-
-
7要素氣象站.7z
2020-11-5 16:35 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
49.78 KB, 下載次數: 26, 下載積分: 黑幣 -5
評分
-
查看全部評分
|