【Proteus51单片机仿真】YL-69湿度检测和继电器电机自启动

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于AT89C51单片机,湿度检测模块通过ADC0832数模转换器,

将模拟信号转换为数字信号给单片机,然后通过LCD1602显示屏显示出当前的湿度值,并判断当前湿度值是否大于60%,若大于60%则P2.6输出低电平,电机1启动,若处于60%以下,则P2.7输出低电平,电机2启动,此时电机12同时进行工作,到达用户预设的50%即停机结束工作。

仿真图:

编辑

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

本系统由51单片机最小系统、LCD1602显示模块、继电器电机、YL-69湿度传感器组成。

三、程序编程

#include <REGX52.H>
#include<intrins.h>
#include<stdio.h>
#include "Delay.h"
#include "LCD1602.h"
#define uchar unsigned char
#define uint unsigned  int
typedef unsigned char u8;
typedef unsigned int  u16;
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;

/*引脚定义*/
sbit CS=P1^0;        //51单片机引脚设置
sbit CLK=P1^1;
sbit DIO=P1^2;
sbit motor1 = P2^6;	      //电机1口
sbit motor2 = P2^7;       //电机2口


/*变量定义*/
static int MAXNUMBER = 60,MINNUMBER = 50;
static uchar u,U,R;
static int flag;

/*函数定义*/
void watermotorpd();

uchar get\_AD\_Res()          //ADC0832启动读取函数
{
	uchar i, data1=0, data2=0;
	CS=0;
	
	CLK=0;DIO=1;\_nop\_();
	CLK=1;\_nop\_();
	
	CLK=0;DIO=1;\_nop\_(); 
	CLK=1;\_nop\_();
	
	CLK=0;DIO=0;\_nop\_();
	CLK=1;\_nop\_();
	
	CLK=0;DIO=1;\_nop\_(); 
	
	for(i=0; i<8; i++)
	{
		CLK=1;\_nop\_();
		CLK=0;\_nop\_();
		data1=(data1<<1)|(uchar)DIO; 
	}
	
	for(i=0; i<8; i++)
	{
		data2=data2|(uchar)DIO<<i;
		CLK=1;\_nop\_();
		CLK=0;\_nop\_();
	}
	CS=1;
	
	return(data1 == data2)?data1:0;
}

void main()					  //主函数
{	
	LCD_Init();         //显示屏初始化
	motor1 = 1;
    motor2 = 1;
	LCD_ShowString(1,1,"HUM:");
	LCD_ShowString(1,8,"%");
	LCD_ShowString(2,1,"CURRENT HUM:");
    LCD_ShowString(2,16,"%");
	while(1)
	{
     	u=get\_AD\_Res();		//读取ADC0832的值
		u= u/2;
		if(u <= 50)
		{
		 u = 50;
		}
		LCD_ShowNum(2,13,u,3);//通过LCD1602显示湿度的值
	    LCD_ShowNum(1,5,MAXNUMBER,3);//通过LCD1602显示湿度的值

		watermotorpd();   //电机判断


		if(flag == 1)
		{
		 motor1 = 0; //电机1转动
		 motor2 = 1;
		}
		else if(flag == 2)
		{
		 motor1 = 0;//电机1转动
		 motor2 = 0;//电机2转动
		}
	    
		if(u <= MINNUMBER)
		{  
		   motor1 =1;
		   motor2 =1;
		}

	}

}


void watermotorpd()
{
  if(u > MAXNUMBER)
  {
  	flag = 1;
  }
  else if( MINNUMBER < u <= MAXNUMBER)
  {
   	flag = 2;
  }
  else 
  {
   flag =3;
  }
}

四、实现现象

具体动态效果看B站演示视频:

基于AT89C52单片机的湿度检测及自动电机驱动_哔哩哔哩_bilibili

全部资料(源程序、仿真文件、安装包、演示视频):

链接:https://pan.baidu.com/s/1SUIep4_ZyOQJ_g4lsudL_w
提取码:hzze
–来自百度网盘超级会员V4的分享c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值