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