久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3010|回復: 0
打印 上一主題 下一主題
收起左側

溫濕度采集程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:263020 發表于 2017-12-18 10:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/**********************************************************
自己上網搜的溫濕度采集程序
***************************************************************/
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#include <intrins.h>
typedef bit BOOL  ;
sbit io = P1^1 ;//(口線定義)
sbit bee=P1^0;
sbit rs = P2^5 ;
sbit rw = P2^6 ;
sbit ep = P2^7 ;
bit flag_300ms ;
sbit K1=P1^2;
sbit K2=P1^3;
sbit K3=P1^4;
uchar yemian=0;//(定義變量)
uchar flat=1;
uchar data_byte;
uchar RH,RL,TH,TL;
uchar WenDu,ShiDu;//報警的溫度和濕度
#include "eeprom52.h"

/****************************延時程序****************************/
void delay(uchar ms)
{       // 延時子程序
  uchar i ;
  while(ms--)
  {
    for(i = 0 ; i<250;i++) ;
  }
}
void delay1()//延時10us
{
uchar i;
i--;
i--;
i--;
i--;
i--;
i--;
}
void longdelay(uchar s) //長延時
{
  while(s--)
  {
    delay(20) ;
  }
}

/******************把數據保存到單片機內部eeprom中******************/
void write_eeprom()
{
SectorErase(0x2000);
  byte_write(0x2000, WenDu);
byte_write(0x2001, ShiDu);
byte_write(0x2060, a_a);
}
/******************把數據從單片機內部eeprom中讀出來*****************/
void read_eeprom()
{
WenDu   = byte_read(0x2000);
  ShiDu = byte_read(0x2001);
a_a      = byte_read(0x2060);
}
/**************開機自檢eeprom初始化*****************/
void init_eeprom()
{
read_eeprom();  //先讀
if(a_a != 2)  //新的單片機初始單片機內問eeprom
{
WenDu   = 30;
ShiDu   = 80;
  a_a = 2;
  write_eeprom();
}
}

/********************報警程序部分*******************/
void warn()  //報警函數
{

  if(TH>=WenDu)  //檢測的溫度高于設定溫度報警值
                              
     {
      bee=0; //報警
   
     }      
   
if(RH>=ShiDu)  //檢測的濕度高于設定的濕度值
                              
     {
      bee=0; //報警
     }      
   
if( TH<WenDu  &&  RH<ShiDu )  
    {
    bee=1; //停止報警
  }
   
  
}
/************************LCD模塊******************************************/
BOOL lcd_bz()//測試LCD忙碌狀態
{      
  BOOL result ;
  rs = 0 ;
  rw = 1 ;
  ep = 1 ;
  result = (BOOL)(P0 & 0x80) ;
  ep = 0 ;
  return result ;
}
void write_cmd(uchar cmd)// 寫指令
{      
  while(lcd_bz()) ;
rs = 0 ;
rw = 0 ;
ep = 0 ;
P0 = cmd ;
ep = 1 ;
ep = 0 ;  
}
void write_addr(uchar addr)//寫地址
{      
  write_cmd(addr|0x80) ;
}
void write_byte(uchar dat)//寫字節
{      
  while(lcd_bz()) ;
   rs = 1 ;
   rw = 0 ;
   ep = 0 ;
   P0 = dat ;
   ep = 1 ;
   ep = 0 ;
}
void lcd_init()// 初始化
{      
  write_cmd(0x38) ;
  delay(1);
  write_cmd(0x08) ;  
  delay(1);
  write_cmd(0x01) ;
  delay(1);
  write_cmd(0x06) ;
  delay(1);
  write_cmd(0x0c) ;
  delay(1);
}
void display(uchar addr, uchar q)//在某一地址上顯示一字節
{   
  delay(1) ;
  write_addr(addr) ;
   write_byte(q) ;
  delay(1) ;
  
}
/*********************** DHT11測試模塊***************************************/
void start()//開始信號
{
io=1;
delay1();
io=0;
delay(20);//>18ms
io=1;
delay1();//20-40us
delay1();
delay1();
delay1();
delay1();
}
uchar receive_byte()//接收一個字節
{
uchar i,temp,count;
for(i=0;i<8;i++)
{
        temp=0;
  delay1();delay1();delay1();delay1();
  if(io==1)temp=1;
  count=2;
  while((io)&&count++);
  if(count==1)break;
  data_byte<<=1;
  data_byte|=temp;
}
return data_byte;
}
void receive()//接收數據
{
uchar T_H,T_L,R_H,R_L,check,num_check;
uchar count;
start();//開始信號
io=1;
if(!io)//讀取DHT11響應信號
{

while((io)&&count++);
R_H=receive_byte();
R_L=receive_byte();
T_H=receive_byte();
T_L=receive_byte();
check=receive_byte();
io=0;//拉低延時50us
delay1();delay1();delay1();delay1();delay1();
io=1;
num_check=R_H+R_L+T_H+T_L;
if(num_check=check)
{
  RH=R_H;
  RL=R_L;
  TH=T_H;
  TL=T_L;
  check=num_check;
}
}
}

void showw()   // 問候語函數
{      
    lcd_init(); //初始化
     delay(10);

     display(0x05,'W');
     display(0x06,'e');
   display(0x07,'l');
   display(0x08,'c');
   display(0x09,'o');
   display(0x0a,'m');
     display(0x0b,'e');
    delay(250); //短暫延時
    delay(250);
    delay(250);
   
/*********************************/
/*
    display(0x40,' ') ;
   display(0x41,'h');
   display(0x42,'e');
  
*/
}

/*************定時器0初始化程序***************/
void time_init()   
{
EA   = 1;     //開總中斷
TMOD = 0X01;   //定時器0、定時器1工作方式1
ET0  = 1;    //開定時器0中斷
TR0  = 1;    //允許定時器0定時
}

void key() //按鍵程序 選擇菜單模式
{
     
   if(!K1)
     {  
     delay(20);
       if(!K1)
           {   
        while(!K1)
               ;
         yemian++;
         flat++;
        if(yemian>=3) { yemian=0; }
        
             }
     }



}

shezhi()  //對里面的數值進行修改
{
    if(!K2)
     {  
     delay(50);
       if(!K2)
           {   
        ;
        
        if(yemian==1)
        {
         WenDu+=1;
        if(WenDu>99) { WenDu=99; }  //濕度上限加
        }
        
        if(yemian==2)
        {
         ShiDu+=1;
        if(ShiDu>99) { ShiDu=99; }  //濕度下限加
        }
        
        write_eeprom();       //保存數據  
             }
     }
   
     if(!K3)
     {  
       delay(50);
        if(!K3)
           {   
      
               ;
          if(yemian==1)
            {
             WenDu-=1;          //濕度下限減
            if(WenDu<1) {WenDu=1; }
            }
        
          if(yemian==2)
            {
             ShiDu-=1;         //濕度下限減
            if(ShiDu<1) { ShiDu=1; }
            }
        write_eeprom();       //保存數據  
             }
     }
}

/***************************主程序*********************************/
void main()
{
  init_eeprom();         //讀eeprom數據
   time_init();    //初始化定時器
   showw();    //顯示問候語 和名字
  
while(1)
{   
  
     key();
  //====================yemian==0時 進入工作狀態=================================
    if(yemian==0)  
   {
    if(flat==1)
     {
           flat=0;
      lcd_init(); //初始化
        
      display(0x00,'T') ;    //Temp
         display(0x01,'e');
         display(0x02,'m');
      display(0x03,'p');
           display(0x04,':');
      
      display(0x08,0xdf); // 度
         display(0x09,'C');
      
      
      display(0x40,'H') ;    //Humi
         display(0x41,'u');
         display(0x42,'m');
      display(0x43,'i');
           display(0x44,':');
      
      display(0x47,'%');
      display(0x48,'R');
      display(0x49,'H');
      
      display(0x0c,'T');
           display(0x0d,':');
           display(0x0e,WenDu/10+0x30);  //報警溫度
         display(0x0f,WenDu%10+0x30);
      
      display(0x4c,'H');
           display(0x4d,':');
       display(0x4e,ShiDu/10+0x30);  //報警濕度
         display(0x4f,ShiDu%10+0x30);
         
          }
   
    if(flag_300ms == 1)
       {  
        flag_300ms = 0;
           receive();
      
      display(0x05,TH/10+0x30);  //溫度顯示
         display(0x06,TH%10+0x30);
      
           display(0x45,RH/10+0x30);  //濕度顯示
         display(0x46,RH%10+0x30);
      
     
           warn();
       }
   
}  
   
//====================yemian==1 溫度設置===========================
    if(yemian==1)  //溫度
       {
           if(flat==1)
         {
               flat=0;  
         bee=1;
               lcd_init(); //初始化
        display(0x06,'T');
        display(0x07,'e');
        display(0x08,'m');
        display(0x09,'p');
             }
      
      shezhi();
      display(0x47,WenDu/10+0x30);  //溫度
          display(0x48,WenDu%10+0x30);
        }
   
  //====================yemian==1濕度設置==========================
    if(yemian==2)   //濕度設置
       {
           if(flat==1)
         {
               flat=0;  
         bee=1;
               lcd_init(); //初始化
        display(0x06,'H');
        display(0x07,'u');
        display(0x08,'m');
        display(0x09,'i');
       }
       shezhi();
       display(0x47,ShiDu/10+0x30);  //濕度
           display(0x48,ShiDu%10+0x30);
        }
}
}

/*************定時器0中斷服務程序***************/
void time0_int() interrupt 1
{
static uchar value;
TH0 = 0x3c;
TL0 = 0xb0;     // 50ms
  
if(value % 6 == 0)
{
  flag_300ms = 1;    //300ms
  value = 0;
}
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品欧美乱码久久久久久 | 精品国产一区二区三区久久久久久 | 欧美成人在线免费 | 中文字幕在线一区二区三区 | 天天躁人人躁人人躁狂躁 | 嫩呦国产一区二区三区av | 日韩一区三区 | 国产精品久久久久久久久久三级 | 欧美精品在线播放 | 久久久久久免费毛片精品 | 亚洲一区久久 | 福利视频1000 | 夜夜爽99久久国产综合精品女不卡 | 久久精品久久久 | 91久久久久 | 国产精品免费视频一区 | 久久久久中文字幕 | 中文字幕99 | 欧美日韩成人 | 国产精品久久久久久久久久久免费看 | 久久成人av电影 | 少妇久久久久 | 国产精品一区二区三区四区 | 一区精品国产欧美在线 | 久草免费在线视频 | 国产精品久久久久久久久久久久久 | 国产激情精品 | 成年人在线观看 | 毛片在线免费 | 91高清在线观看 | 亚洲视频1区 | 伊人网在线综合 | 亚洲乱码一区二区三区在线观看 | 九久久 | 免费能直接在线观看黄的视频 | 婷婷福利视频导航 | 欧美精品一区在线 | 欧美精品中文字幕久久二区 | 欧美日韩国产综合在线 | 中文字幕一区二区三区精彩视频 | av午夜电影 |