欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3597|回復: 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 ;
}



回復

使用道具 舉報

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 單片機教程網

快速回復 返回頂部 返回列表