【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的分享

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,我可以为您提供一些关于在Proteus仿真51单片机和L298N电机驱动直流电机正转反转、加速、减速的步骤。 首先,您需要准备以下材料: - Proteus软件 - 51单片机 - L298N电机驱动模块 - 直流电机 - 电源 接下来,您可以按照以下步骤进行操作: 1. 在Proteus中创建一个新的电路图,并将51单片机、L298N电机驱动模块和直流电机添加到电路图中。连接方式如下: - 将51单片机的IO口连接到L298N电机驱动模块的IN1、IN2、IN3和IN4引脚上。这些引脚将用于控制电机的方向和速度。 - 将L298N电机驱动模块的ENA和ENB引脚连接到51单片机的PWM输出引脚上。这些引脚将用于向电机提供PWM信号,从而控制电机的速度。 - 将直流电机连接到驱动模块的OUT1和OUT2引脚上,并连接电源。 2. 在51单片机的程序中编写控制电机正转、反转、加速和减速的代码。以下是一个示例程序: ``` #include <reg52.h> sbit ENA=P1^0; // L298N驱动模块ENA引脚 sbit ENB=P1^1; // L298N驱动模块ENB引脚 sbit IN1=P1^2; // L298N驱动模块IN1引脚 sbit IN2=P1^3; // L298N驱动模块IN2引脚 sbit IN3=P1^4; // L298N驱动模块IN3引脚 sbit IN4=P1^5; // L298N驱动模块IN4引脚 unsigned char speed = 50; // PWM信号占空比 unsigned char direction = 0; // 电机方向,0代表正转,1代表反转 void delay(unsigned int time) { unsigned int i, j; for (i=0; i<time; i++) { for (j=0; j<125; j++); } } void main() { while(1) { if (direction == 0) { // 正转 IN1 = 1; IN2 = 0; IN3 = 1; IN4 = 0; } else { // 反转 IN1 = 0; IN2 = 1; IN3 = 0; IN4 = 1; } ENA = 1; ENB = 1; // 加速 while (speed < 255) { speed++; TH0 = 0x100 - speed; TL0 = 0x100 - speed; delay(10); } // 减速 while (speed > 50) { speed--; TH0 = 0x100 - speed; TL0 = 0x100 - speed; delay(10); } } } ``` 3. 将编写的程序下载到51单片机中,并在Proteus中启动仿真。您可以使用示波器来观察PWM信号和电机的运动,以确保程序正常运行。 希望这些步骤可以帮助您成功仿真51单片机和L298N电机驱动直流电机正转反转、加速、减速。如果您需要进一步的帮助,请随时告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜间去看海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值