一.硬件方案
工作原理是由STC89C52单片机和ADC0832组成系统的核心部分,湿度传感器将采集到的数据直接传送到ADC0832的IN端作为输入的模拟信号。选用湿度传感器和AD转换,电路内部包含有湿度采集、AD转换、单片机译码显示等功能。单片机需要采集数据时,发出指令启动A/D转换器工作,ADC0832根据送来的地址信号选通IN1通道,然后对输入的模拟信号进行转换,转换结束时,EOC输出高电平,通知单片机可以读取转换结果,单片机通过调用中断程序,读取转换后的数据。最后,单片机把采集到的湿度数据经过软件程序处理后送到LCD1602进行显示。
主要由STC89C52单片机+ADC0832+LCD1602液晶+土壤湿度传感器+防水温度传感器+抽水电机+ 按键+蜂鸣器设计;如图:
二.设计功能
(1)液晶第一行显示 实际的湿度,液晶第二行显示 湿度上限值 湿度下限值。
(2)按键说明:从左边第一个起,减键、加键、设置键。。
(3)可以设置湿度和温度的上下限报警范围,并具有掉电保存功能,保存在STC单片机内部,上电无需重新设置。
(4)当湿度低于下限值时,打开水泵进行抽水自动灌溉同时声光报警,当湿度高于上限值时,自动关闭水泵停止灌溉。
(5)当温度高于上限值时,打开水泵进行抽水自动灌溉同时声光报警,当温度低于下限值时,自动关闭水泵停止灌溉。
(6)具有手动模式,按减键手动打开抽水电机,可以按加键手动关闭抽水电机。
三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:
(2)Protues仿真图如下:
(3)PCB图如下:
四.软件设计
(1)程序流程图
(2)主程序源码
/***************主函数*****************/
void main()
{
init_1602(); //1602液晶初始化
time_init(); //初始化定时器
while(1)
{
key(); //独立按键程序
if(key_can < 10)
{
key_with(); //按键按下要执行的程序
}
if(flag_300ms == 1)
{
flag_300ms = 0;
clock_h_l(); //报警函数
if(beep == 1)
{
shidu = Adc0832(0); //读出湿度
shidu = 99 - shidu * 99 / 255;
}
if(menu_1 == 0)
{
write_sfm2(1,9,shidu); //显示湿度等级
}
}
delay_1ms(1);
}
}
/*************定时器0中断服务程序***************/
void time0_int() interrupt 1
{
static uchar value;
TH0 = 0x3c;
TL0 = 0xb0; // 50ms
value ++;
if(value % 6 == 0)
{
flag_300ms = 1; //300ms
value = 0;
}
}
关键字:51单片机 ADC0832
引用地址:
基于51单片机的盆栽自动浇花系统
推荐阅读最新更新时间:2024-11-16 20:18
使用51单片机点亮我们的点阵灯
通过前面我们都知道点亮我们的不管是点阵,数码管,还是LED灯,不仅要熟悉我们的代码还要会看我们的原理图和真值表,所以我们如果真的要写代码倒是其次的,首先我们得学会看我们的原理图和真值表,但是认识那个我们可以在网上找教程的,所以啊我这里就不去重诉别人的话了。那么我们今天要讨论什么问题勒!?我们今天讲一下点阵吧,点阵说实话对于单片机来说虽然并不是最重要的,但是点阵却是我们单片机中花样最多的之一。可能说到这么有人会说了,学了单片机我们有什么用呢,那么我们可以留意一下我们身边的一些物品,比如我们常在街上可以看见一些商店利用那些LED灯做出的花样,什么闪烁啊,各种图形变化啊,其实和我们的点阵原理都很像,不过他们那些控制的位更多,而我们51
[单片机]
高效型振荡器为8051单片机实现高速串行通信的时钟配置
引言 当今许多实时监测系统与通信设备领域中,经常需要进行远距离的数据传送。为此,如何实现高速、可靠及低成本的数据传输是作为前级机或发送级的8051单片机迫切需要解决的新技术。据此,我们采用由Dallas Semiconductor公司产的芯片DSl075--Econ oscillator(高效型振荡器)为8051系列的DS87C520高速型单片机提供时钟的配置设计方案,实现单片机串行通信的高速波特率。 Econ oscillator(高效型振荡器)含有一个内部振荡器,用以产生一个基本频率;还内置了一个分频链,可以将基本频率降低到需要的速度。Econ oscillator 的每种型号提供四种基本频率(60MHz、66.67M
[单片机]
基于51单片机的RFID门禁系统-LCD12864显示
一.硬件方案 本RFID系统设计可分为硬件部分和软件部分。硬件部分以MFRC522射频识别模块为核心,结合主控模块STC89C52设计系统的外围硬件电路,实现对射频卡的控制与MCU之间的互通。软件部分采用C语言进行系统的下位机程序的开发,完成与IC卡之间的通信,实现数据交换功能。 主要由51单片机+最小系统+LCD12864液晶显示模块+RFID无线模块+5V转3.3V稳压电路+蜂鸣器模块+AT24C02存储电路+继电器控制电路+按键模块;如图: 二.设计功能 (1)通过按键输入密码,根据密码的正确与否来进行相应的操作; (2)可使用管理员密码可以自行设定和修改密码;修改的密码自动保存至存储芯片,支持掉电保存; (3)IC
[单片机]
8051单片机的机器周期解析
在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个S周期(状态周期)组成。8051系列单片机的一个机器周期同6个S周期(状态周期)组成。前面已说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示),8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。参见后面的时序图。
[单片机]
51单片机(AT89C52)控制双路继电器
#include reg52.h #define uchar unsigned char #define uint unsigned int #define DELAY 500 sbit relay=P2^0; void delay(uint z) //1ms { uint x,y; for(x=z;x 0;x--) for(y=111;y 0;y--); } void main() { while(1) { relay=1; delay(DELAY); relay=0; delay(DELAY); } }
[单片机]
基于51单片机定时器0计时计数器1计数的霍尔传感器精确测速
#include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int sbit RW=P2^6;//定义LCD1602液晶显示器读写端 sbit RS=P2^5;//定义LCD1602液晶显示器数据命令端 sbit EN=P2^7;//定义LCD1602液晶显示器使能端 sbit qiting=P3^0;//定义启停按键 uchar qitingnum;//定义启停次数变量 uint count;//定时器0定时中断次数变量 unsigned long speed=0;//定义速度变量 uchar co
[单片机]
如何驱动51单片机串口(uart通信)
使用51单片机上uart通信的驱动程序,软件特性可以在proteus上仿真,使用51单片机定时器T1溢出率做uart波特率时基,采用12MHz晶振,uart波特率采用4800。下面直接上代码: uart驱动接口 uart模块向外提供的接口,主要是用于初始化uart和发送数据的接口。 void uart_init(void); // 初始化串口 void uart_deinit(void); // 串口去初始化 void uart_send_data(u8 dat); // 串口发送 void uart_send_num(s32 num); // 串口发送数字 void uart_send_str(string str);
[单片机]
基于51单片机的ds18B20温度程序
在学习板上正常运行,目前只能简单的检测温度。 温度变化速度有点慢,需要再调试。数码管显示还有点鬼影,暂时没想出来怎么去消鬼影。 没有添加温度上下限报警程序,没有添加按键可调温度程序,暂时不能显示小数部分。 以后还得继续努力把功能添加进去。 测得室温为31度 #include reg51.h /************共阳LED段码表*****************/ unsigned char code tab ={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6}; /************端口定义*************/ sbit
[单片机]