找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2601|回复: 5
收起左侧

基于stc12CA60S2单片机的七要素气象站程序

[复制链接]
ID:826942 发表于 2020-11-5 12:50 | 显示全部楼层 |阅读模式
本帖最后由 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功能检测电压,直接实物接上去的,没有画原理图,也没有用仿真,所以没有,我现在传上开发版的截图,大家可以看看。


18B20接口图.png
12864接口图.png

7要素气象站.7z

49.78 KB, 下载次数: 26, 下载积分: 黑币 -5

评分

参与人数 1黑币 +30 收起 理由
admin + 30 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:328014 发表于 2020-11-5 16:36 | 显示全部楼层
能分享一下原理图或者介绍下电路连接吗?
回复

使用道具 举报

ID:826942 发表于 2020-11-5 21:29 | 显示全部楼层
51hei团团 发表于 2020-11-5 16:36
能分享一下原理图或者介绍下电路连接吗?

这里面源码里可以看到电路怎么连接的,我程序说明里有那个传感器接哪里口,温度的好像是P3.7。12864的显示可以看看源码里面的定义,数据用的是P0端口。
回复

使用道具 举报

ID:828160 发表于 2020-11-5 23:43 | 显示全部楼层
为什么在2020年还有人用这天价芯片?
回复

使用道具 举报

ID:826942 发表于 2020-11-6 06:49 来自触屏版 | 显示全部楼层
单片机研究协会 发表于 2020-11-5 23:43
为什么在2020年还有人用这天价芯片?

哈哈,因为我这实验室刚好有多的这个芯片没人用,就顺手拿了
回复

使用道具 举报

ID:826942 发表于 2020-11-6 06:53 来自触屏版 | 显示全部楼层
单片机研究协会 发表于 2020-11-5 23:43
为什么在2020年还有人用这天价芯片?

现在一般工业上都是用什么芯片多些?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表