基于51单片机智能鱼缸控制系统

一、系统方案

1、本设计采用51单片机作为主控器。

2、液晶1602显示。

3、采集温度值,水质大小、水位值、DS1302显示年月日时分秒。

4、自动加热、定时喂食,自动换水、水泵加热。

5、按键设置。

二、硬件设计

原理图如下:

三、单片机软件设计

1、首先是系统初始化

delay_1ms(150);

P0 = P1 = P2 = P3 = 0xff; //单片机IO口初始化为1

// init_time0(); //初始化定时器

//init_ds1302(); //ds1302初始化

init_1602(); //lcd1602初始化

init_1602_dis_csf(); //lcd1602初始化显示

//init_eeprom(); //开始初始化保存的数据

temperature = read_temp(); //先读出温度的值

delay_1ms(650);

2、液晶显示程序

/lcd1602写命令函数 */

void write_com(uchar com)

{

e=0;

rs=0;

rw=0;

P0=com;

delay_uint(3);

e=1;

delay_uint(25);

e=0;

}

/lcd1602写数据函数 */

void write_data(uchar dat)

{

e=0;

rs=1;

rw=0;

P0=dat;

delay_uint(3);

e=1;

delay_uint(25);

e=0;

}

/lcd1602初始化设置 */

void init_1602() //lcd1602初始化设置

{

write_com(0x38); //

write_com(0x0c);

write_com(0x06);

}

/lcd1602上显示两位十进制数 */

void write_sfm1(uchar hang,uchar add,uchar date)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

write_data(table_numdate % 10);

}

/lcd1602上显示温度 */

void write_sfm3_18B20(uchar hang,uchar add,uint date)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

write_data(0x30+date/100%10);

write_data(0x30+date/10%10);

write_data('.');

write_data(0x30+date%10);

}

//
// 液晶光标定位函数
/
/

void LcdGotoXY(uchar line,uchar column)

{

// 第一行

if(line1)
write_com(0x80+column);
// 第二行
if(line2)

write_com(0x80+0x40+column);

}

//
// 液晶输出多位数字
/
/

void LCD_Write_Char(uchar x,uchar y,uint s,uchar l)

{

LcdGotoXY(x,y) ;

复制代码
if(l>=5)
	write_data(0x30+s/10000%10);	//万位
if(l>=4)
	write_data(0x30+s/1000%10);		//千位
if(l>=3)
	write_data(0x30+s/100%10);		//百位
if(l>=2)
	write_data(0x30+s/10%10);			//十位
if(l>=1)
	write_data(0x30+s%10);		//个位

}

/lcd1602上显示两位十进制数 */

void write_sfm2_ds1302(uchar hang,uchar add,uchar date)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

write_data(table_numdate/16);

write_data(table_numdate%16);

}

/lcd1602上显示这字符函数 */

void write_string(uchar hang,uchar add,uchar *p)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

while(1)

{

if(*p == '\0') break;

write_data(*p);

p++;

}

}

/控制光标函数 ***/

void write_guanbiao(uchar hang,uchar add,uchar date)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

if(date == 1)

write_com(0x0f); //显示光标并且闪烁

else

write_com(0x0c); //关闭光标

}

/lcd1602上显示特定的字符 */

void write_zifu(uchar hang,uchar add,uchar date)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

write_data(date);

}

/开机液晶显示函数 初始化液晶的内容 ****************/

void init_1602_dis_csf() //初始化液晶

{

复制代码
write_string(1,0,"   -     :  :   ");	
write_string(2,0,"00.0 C        % ");	
write_zifu(2,4,0xdf);  //显示度	

}

3、核心算法

/主函数 ***/

void main()

{

复制代码
delay_1ms(150);
P0 = P1 = P2 = P3 = 0xff;		//单片机IO口初始化为1

// init_time0(); //初始化定时器

//init_ds1302(); //ds1302初始化

init_1602(); //lcd1602初始化

init_1602_dis_csf(); //lcd1602初始化显示

//init_eeprom(); //开始初始化保存的数据

temperature = read_temp(); //先读出温度的值

delay_1ms(650);

while(1)

{

//P2=0X00;

key(); //按键程序

if(key_can < 10)

{

key_with();

}

复制代码
     if(menu_1==0)
		 {
				read_time();		  //读时间
				temperature = read_temp();	//先读出温度的值


				hunzhuozhi=Adc0832(0);				//读取AD值
				hunzhuozhi=hunzhuozhi/2.5;
				if(hunzhuozhi>=100)
						hunzhuozhi=99;
				hunzhuozhi=100-hunzhuozhi;
				write_sfm3_18B20(2,0,temperature);	   //显示温度
				LCD_Write_Char(2,12,hunzhuozhi,2) ;  ///显示浑浊度值
				init_1602_ds1302();   //显示时钟 
		}

		wendujiarekongzhi();温度加热控制函数
		ziwaixianedinshikongzhi();///喂食定时自动函数
		zengyangdinshikongzhi();   灯光继电器控制函数
		wenduzhilengkongzhi();注水泵继电器控制函数
		hunzhuodukongzhi();过滤泵继电器控制函数
 if(shuiwei_L!=0&&shuiwei_H!=0)/两个水位传感器都没监测到水 低水位 启动水泵
	 {
		Key5_shuibeng =0;启动水泵
	 }
	 if(shuiwei_L!=1&&shuiwei_H!=1)/两个水位传感器都监测到水 高水位 停止水泵
	 {
		Key5_shuibeng =1;停止水泵
	 }
	 delay_1ms(100);
}

}

四、 proteus仿真设计

Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

相关推荐
FreakStudio11 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
✎ ﹏梦醒͜ღ҉繁华落℘16 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
u1521096484916 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd84510150016 天前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼16 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
wohoo_wangzi16 天前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
✎ ﹏梦醒͜ღ҉繁华落℘16 天前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展16 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
集芯微电科技有限公司16 天前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
踏着七彩祥云的小丑16 天前
嵌入式测试学习第 37 天:异常场景测试:断电、拔插、干扰、非法指令
单片机·嵌入式硬件·学习