通过百度网盘分享的文件:资料详解
链接:https://pan.baidu.com/s/1zPXLcLmqZAljkgMeU2RT7w?pwd=597l
提取码:597l
设计简介:
基于单片机的智能花盆设计
单片机:STC89C52
功能:
1、通过显示屏显示花盆中土壤的温度、湿度,花盆外光照强度;
2、通过按键切换显示屏的界面,设置土壤最小温度值、最小湿度值,花盆外光照强度值,输液倒计时,松土倒计时;
3、通过土壤湿度传感器检测土壤湿度,通过DS18B20检测土壤温度;
4、通过继电器控制加热片,水泵,输液,补光灯;
5、通过步进电机来实现松土;
4 系统程序设计
4.1 编程软件介绍
本设计所用到的编程软件为Keil5,其界面如图4-1所示:
图4-1 Keil5开发界面
本设计所使用的编程环境是Keil5,相对于其他软件编程环境,Keil5更加的轻便快捷,操作更加的简单,深受广大嵌入式软件开发者的喜爱。Keil5支持多种芯片,包括51单片机、STM32、HC32、NXP等,生成的HEX文件,可通过烧录器直接烧录到单片机中,非常方便。另外,Keil5编译有三种,一种是单编,一种是部分编译,还有一种是全部编译,这样给开发人员更多的选择,并且编译的结果,显示在界面的最下方,供开发者查找错误。
4.2 主程序流程设计
系统的主流程图如图4-2所示;在主程序中:首先对各个模块进行初始化,随后进入while主循环,在主循环中,首先进入第一个函数按键函数,该函数主要分为两部分,第一部分为调用按键扫描函数获取相关按键键值,第二部分通过相关按键进行相应的处理操作,比如切换界面、手动松土、调整温度最小值、湿度最小值、光照最小值、调整松土时间和输液时间、手动补光;紧接着进入第二个函数监测函数,通过调用温度、湿度和光照检测模块获取温度、湿度和光照的值;紧接着进入第三个函数显示函数,根据不同的显示标志位显示不同的界面,比如主界面显示当前温度、湿度和光照的值,其他界面显示松土和输液时间、温度、湿度和光照的最小值等;紧接着进入第四个函数处理函数,判断测量值是否在阈值内,若不在,则相应的继电器工作,若松土或输液倒计时结束则开始松土或输液;最后,通过一个延时函数和计数公式,限制各函数扫描时间。其部分主程序源码如下所示:
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)
{
(部分代码省略)
……
}
}
图4-2 程序总体流程图
4.3 按键函数流程设计
按键函数子流程图如图4-3所示;按键设置函数首先通过按键扫描函数,获取按键按下的相关信息,通过不同的键值,进行相应变量的改变。如果获取的键值为1,进行界面的切换。如果获取的键值为2,在界面0时,手动松土;在界面1时,温度最小值+1;在界面2时,湿度最小值+1;在界面3时,光照最小值+1;在界面4时,松土时间+1;在界面5时,输液时间+1。如果获取的键值为3,在界面0时,手动补光;在界面1时,温度最小值-1;在界面2时,湿度最小值-1;在界面3时,光照最小值-1;在界面4时,松土时间-1;在界面5时,输液时间-1。如果获取的键值为4,切换界面。其部分程序源码如下所示:
void Key_function(void)
{
key_num = Chiclet_Keyboard_Scan(); //按键扫描
if(key_num != 0) //有按键按下
{
switch(key_num)
{
case 1: //按键1,切换界面
flag_display++;
if(flag_display >= 6) //一共6个界面
flag_display = 0;
lcd1602_clean(); //按一下,清屏一次
break;
(部分代码省略)
……
}
}
}
标签:界面,14,松土,51,单片机,最小值,键值,按键,函数 From: https://blog.csdn.net/2402_89220103/article/details/144357273