基于51单片机的智能鱼缸设计利用AT89C51作为系统主控,LCD1602作为系统主控,DS18B20作为本次系统的温度传感器,实时检测鱼缸温度信息,并通过该信息调整加热器件,实现鱼缸的恒温设计,同时还有定时加水功能,为了提高设计的灵活性,使用按键进行模式切换、位置切换、减、加等功能。
一、硬件设计
1、继电器设计
本次设计利用继电器加NPN三极管进行组合,实现控制,由于加热和水阀一般输入大功能器件,通过NPN三极管的特性,导通电平为高电平,由于Proteus中并没有专门的加热和水阀器件,这里使用led进行代替。
2、DS1302
DS1302的电路设计主要包括DS1302芯片和32.768khz的晶振。DS1302使用SPI的通信方式。
3、外部中断扩展
本次设计使用二极管扩展外部中断,因为本次设计对于按键响应具有实时性的要求。
二、软件设计
1、DS1302驱动
#include <REGX52.H>
sbit DS1302_CE=P1^0;
sbit DS1302_SCLK=P1^1;
sbit DS1302_IO=P1^2;
//Write:
#define DS1302_SECOND 0x80
#define DS1302_MINUTE 0x82
#define DS1302_HOUR 0x84
#define DS1302_DATA 0x86
#define DS1302_MONTH 0x88
#define DS1302_DAY 0x8a
#define DS1302_YEAR 0x8c
#define DS1302_WP 0x8e
char DS1302_Time[]={22,1,24,20,01,40,1};
void DS1302_Init()
{
DS1302_CE=0;
DS1302_SCLK=0;
}
void DS1302_WriteByte(unsigned char Command,Data)
{
unsigned char i;
DS1302_CE=1;
for(i=0;i<8;i++)
{
DS1302_IO=Command&(0x01<<i);
DS1302_SCLK=1;
DS1302_SCLK=0;
}
for(i=0;i<8;i++)
{
DS1302_IO=Data&(0x01<<i);
DS1302_SCLK=1;
DS1302_SCLK=0;
}
DS1302_CE=0;
}
unsigned char DS1302_ReadByte(unsigned char Command)
{
unsigned char i,Data=0x00;
Command|=0x01;
DS1302_CE=1;
for(i=0;i<8;i++)
{
DS1302_IO=Command&(0x01<<i);
DS1302_SCLK=0;
DS1302_SCLK=1;
}
for(i=0;i<8;i++)
{
DS1302_SCLK=1;
DS1302_SCLK=0;
if(DS1302_IO){Data|=(0x01<<i);}
}
DS1302_IO=0;
DS1302_CE=0;
return Data;
}
void DS1302_SetTime()
{
DS1302_WriteByte(DS1302_WP,0x00);
DS1302_WriteByte(DS1302_YEAR,DS1302_Time[0]/10*16+DS