基于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_num[date % 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_num[date/16]);

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

相关推荐
lucy1530275107935 分钟前
【青牛科技】GC5931:工业风扇驱动芯片的卓越替代者
人工智能·科技·单片机·嵌入式硬件·算法·机器学习
scan113 小时前
单片机串口接收状态机STM32
stm32·单片机·串口·51·串口接收
Qingniu0114 小时前
【青牛科技】应用方案 | RTC实时时钟芯片D8563和D1302
科技·单片机·嵌入式硬件·实时音视频·安防·工控·储能
深圳市青牛科技实业有限公司15 小时前
【青牛科技】应用方案|D2587A高压大电流DC-DC
人工智能·科技·单片机·嵌入式硬件·机器人·安防监控
Mr.谢尔比16 小时前
电赛入门之软件stm32keil+cubemx
stm32·单片机·嵌入式硬件·mcu·信息与通信·信号处理
LightningJie16 小时前
STM32中ARR(自动重装寄存器)为什么要减1
stm32·单片机·嵌入式硬件
西瓜籽@17 小时前
STM32——毕设基于单片机的多功能节能窗控制系统
stm32·单片机·课程设计
远翔调光芯片^1382879887219 小时前
远翔升压恒流芯片FP7209X与FP7209M什么区别?做以下应用市场摄影补光灯、便携灯、智能家居(调光)市场、太阳能、车灯、洗墙灯、舞台灯必看!
科技·单片机·智能家居·能源
极客小张20 小时前
基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
stm32·单片机·嵌入式硬件·mqtt·sqlite·毕业设计·智能充电桩
m0_739312871 天前
【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)
stm32·单片机·嵌入式硬件