找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机大棚温湿度检测显示源程序与Proteus仿真图

  [复制链接]
跳转到指定楼层
楼主
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <stdio.h>
  4. #include "1602.h"
  5. #include "delay.h"
  6. #include"18b20.h"
  7. #include"i2c.h"

  8. sbit led_l = P1^0;       
  9. sbit led_b = P1^1;
  10. sbit fan = P1^4;
  11. sbit relay = P1^3;

  12. sbit key_s = P3^4;
  13. sbit key_a = P3^5;
  14. sbit key_u = P3^6;

  15. unsigned char readTem = 0 ;
  16. unsigned char readADCFlag = 0 ;         

  17. int temp;                               
  18. float temperature = 0;          

  19. char disdat[16];                          
  20. char disset[16];
  21. unsigned long time_20ms=0;               

  22. float Lv=0.0;                         
  23. float Tv=0.0;                                 
  24. unsigned int Lval =0;               
  25. unsigned int Rval = 0;               
  26. unsigned int distem;                 
  27. unsigned char rekey = 0;         
  28. unsigned char SetFlag = 0;        
  29. unsigned char setLval = 50;
  30. unsigned char setRval = 50;
  31. unsigned char setTval = 35;

  32. void Init_Timer0(void);          

  33. void main (void)
  34. {     
  35.         unsigned char midval;            
  36.         Init_Timer0();

  37.         LCD_Init();           
  38.         DelayMs(20);         
  39.         LCD_Clear();      

  40.         led_l = 0;relay = 0;led_b = 0;fan = 0;
  41.         DelayMs(200);  
  42.         led_l = 1;relay = 1;led_b = 1;fan = 1;

  43.         sprintf(disdat,"L:%2d R:%2d T:%2d C",Lval,Rval,distem);
  44.         LCD_Write_String(0,0,disdat);
  45.         sprintf(disset," L:%2d R:%2d T:%2d",(unsigned int)setLval,(unsigned int)setRval,(unsigned int)setTval);
  46.         LCD_Write_String(0,1,disset);
  47.         while (1)        
  48.         {               
  49.                 if((key_s == 0)||(key_a == 0 )||(key_u == 0))
  50.                 {
  51.                         if(rekey == 0)                       
  52.                         {
  53.                                 DelayMs(10);
  54.                                 if(key_s == 0)
  55.                                 {               
  56.                                         if(SetFlag == 0)
  57.                                         {
  58.                                                 SetFlag =1;       
  59.                                         }
  60.                                         else if(SetFlag == 1)
  61.                                         {
  62.                                                 SetFlag =2;       
  63.                                         }
  64.                                         else if(SetFlag == 2)
  65.                                         {
  66.                                                 SetFlag = 3;       
  67.                                         }
  68.                                         else if(SetFlag == 3)
  69.                                         {
  70.                                                 SetFlag =0;       
  71.                                         }
  72.                                         rekey = 1;               
  73.                                 }
  74.                                 if(key_a == 0)
  75.                                 {               
  76.                                         if(SetFlag == 1)       
  77.                                         {       
  78.                                                 if(setLval <99)       
  79.                                                 {setLval++;}
  80.                                         }
  81.                                         else if(SetFlag == 2)
  82.                                         {
  83.                                                 if(setRval <99)       
  84.                                                 {setRval++;}
  85.                                         }
  86.                                         else if(SetFlag == 3)
  87.                                         {       
  88.                                                 if(setTval <99)       
  89.                                                 {setTval++;}
  90.                                         }
  91.                                         rekey = 1;               
  92.                                 }
  93.                                 if(key_u == 0)
  94.                                 {       
  95.                                         if(SetFlag == 1)       
  96.                                         {       
  97.                                                 if(setLval >0)       
  98.                                                 {setLval--;}
  99.                                         }
  100.                                         else if(SetFlag == 2)  
  101.                                         {
  102.                                                 if(setRval >0)       
  103.                                                 {setRval--;}
  104.                                         }
  105.                                         else if(SetFlag == 3)
  106.                                         {       
  107.                                                 if(setTval >0)               
  108.                                                 {setTval--;}
  109.                                         }       
  110.                                         rekey = 1;               
  111.                                 }

  112.                         }               
  113.                 }
  114.                 else
  115.                 {rekey = 0;}


  116.                 if(readADCFlag == 1)       
  117.                 {
  118.                         midval=ReadADC(1);       
  119.                         Lv=5.15-(float)midval*5.15/255;               
  120.                         Lval  = (unsigned int )(Lv * 100 )/5.16;
  121.                         DelayMs(10);         
  122.                         midval=ReadADC(0);                               
  123.                         Tv=5.15-(float)midval*5.15/255;       
  124.                         Rval  = (unsigned int )(Tv * 100 )/5.16;
  125.                         sprintf(disdat,"L:%2d R:%2d T:%2d C",Lval,Rval,distem);
  126.                         LCD_Write_String(0,0,disdat);
  127.                         LCD_Write_Char(14,0,0XDF) ;
  128.                         readADCFlag = 0 ;

  129.                         sprintf(disset," L:%2d R:%2d T:%2d ",(unsigned int)setLval,(unsigned int)setRval,(unsigned int)setTval);
  130.                         LCD_Write_String(0,1,disset);
  131.                         if(SetFlag == 1)       
  132.                         {
  133.                                 LCD_Write_Char(0,1,'S') ;       
  134.                                 LCD_Write_Char(5,1,' ') ;
  135.                                 LCD_Write_Char(10,1,' ') ;
  136.                         }
  137.                         else if(SetFlag == 2)
  138.                         {
  139.                                 LCD_Write_Char(0,1,' ') ;
  140.                                 LCD_Write_Char(5,1,'S') ;  
  141.                                 LCD_Write_Char(10,1,' ') ;
  142.                         }
  143.                         else if(SetFlag == 3)
  144.                         {
  145.                                 LCD_Write_Char(0,1,' ') ;
  146.                                 LCD_Write_Char(5,1,' ') ;  
  147.                                 LCD_Write_Char(10,1,'S') ;
  148.                         }
  149.                         else
  150.                         {
  151.                                 LCD_Write_Char(0,1,' ') ;
  152.                                 LCD_Write_Char(5,1,' ') ;
  153.                                 LCD_Write_Char(10,1,' ') ;
  154.                         }
  155.                         if(Lval <= setLval)       
  156.                         {
  157.                                  led_l = 0;                  
  158.                         }
  159.                         else
  160.                         {
  161.                                 led_l = 1;                 
  162.                         }
  163.                         if(Rval <= setRval)       
  164.                         {
  165.                                  relay = 0;               
  166.                         }
  167.                         else
  168.                         {
  169.                                 relay = 1;       
  170.                         }
  171.                         if(distem <= setTval)       
  172.                         {
  173.                                  led_b = 0;       
  174.                                 fan = 1;
  175.                         }
  176.                         else
  177.                         {
  178.                                 led_b = 1;          
  179.                                 fan = 0;
  180.                         }

  181.                 }
  182.                 if(readTem==1)               
  183.                 {
  184.                     temp=ReadTemperature();                          
  185.                         temperature=(float)temp*0.0625;          
  186.                         if(temperature >1)                               
  187.                         {distem = (unsigned int )temperature;}       
  188.                         readTem=0;
  189.                 }                       
  190.         }
  191. }

  192. void Init_Timer0(void)
  193. {
  194.         TMOD |= 0x01;                               
  195.         TH0=(65536-20000)/256;                 
  196.         TL0=(65536-20000)%256;
  197.         EA=1;           
  198.         ET0=1;           
  199.         TR0=1;         
  200. }

  201. void Timer0_isr(void) interrupt 1
  202. {
  203.         TH0=(65536-20000)/256;       
  204.         TL0=(65536-20000)%256;
  205.        
  206.         time_20ms++;
  207.         if(time_20ms % 20 == 0)
  208.         {
  209.                  readADCFlag = 1;
  210.         }
  211.         if(time_20ms % 40 == 0)       
  212.         {
  213.                  readTem = 1;       
  214.         }
  215. }
复制代码
有对单片机感兴趣的,研究技术的,欢迎加群955477798

所有资料51hei提供下载:
51大鹏温湿度光照(准) (2).zip (290.07 KB, 下载次数: 184)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:1014556 发表于 2022-4-1 10:18 | 只看该作者
您好,您发表的“51单片机大棚温湿度检测显示源程序与Proteus仿真图”我下载了,在proteus中运行的时候1602它为什么是没有显示的呢?
回复

使用道具 举报

板凳
ID:474195 发表于 2023-4-10 17:53 | 只看该作者
小草半年 发表于 2022-4-1 10:18
您好,您发表的“51单片机大棚温湿度检测显示源程序与Proteus仿真图”我下载了,在proteus中运行的时候1602 ...

调一下背光试下
回复

使用道具 举报

地板
ID:1074025 发表于 2023-4-25 15:17 来自手机 | 只看该作者
51小白冬 发表于 2023-4-10 17:53
调一下背光试下

怎么调节呢
回复

使用道具 举报

5#
ID:474195 发表于 2023-5-10 16:03 | 只看该作者

这个百度一下 lcd1602背光调节 一大堆
回复

使用道具 举报

6#
ID:641483 发表于 2023-5-23 15:59 | 只看该作者
谢谢楼主分享 先收藏 慢慢学习
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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