龙岩市建设局网站,房地产开发与管理专业,深圳鼎晟展览设计有限公司,简易app制作工具尽量每天都自己写一遍模板#xff0c;记住模板就好写了 以下内容直接在模板内进行 基本任务#xff1a;要求“模拟智能灌溉系统”能够实现土壤湿度测量、土壤湿度和时间显示、湿度阈值设 定及存储等基本功能。通过电位器 Rb2 输出电压信号#xff0c;模拟湿度传感器输出信号… 尽量每天都自己写一遍模板记住模板就好写了 以下内容直接在模板内进行 基本任务 要求“模拟智能灌溉系统”能够实现土壤湿度测量、土壤湿度和时间显示、湿度阈值设 定及存储等基本功能。通过电位器 Rb2 输出电压信号模拟湿度传感器输出信号再通过 AD 采集完成湿度测量功能通过 DS1302 芯片提供时间信息通过按键完成灌溉系统控制 和湿度阈值调整功能通过 LED 完成系统工作状态指示功能。系统硬件电路主要由单片机 控制电路、显示单元、ADC 采集单元、RTC 单元、EEPROM 存储单元、继电器控制电路及 报警输出电路组成. 系统功能 1.1 自动工作状态根据湿度数据自动控制打开或关闭灌溉设备( 初始状态)以 L1 点亮指示 1.2 手动工作状态通过按键控制打开或关闭灌溉设备以 L2 点亮指示 1.3 系统上电后处于自动工作状态系统初始湿度阈值为 50%此时若湿度低于 50%灌溉设备自动打开达到 50%后灌溉设备自动关闭 1.4 灌溉设备打开或关闭通过继电器工作状态模拟。 我们现在就要一步步进行下去
1.我们先来实现DS1302 “模拟智能灌溉系统”通过读取 DS1302 时钟芯片相关寄存器获得时间DS1302 芯片时、分、秒寄存器在程序中设定为系统进行初始化设定时间为 08 时 30 分。 开始为 ucRtc0x80,0x30,0x00 我们通过读取函数来读取这个时间值 Read_Rtc[ucRtc];然后在主函数设置Set_Rtc(ucRtc)
2. 湿度显示 以电位器 Rb2 输出电压信号模拟湿度传感器输出信号且假定电压信号与湿度成正 比例关系 H 湿度 KVRb2K 为常数Rb2 电压输出为 5V 时对应湿度为 99% 湿度我们是能够控制的他就包括了阈值 控制值以及一个显示值。
Humidity Ad_Read(0x03) / 2.56;我们让AD读取R3的值给到湿度之后也可以调试
3.按键功能
S7为模式切换功能初始为自动模式按下后为手动。 自动工作状态下按键 S6、S5、S4 功能设定如下 S6 功能设定为湿度阈值调整按键按下 S6 后进入湿度阈值调整界面(如图 3 所示)此时按下 S5 为湿度阈值加 1按下 S4 湿度阈值减 1再次按下 S6 后系 统将新的湿度阈值保存到 EEPROM 中并退出湿度阈值设定界面。 这也就是我们再 Mode 0 状态下通过按键完成的功能加上条件就可以。 4.Led显示模式
这个比较简单后续再继续补充纤细内容
/* 和参考的区别最大的在于内容写入的内容不同 *//* Í·ÎļþÉùÃ÷Çø */
#include STC15F2K60S2.H
#include LED.h
#include key.h
#include Seg.h
#include HC573.h
#include init.h
#include ds1302.h
#include iic.h
#include onewire.h/* ±äÁ¿ÉùÃ÷Çø */
unsigned char Key_Down,Key_Val,Key_Old,Key_Up;
unsigned char Key_Slow_Down;unsigned char Seg_Buf[8]{10,10,10,10,10,10,10,10};
unsigned char Seg_Point[8]{0,0,0,0,0,0,0,0};
unsigned char Seg_Pos;
unsigned int Seg_Slow_Down;unsigned char ucRtc[3]{0x08,0x30,0x00};
unsigned char ucLed[8]{0,0,0,0,0,0,0,0};unsigned char Seg_Mode 0;
unsigned char Seg_Mode_set 0;bit Work_Mode 0;
bit Beep_Flag 0;unsigned char Humidity;
unsigned char Hum_Disp 50;
unsigned char Hum_Ctrol 50;/* °´¼ü´¦ÀíÇø */
void Key_Proc()
{if(Key_Slow_Down) return;Key_Slow_Down 1;Key_Val Key_Read();Key_Down Key_Val (Key_Old ^ Key_Val);Key_Up ~Key_Val (Key_Old ^ Key_Val);Key_Old Key_Val;switch(Key_Down){case 7:Work_Mode ^ 1; // Çл»Ä£Ê½break;case 6:if(Work_Mode 0 Seg_Mode 0) //×Ô¶¯Ä£Ê½£¬½øÈëãÐֵ״̬{Seg_Mode 2;}if(Work_Mode 0 Seg_Mode 2 Seg_Mode_set1) //Ìø³öÅжÏÌõ¼þ£¬Ð´Èë¿ØÖÆ²ÎÊý{Hum_Ctrol Hum_Disp;EEPROM_Write(Hum_Disp,0,1); //±£´æãÐÖµ²ÎÊýSeg_Mode_set0;Seg_Mode 0;}break;if(Work_Mode 1) //ÊÖ¶¯Ä£Ê½{Beep_Flag ^ 1;}break;case 5:if(Seg_Mode 2 Work_Mode 0){Seg_Mode_set 1;if(Hum_Disp 100){EEPROM_Write(Hum_Disp,0,1); Hum_Ctrol Hum_Disp; Hum_Disp 99;}}if(Work_Mode 1){Relay(1);}break;case 4:if(Seg_Mode 2 Work_Mode 0){Seg_Mode_set 1;if(--Hum_Disp 255){EEPROM_Write(Hum_Disp,0,1);Hum_Ctrol Hum_Disp; Hum_Disp 0;}}if(Work_Mode 1){Relay(0);}break;}}/* Êý¾Ý´¦ÀíÇø */
void Seg_Proc()
{if(Seg_Slow_Down) return;Seg_Slow_Down 1;/* Êý¾Ý¶ÁÈ¡ÇøÓò */Read_Rtc(ucRtc);Humidity Ad_Read(0x03) / 2.56;/* Êý¾ÝÏÔÊ¾ÇøÓò */switch(Seg_Mode){case 0: //ÉϵçÏÔʾʵʱ״̬/* ×Ô¶¯Ä£Ê½ */Seg_Buf[0] ucRtc[0] / 16;Seg_Buf[1] ucRtc[0] % 16;Seg_Buf[3] ucRtc[1] / 16;Seg_Buf[4] ucRtc[1] % 16;Seg_Buf[2] 11;// ζÈÏÔʾSeg_Buf[6] Humidity / 10;Seg_Buf[7] Humidity % 10;break;case 1:Seg_Buf[0] ucRtc[0] / 16;Seg_Buf[1] ucRtc[0] % 16;Seg_Buf[3] ucRtc[1] / 16;Seg_Buf[4] ucRtc[1] % 16;Seg_Buf[2] 11;// ζÈÏÔʾSeg_Buf[6] Humidity / 10;Seg_Buf[7] Humidity % 10;break;case 2: //ÏÔʾãÐÖµSeg_Mode_set1;Seg_Buf[0] Seg_Buf[1] 11;Seg_Buf[2] Seg_Buf[3] Seg_Buf[4] 10;Seg_Buf[6] Hum_Disp / 10;Seg_Buf[7] Hum_Disp % 10;break;}
}void Led_Proc()
{if(Work_Mode 0){ucLed[0] 1;ucLed[1]0;if(Humidity 50)Relay(0);elseRelay(1);}if(Work_Mode 1){ucLed[0] 0;ucLed[1]1;Beep(Beep_Flag);}}void Timer0Init(void) //12.000MHz
{AUXR 0x7F; TMOD 0xF0; TL0 0x18; TH0 0xFC; TF0 0; TR0 1; ET0 1; EA 1;
}void Timer0Server() interrupt 1
{ if(Key_Slow_Down 10) Key_Slow_Down 0;if(Seg_Slow_Down 500) Seg_Slow_Down 0;if(Seg_Pos 8) Seg_Pos 0;Seg_Disp(Seg_Pos,Seg_Buf[Seg_Pos],Seg_Point[Seg_Pos]);Led_Disp(Seg_Pos,ucLed[Seg_Pos]);
}void main()
{Humidity Ad_Read(0x03) / 2.56; //Ö÷º¯ÊýÔÙ¶ÁÒ»´ÎHum_Disp Hum_Ctrol; //±ãÓÚ¸ÄÕýEEPROM_Read(Hum_Disp,0,1);//¶ÁÈ¡ãÐÖµ²ÎÊýSystem_init();Timer0Init();Set_Rtc(ucRtc);while(1){Key_Proc();Led_Proc();Seg_Proc();}
}