项目名:
基于单片机的智能花盆设计
功能:
1、通过显示屏显示花盆中土壤的温度、湿度,花盆外光照强度;
2、通过按键切换显示屏的界面,设置土壤最小温度值、最小湿度值,花盆外光照强度值,输液倒计时,松土倒计时;
3、通过土壤湿度传感器检测土壤湿度,通过DS18B20检测土壤温度;
4、通过继电器控制加热片,水泵,输液,补光灯;
5、通过步进电机来实现松土;
部分程序:
#include "main.h"
#include "lcd1602.h"
#include "key.h"
#include "ds18b20.h"
#include "adc.h"
#include "motor.h"
#include "timer.h"
/**********************************
变量定义
**********************************/
uchar key_num = 0; //按键扫描标志位
uchar flag_display = 0; //显示模式标志位
bit flag_display_cut = 0; //切换界面标志位
uint time_num = 0; //10ms计数变量
uint temp_value = 0; //温度值
uchar temp_min = 10; //最小温度值
uint humi_value = 0; //湿度值
uchar humi_min = 30; //最小湿度值
uint light_value = 0; //光照强度值
uchar light_min = 50; //最小光照强度值
uchar time_songtu = 0; //松土时间
uint time_minus_songtu = 0; //松土倒计时时间
uchar time_shuye = 0; //输液时间
uint time_minus_shuye = 0; //输液倒计时时间
extern bit flag_songtu_begin; //松土开始标志位
extern bit flag_songtu_finish; //松土完成标志位
extern bit flag_shuye_begin; //输液开始标志位
extern bit flag_shuye_finish; //输液完成标志位
/**********************************
函数声明
**********************************/
void Delay_function(uint x); //延时函数
void Key_function(void); //按键函数
void Monitor_function(void); //监测函数
void Display_function(void); //显示函数
void Manage_function(void); //处理函数
/****
******* 主函数
*****/
void main()
{
Lcd1602_Init(); //LCD1602初始化
Delay_function(50);
lcd1602_clean(); //清屏
Delay_function(50);
Ds18b20_Init(); //DS18B20初始化
Delay_function(50);
Timer0_Init(); //定时器0初使化
Delay_function(50);
while(1)
{
Key_function(); //按键函数
Monitor_function(); //监测函数
Display_function(); //显示函数
Manage_function(); //处理函数
Delay_function(10); //延时10ms
time_num++; //间隔10ms计时变量+1
if(time_num >= 5000) //计时累加到5000,重新从0开始累加
{
time_num = 0;
}
}
}
/****
******* 延时 x ms函数
*****/
void Delay_function(uint x)
{
uint m,n;
for(m=x;m>0;m--)
for(n=110;n>0;n--);
}
/****
*******按键函数
*****/
void Key_function(void)
{
key_num = Chiclet_Keyboard_Scan(0); //按键扫描
if(key_num != 0) //有按键按下
{
switch(key_num)
{
case 1: //按键1,切换界面
flag_display++;
if(flag_display >= 6) //一共6个界面
flag_display = 0;
lcd1602_clean(); //按一下,清屏一次
break;
case 2:
switch(flag_display)
{
case 0: //界面为0时,手动松土
Motor_Foreward();
break;
case 1: //界面为1时,修改温度最小值+1
if(temp_min < 99)
temp_min++;
break;
case 2: //界面为2时,修改湿度最小值+1
if(humi_min < 99)
humi_min++;
break;
case 3: //界面为3时,修改光照最小值+1
if(light_min < 99)
light_min++;
break;
case 4: //界面为4时,修改松土时间+1
time_songtu++;
time_minus_songtu = time_songtu*60;
break;
case 5: //界面为5时,修改输液时间+1
time_shuye++;
time_minus_shuye = time_shuye*60;
break;
default:
break;
}
break;
case 3: //按键3
switch(flag_display)
{
case 0: //界面为0时,手动输液
RELAY_SHUYE = 0; //闭合输液继电器,开始输液
Delay_function(3000); //输液三秒
RELAY_SHUYE = 1; //断开输液继电器,停止输液
break;
case 1: //界面为1时,修改温度最小值-1
if(temp_min > 0)
temp_min--;
break;
case 2: //界面为2时,修改湿度最小值-1
if(humi_min > 0)
humi_min--;
break;
case 3: //界面为3时,修改光照最小值-1
if(light_min > 0)
light_min--;
break;
case 4: //界面为4时,修改松土时间-1
if(time_songtu > 0)
{
time_songtu--;
time_minus_songtu = time_songtu*60;
}
break;
case 5: //界面为5时,修改输液时间-1
if(time_shuye > 0)
{
time_shuye--;
time_minus_shuye = time_shuye*60;
}
break;
default:
break;
}
break;
case 4: //按键4,切换界面
flag_display_cut = ~flag_display_cut;
lcd1602_clean(); //按一下,清屏一次
break;
default:
break;
}
}
}
上一篇:基于AT89C2051做的音乐门铃
下一篇:大神教你用51单片机做信号发生器,同时输出四种频率的方波的技术
推荐阅读最新更新时间:2024-11-08 11:12
设计资源 培训 开发板 精华推荐
- MPC-LS车辆网络处理参考设计
- WS2812点阵RGB
- LTM4608AMPV 3V 至 5.5Vin、2.5V @ 8A 输出 DC/DC 稳压器的典型应用电路
- AM2G-0515DH30Z ±15V 2 瓦 DC/DC 转换器的典型应用
- 新的低功耗、高输出电流双 CFA 使 xDSL 线路驱动干净、简单
- ExpressLRS 915 E19接收机
- LTC6262HDC 低功率、低失真 ADC 驱动器、运算放大器的典型应用
- 使用 NXP Semiconductors 的 ISP1105 的参考设计
- 涂鸦2路开关
- ADR391ART-REEL 精密低漂移 2.500 V 电压基准的典型应用,可关断薄膜开关控制电源
- 【EE团】ST最新STM32F429i高性能开发板重磅登场
- 赢京东卡 室内空气隐患大作战——英飞凌XENSIV™PAS CO2传感器
- 点评《深入浅出玩TI Sitara》,精彩好礼等你拿!
- TE Connectivity的智能建筑解决方案——传感和连接,智能楼宇设计的关键
- 围读 《嵌入式软件的时间分析》——汽车行业领域的嵌入式软件理论、分析及实践
- 有奖调查——We want you!好的参考设计网站什么样?
- 有奖话题:聊一聊论坛里帮助过你的网友!
- ADI有奖下载活动之7 可编程逻辑控制器(PLCs)解决方案
- 逛村田在线云展厅,了解通信、移动、工业+环境、健康四大领域的应用干货!
- 答题赢礼! | 如何利用PI Expert 电源设计工具快速搭建PD充电器