基于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仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

相关推荐
小李不想当小白1 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
LCG米2 小时前
STM32驱动W5500以太网模块实测:TCP吞吐瓶颈定位、TX指针回绕陷阱与断线重连保活落地
stm32·单片机·嵌入式硬件·tcp/ip
尼喃3 小时前
662K/65Z5三脚稳压芯片规格书—PW6566B33/B30引脚功能
嵌入式硬件
创界工坊工作室3 小时前
63-基于STC89C52霍尔传感器的智能化电能表设计
stm32·单片机·嵌入式硬件·51单片机·proteus
智购科技自动售货机厂家4 小时前
让AI经营自动售货机:从Project Vend看工具权限与业务规则~YH
大数据·服务器·单片机·嵌入式硬件·深度学习
Zwawa6 小时前
从 printf 到曲线:把数据送上 VOFA+
c语言·单片机·嵌入式
意法半导体STM326 小时前
【官方原创】LAT6048 如何扩大MP2的A35核和M33核共享内存
stm32·单片机·嵌入式硬件·内存映射·stm32mp2
en.en..6 小时前
STM32(F429)启动模式与两种烧录方式
stm32·单片机·嵌入式硬件
单片机仿真设计7 小时前
基于 51 单片机的数字温度计(DS18B20+LCD1602+Proteus 仿真,支持阈值可调声光报警)
单片机·嵌入式硬件·proteus·课设
芝士爱沙拉7 小时前
原生内置agent智能开发能力的MCU IDE-MounRiver Studio
ide·单片机·嵌入式硬件