目录
一、主要功能
二、硬件资源
三、程序编程
四、实现现象
一、主要功能
基于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的分享