|
本帖最后由 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功能检测电压,直接实物接上去的,没有画原理图,也没有用仿真,所以没有,我现在传上开发版的截图,大家可以看看。
|
评分
-
查看全部评分
|