找回密码
 立即注册

QQ登录

只需一步,快速开始

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

KL25单片机环境测量与控制

[复制链接]
跳转到指定楼层
楼主
ID:251238 发表于 2017-11-19 22:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.整体需求分析
        利用KL25实现环境温度的智能控制,使周围环境能够在设定温度上下限之间实现控制温度调节.温度传感器检测实时温度,CPU通过所设定的温度与之比较,进而控制加热器加热或者停止加热.并在LCD上显示

2. 温湿度检测的实现      
系统发出读温湿度传感器请求->DHT11开始采集数据->采集来的数据进行A/D转换->转换来的数据回复给系统

3.温度升降控制怎么实现
系统每隔一段时间向DHT11请求温湿度数据->比较当前温度值是否大于预设值->大于则把PORTB 1pin 设置成高电平,驱动电机实施降温,不大于则设置PORTB 1 pin 为低电平,关闭电机->等待下一个请求点

4.硬件逻辑框图

硬件逻辑框图说明
引脚说明
1pin:VDD     用于供电3-5.5VDC
2pin: DATA   接 MKL25 ?UART0_D
4pin: GND    接地,电源负极
电机M正极   接 MKL25 PORTB 1 pin
电机M负极   接地




5.软件流程图



软件流程图说明:
程序开始运行->将所需硬件设备初始化->用户设定温度->系统每隔一段时间向DHT11请求温湿度数据->比较当前温度值是否大于预设值->大于则把PORTB 1pin 设置成高电平,驱动电机实施降温,不大于则设置PORTB 1 pin 为低电平,关闭电机->等待下一个请求点

6.MKL25设计构件
(1) my.h
//==================================================
#ifndef MY_H_
#define MY_H_

#include "common.h"
#include "gpio.h"
#include "light.h"
#include "uart.h"
#include "sysinit.h"
#include "lcd.h"
#include "kb.h"
#include "tpm.h"
#include "led.h"

#define FAN_PORT     PORTB   //风扇使用的端口
#define FAN_PIN      1      //风扇使用的引脚  

void Fan_Control(uint_8 port, uint_8 pin, uint_8 state);

void DHT11_delay_us(uchar n) ;
void DHT11_delay_ms(uint z) ;
void DHT11_start() ;
int DHT11_receive() ;

void My() ;

(2) my.c
#include “my.h”        //包含总头文件

void Fan_Control (uint_8 port, uint_8 pin, uint_8 state)
{
        gpoi_init(port, pin, 1, state)
    gpio_set(port, pin, state);
}

void DHT11_delay_us(uchar n)
{
    while(--n);
}

void DHT11_delay_ms(uint z)
{
   uint i,j;
   for(i=z;i>0;i--)
      for(j=110;j>0;j--);
}

void DHT11_start()
{
   Data=1;
   DHT11_delay_us(2);
   Data=0;
   DHT11_delay_ms(20);   //延时18ms以上
   Data=1;
   DHT11_delay_us(30);
}

int DHT11_receive()      //接收40位的数据
{
    uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
    DHT11_start();
    if(Data==0)
    {
        while(Data==0);   //等待拉高     
        DHT11_delay_us(40);  //拉高后延时80us
        R_H=DHT11_rec_byte();    //接收湿度高八位  
        R_L=DHT11_rec_byte();    //接收湿度低八位  
        T_H=DHT11_rec_byte();    //接收温度高八位  
        T_L=DHT11_rec_byte();    //接收温度低八位
        revise=DHT11_rec_byte(); //接收校正位

        DHT11_delay_us(25);    //结束

        if((R_H+R_L+T_H+T_L)==revise)      //校正
        {
            RH=R_H;
            RL=R_L;
            TH=T_H;
            TL=T_L;
        }
        /*数据处理,方便显示*/
      
        kbv[15]='0'+(TH/10);
        kbv[16]='0'+(TH%10);
        kbv[17]='C';
}
return revise ;
}


void My()
{
        static uint_32 TPMCounter = 0;   //计时器                  
uint_8 value;                    //键盘变量
uint_8 dht11_value ;                        //DHT11变量
    static uint_8 LEDindex=0;        //位选口声明
    uint_8 LEDDataBuffer[4];         //LED显示缓冲区
        uint_8 i;
        //LED缓冲区赋值
    LEDDataBuffer[0]='0';
          LEDDataBuffer[1]='2';
    LEDDataBuffer[2]='3';
    LEDDataBuffer[3]='5';
    //LCD显示缓冲区,其中.表示按下的数字
    uint_8 kbv[32]="Set is .";              
    if((TPM_SC_REG(TPM0_BASE_PTR) & TPM_SC_TOF_MASK) == TPM_SC_TOF_MASK)
    {      
            TPMCounter++;
    }
    BSET(TPM_SC_TOF_SHIFT,TPM_SC_REG(TPM0_BASE_PTR));  //中断置标志位写1清0  
    //处理LED部分
    LEDindex++;                                        //位选位+1
        if (LEDindex>=4)  LEDindex=0;                      //大于4位选口置0
        i=LEDchangeCode(LEDDataBuffer[LEDindex]-'0');      //转码
    LEDshow1(LEDindex,i);                                           //显示LED
        if(TPMCounter>100)                     
        {
                TPMCounter = 0;
            //键盘得到扫描值
            value = KBScanN(2);
            //扫描键值,存于value中
            if(KBDef(value) != 0xff)      //发送键值
            {
               //修改.成为按键值
               kbv[8] = KBDef(value);
               //通过LCD显示出来
kbv[9] = ‘C’;
kbv[10] = ‘ ’;
                   kbv[11] = ‘N’;
kbv[12] = ‘O’;
kbv[13] = ‘W’;
kbv[14] = ‘:’;      
dht11_value  = DHT11_receive();
               LCDShow(kbv);
           while(DHT11_receive())
           {
                           if(vale < DHT11_receive() )
                           {
LCDShow(kbv);
                                           Fan_Control (FAN_PORT,FAN_PIN,1) ;
                           }
                           else
                          {
LCDShow(kbv);
                                           Fan_Control (FAN_PORT,FAN_PIN,0) ;
                           }
            }
            }
}
                  
}

7.编写Main()
//================================
#include “my.h”        //包含总头文件
int main(void)
{
//声明主函数使用的局部变量
uint_8 * lcd_DispalyInit ;   
        //缓冲区赋值
lcd_DispalyInit = (uint_8 *)”Welcome..”;
//初始化底层模块
LCDInit();
KBInit() ;
DHT11Init();
//LCD显示初始字符
LCDShow(lcd_DispalyInit) ;
//进入主程序
My();

return 0 ;
}



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

使用道具 举报

沙发
ID:1 发表于 2017-11-20 04:04 | 只看该作者
能传个资料压缩包吗?代码不全
回复

使用道具 举报

板凳
ID:632782 发表于 2019-10-30 16:38 | 只看该作者
大佬,有完整资料吗?
回复

使用道具 举报

地板
ID:632782 发表于 2019-11-22 09:13 来自手机 | 只看该作者
大佬能不能上传完整的文件
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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