找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1924|回复: 2
打印 上一主题 下一主题
收起左侧

有没有大神可以指导一下为什么仿真的时候湿度显示一直是0

[复制链接]
跳转到指定楼层
楼主
本帖最后由 Zzboy 于 2020-6-26 11:52 编辑

#include <reg52.h>
#include "1602.h"
#include "dht.h"
#include "2402.h"
sbit buzzer=P2^0;
//定义LED灯

sbit Led=P1^6;                //除湿灯
sbit fan=P1^5;     
sbit Key_HH1 = P3^4;
sbit Key_HH2 = P3^5;


//定义标识
volatile bit FlagStartRH = 0;  //开始温湿度转换标志
volatile bit FlagKeyPress = 0; //有键按下


//定义温湿度传感器用外部变量
extern U8  U8FLAG,k;
extern U8  U8count,U8temp;
extern U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
extern U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
extern U8  U8comdata;
extern U8  count, count_r;

U16 temp;
S16  humidity;
S16 idata  HH;  //湿度上限
char * pSave;

//定义变量
U16 RHCounter;


//数据初始化
void Data_Init() {
    RHCounter = 0;
    Led = 1;
    HH = 85;
}

//定时器0初始化
void Timer0_Init() {
    ET0 = 1;        //允许定时器0中断
    TMOD = 1;       //定时器工作方式选择
    TL0 = 0x06;
    TH0 = 0xf8;     //定时器赋予初值
    TR0 = 1;        //启动定时器
}

//定时器0中断
void Timer0_ISR (void) interrupt 1 using 0 {
    TL0 = 0x06;
    TH0 = 0xf8;     //定时器赋予初值

    //每2秒钟启动一次温湿度转换
    RHCounter ++;
    if (RHCounter >= 1000) {
        FlagStartRH = 1;
        RHCounter = 0;
    }
}

//存入设定值、
void Save_Setting() {


    pSave =  (char *)&HH;
    wrteeprom(2, *pSave);          //存湿度上限值RH低8位
    DELAY(500);
    pSave ++;
    wrteeprom(3, *pSave);          //存湿度上限值RH高8位
    DELAY(500);

}

//载入设定值、
void Load_Setting() {


    pSave = (char *)&HH;
    *pSave++ = rdeeprom(2);
    *pSave = rdeeprom(3);

    if ((HH>99)||(HH<0)) HH = 85;
}

/********************************************************************
* 名称 : Main()
* 功能 : 主函数
***********************************************************************/
void main() {
    U16 i, j, testnum;

    EA = 0;

    Timer0_Init();  //定时器0初始化

    Data_Init();
    EA = 1;

    L1602_init();
//    L1602_string(1,1," Welcome to H   ");
    //延时
    for (i=0; i<500; i++)
        for (j=0; j<1000; j++)
        {;}
    //清屏

    L1602_string(1,1,"Hum:  %    H:  % ");


    //载入湿度上限设定值
    Load_Setting();
    L1602_char(1, 13, HH/10+48);
    L1602_char(1, 14, HH%10+48);
    while(1) {
        //温湿度转换标志检查
        if (FlagStartRH == 1) {  //定时器
            TR0 = 0;
            testnum = RH();
            FlagStartRH = 0;
            //读出湿度,只取整数部分
            TR0 = 1;
            humidity = U8RH_data_H;
            //显示湿度
            L1602_int(1,2,humidity);
        }
        if (!Key_HH1) {     //上下限处理
            DELAY(5000);
            DELAY(5000);
            DELAY(5000);
            DELAY(5000);
            DELAY(5000);
            DELAY(5000);
            if (!Key_HH1) {
                if(HH>0)
                    HH--;
                else HH=0;
                L1602_char(1, 13, HH/10+48);
                L1602_char(1, 14, HH%10+48);
                Save_Setting();
            }
        }
        if (!Key_HH2) {
            DELAY(5000);
            DELAY(5000);
            DELAY(5000);
            DELAY(5000);
            DELAY(5000);
            DELAY(5000);
            if (!Key_HH2) {
                if(HH>99)
                    HH=99;
                else HH++;
                L1602_char(1, 13, HH/10+48);
                L1602_char(1, 14, HH%10+48);
                Save_Setting();
            }
        }
        if (humidity > HH) {
            fan=0;
            Led = 0;  //灯打开
            buzzer=0;
            DELAY(5000);
            Led = 1;  //湿度灯关
            buzzer=1;
            DELAY(5000);

        } else {

            fan=1;
        }
    }

}

湿度控制.zip

69.92 KB, 下载次数: 5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:764088 发表于 2020-7-6 11:26 | 只看该作者
1)先查,传感器 传 回的值是否正确;不对 就调换 传感器硬件
2) 传感器 值 转换对否,不对,调试 转换软件,
3)显示驱动 环节 是否工作?
回复

使用道具 举报

板凳
ID:332444 发表于 2020-7-6 11:40 | 只看该作者
测试1602传给值看显示是否正常这样去排除
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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