找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2218|回复: 1
收起左侧

基于AT89C51的温湿度检测系统设计与实现

[复制链接]
ID:467963 发表于 2020-7-27 03:16 | 显示全部楼层 |阅读模式
https://www.bilibili.com/video/BV1Wz411v7Ks
b站视频演示

单片机源程序如下:
  1. #include "reg51.h"
  2. #include "lcd1602.h"
  3. #include "dht11.h"
  4. #include "delay.h"
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include "keyscanner.h"
  9. sbit led1=P0^1;
  10. sbit led2=P0^2;
  11. unsigned char DHT[5];
  12. int RH,T,key_num;
  13. int set_T=25,set_RH=80;
  14. extern char  str_key[10];
  15. char str_RH[10],str_T[10],str_key_num[10];
  16. char str_RH_set[10],str_T_set[10];
  17. void GET_VAR(int num);
  18. void SET_VAR(int num);//num:0为湿度,num:1为温度
  19. void display_all();
  20. void main()
  21. {
  22.         LCD_init();
  23.         DHT_Start();
  24.         delay_ms(1);
  25.         while(1)
  26.         {
  27.                 display_all();
  28.                 key_num=key_scan();
  29.                 if(key_num==12)
  30.                 {
  31.                         LCD_write_command(0x01);
  32.                         set_T=set_T+1;
  33.                         //SET_VAR(2);
  34.                        
  35.                 }
  36.                 else if(key_num==16)
  37.                 {
  38.                         LCD_write_command(0x01);
  39.                         set_T=set_T-1;
  40.                 }
  41.                 if(key_num==4)
  42.                 {
  43.                         LCD_write_command(0x01);
  44.                         set_RH=set_RH+1;
  45.                         //SET_VAR(2);
  46.                        
  47.                 }
  48.                 else if(key_num==8)
  49.                 {
  50.                         LCD_write_command(0x01);
  51.                         set_RH=set_RH-1;
  52.                 }
  53.                 if(set_T<T)
  54.                 {
  55.                         led1=0;
  56.                 }
  57.                 else
  58.                 {
  59.                         led1=1;
  60.                 }
  61.                 if(set_RH<RH)
  62.                 {
  63.                         led2=0;
  64.                 }
  65.                 else
  66.                 {
  67.                         led2=1;
  68.                 }
  69.         }
  70. }
  71. void GET_VAR(int num)//num:0为湿度,num:2为温度
  72. {
  73.         DHT_Start();
  74.         DHT_ByteRead(DHT);
  75.         if(num==0)
  76.         {
  77.                 RH=DHT[0];//rh:湿度
  78.                 sprintf(str_RH,"RH:%d%%",RH);
  79.                 LCD_dsp_string(1,1,str_RH);//湿度
  80.         }
  81.         else if(num==2)
  82.         {
  83.                 DHT_Start();
  84.                 DHT_ByteRead(DHT);
  85.                 T=DHT[2];//T
  86.                 sprintf(str_T," T:%dC",T);
  87.                 LCD_dsp_string(7,1,str_T);//温度
  88.         }
  89. }
  90. void SET_VAR(int num)//num:0为湿度,num:1为温度
  91. {
  92.         if(num==0)
  93.         {
  94.                 sprintf(str_RH_set,"RH:%d%%",set_RH);
  95.                 LCD_dsp_string(1,2,str_RH_set);//湿度
  96.         }
  97.         else if(num==2)
  98.         {
  99.                 sprintf(str_T_set," T:%dC",set_T);
  100.                 LCD_dsp_string(7,2,str_T_set);//温度
  101.         }
  102. }
  103. void display_all()
  104. {
  105.         GET_VAR(0);
  106.         GET_VAR(2);
  107.         SET_VAR(0);
  108.         SET_VAR(2);
  109. }
复制代码

所有资料51hei提供下载:
基于AT89C51的温湿度检测系统设计与实现.zip (118.54 KB, 下载次数: 53)
回复

使用道具 举报

ID:974551 发表于 2022-5-29 15:51 | 显示全部楼层
为什么下载的hex文件可以正常仿真,但编译keil工程后的hex文件不能呢,是keil版本的问题吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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