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

相关推荐
竹照煜_ysn5 小时前
蓝桥杯51单片机设计
单片机·嵌入式硬件·51单片机
Electron-er6 小时前
汽车LIN总线通讯:从物理层到协议栈的深度解析
单片机·汽车电子·lin总线·lin总线通讯
Do vis8247 小时前
STM32第十六天蓝牙模块
stm32·单片机·嵌入式硬件
学不动CV了7 小时前
ARM单片机启动流程(二)(详细解析)
c语言·arm开发·stm32·单片机·51单片机
猫猫的小茶馆9 小时前
【STM32】通用定时器基本原理
c语言·stm32·单片机·嵌入式硬件·mcu·51单片机
jingshaoqi_ccc9 小时前
stm32的USART使用DMA配置成循环模式时发送和接收有着本质区别
stm32·单片机·嵌入式硬件
MingYue_SSS12 小时前
开关电源抄板学习
经验分享·笔记·嵌入式硬件·学习
玉树临风江流儿13 小时前
炸鸡派-定时器基础例程
单片机·嵌入式硬件
小宋同学在不断学习13 小时前
stm32-掌握SPI原理(一)
stm32·单片机·spi
is081514 小时前
STM32的 syscalls.c 和 sysmem.c
c语言·stm32·嵌入式硬件