https://www.bilibili.com/video/BV1Wz411v7Ks
b站视频演示
单片机源程序如下:
- #include "reg51.h"
- #include "lcd1602.h"
- #include "dht11.h"
- #include "delay.h"
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include "keyscanner.h"
- sbit led1=P0^1;
- sbit led2=P0^2;
- unsigned char DHT[5];
- int RH,T,key_num;
- int set_T=25,set_RH=80;
- extern char str_key[10];
- char str_RH[10],str_T[10],str_key_num[10];
- char str_RH_set[10],str_T_set[10];
- void GET_VAR(int num);
- void SET_VAR(int num);//num:0为湿度,num:1为温度
- void display_all();
- void main()
- {
- LCD_init();
- DHT_Start();
- delay_ms(1);
- while(1)
- {
- display_all();
- key_num=key_scan();
- if(key_num==12)
- {
- LCD_write_command(0x01);
- set_T=set_T+1;
- //SET_VAR(2);
-
- }
- else if(key_num==16)
- {
- LCD_write_command(0x01);
- set_T=set_T-1;
- }
- if(key_num==4)
- {
- LCD_write_command(0x01);
- set_RH=set_RH+1;
- //SET_VAR(2);
-
- }
- else if(key_num==8)
- {
- LCD_write_command(0x01);
- set_RH=set_RH-1;
- }
- if(set_T<T)
- {
- led1=0;
- }
- else
- {
- led1=1;
- }
- if(set_RH<RH)
- {
- led2=0;
- }
- else
- {
- led2=1;
- }
- }
- }
- void GET_VAR(int num)//num:0为湿度,num:2为温度
- {
- DHT_Start();
- DHT_ByteRead(DHT);
- if(num==0)
- {
- RH=DHT[0];//rh:湿度
- sprintf(str_RH,"RH:%d%%",RH);
- LCD_dsp_string(1,1,str_RH);//湿度
- }
- else if(num==2)
- {
- DHT_Start();
- DHT_ByteRead(DHT);
- T=DHT[2];//T
- sprintf(str_T," T:%dC",T);
- LCD_dsp_string(7,1,str_T);//温度
- }
- }
- void SET_VAR(int num)//num:0为湿度,num:1为温度
- {
- if(num==0)
- {
- sprintf(str_RH_set,"RH:%d%%",set_RH);
- LCD_dsp_string(1,2,str_RH_set);//湿度
- }
- else if(num==2)
- {
- sprintf(str_T_set," T:%dC",set_T);
- LCD_dsp_string(7,2,str_T_set);//温度
- }
- }
- void display_all()
- {
- GET_VAR(0);
- GET_VAR(2);
- SET_VAR(0);
- SET_VAR(2);
- }
复制代码
所有资料51hei提供下载:
基于AT89C51的温湿度检测系统设计与实现.zip
(118.54 KB, 下载次数: 53)
|