376 基于51单片机的智能饮水机控制系统【毕设课设】

智能饮水机


操作说明

操作包含三部分,第一是设置时间,第二是设置定时加热的开始时间和结束时间,第三是设置水温。

正常情况下,显示实时时间,当需要进行按键操作时,可按照下列步骤执行:

长按选择按键一次后释放,出现:

再按下确定键表示进入实时时间的设置;

按下选择按键二次,出现:

再按下确定按键表示进入设置定时时间;

按下选择按键三次,出现:

再按下确定按键表示进入水温的设置;

一. 进入实时时间设置:

进入设置界面如下,首先默认调节年,通过“加”“减”键来调节年的大小,调节完成后按确认键完成年的调节,然后光标跳到月的调节,表示调节月,同理按顺序可以调节日、时、分、秒、星期,最后设置完成,会到主界面显示实时时间;

二. 进入定时时间的设置:

进入设置界面如下,首先默认调节开始时间的时,通过“加”“减”键来调节时的大小,调节完成后按确认键完成时的调节,然后光标跳到分的调节,同理可调节分和秒;

完成开始时间的设置后,进入设置结束时间,界面如下,首先默认调节结束时间的时,通过“加”“减”键来调节时的大小,调节完成后按确认键完成时的调节,然后光标跳到分的调节,同理可调节分和秒;

三. 进入水温的设置:

进入设置界面如下,通过“加”“减”键来调节温度的大小,范围0-100度,调节完成后按确认即可。

完整版 电路图和程序代码 下载地址

https://pan.baidu.com/s/15rIF2yzF_pyBw3ahmgawlg?pwd=8888

部分代码展示

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

uchar time_data[7];
uchar code write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};       //数据的地址
uchar code read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};

uchar code table1[]="S:000 2000/00/00";
uchar code table2[]="N:000 00:00:00 0";
uchar code table3[]="                ";			 //清屏内容
uchar code table4[]="  Set Real Time ";
uchar code table5[]="  Set Heat Time ";
uchar code table6[]="   Start Time:  ";
uchar code table7[]="    00:00:00    ";
uchar code table8[]="    End Time:   ";
uchar code table9[]="  Set Water Temp";
uchar code table10[]="Temperature:    ";
uchar code table11[]="            000C";
uchar code table12[]="Date: 2000/00/00";
uchar code table13[]="Time: 00:00:00 0";

bit Adjust;			  //调节标志位,=1表示进入调节模式,=0是正常模式
bit Timer;			  //定时模式标志位,=1表示进入定时开启模式,=0是光线开启模式
sbit rs=P1^0;		  //LCD1602
sbit rw=P1^1; 		  //LCD1602
sbit e=P1^2;		  //LCD1602
sbit sck=P3^2;		  //时钟端口
sbit io=P3^3;		  //时钟端口
sbit rst=P3^4;		  //时钟端口
sbit SELT =P1^3;	  //选择键
sbit ENTER=P1^4;	  //确认键
sbit UP   =P1^5;	  //加键
sbit DOWN =P1^6;	  //减键
sbit CLEAN_LED=P3^7;  //清洗灯接口
sbit CHECK=P3^6;	  //水位检测灯接口
sbit HEAT =P3^5;	  //加热灯端口
sbit JDQ  =P2^7;	  //继电器接口
sbit BEEP =P2^6;	  //蜂鸣器接口
sbit DQ   =P2^2;	  //声响检测端口
sbit WATER=P2^3;	  //水位传感器接口
sbit ADD  =P2^5;	  //加水接口
sbit CLEAN=P2^4;	  //清洗接口

int temperature;	  //全局变量 温度
int temp_set=100;	  //设定温度 默认100
uchar Select_num;	  //选择按键按下次数
uchar Enter_num;	  //确认按键按下次数
float Year,Month,Day,Hour,Minute,Second,Week;		//时间设置值
float Hour_H,Minute_H,Second_H;  					//设置开始时间
float Hour_L,Minute_L,Second_L;  					//设置结束时间
int Count;						   				 	//T0中断次数
uchar Miao;											//延时时间10s
void read_rtc();

/*********************************************************************************************************************/
void delay1(uint z)			  //延时函数
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=10;y>0;y--);
}

void write_com(uchar com)			 //写指令函数
{
	rw=0;
	delay1(5);
	rs=0;
	delay1(5);
	e=1;
	delay1(5);
	P0=com;
	delay1(5);
	e=0;
	delay1(5);	
}

void write_date(uchar date)			//写数据函数
{									
	rw=0;
	delay1(5);
	rs=1;
	delay1(5);
	e=1;
	delay1(5);
	P0=date;
	delay1(5);
	e=0;
	delay1(5);	
}

void init()						    //初始化函数
{	
	uchar num;
	Hour_H=23;
	Minute_H=59;
	Second_H=59;
	e=0;						    // 时序表e初始为0
	write_com(0x38);		        //设置16*2显示,5*7点阵,8位数据接口
	write_com(0x0c);				//设置光标
	write_com(0x06);				//光标自动加1,光标输入方式
	write_com(0x01);				//清屏
	write_com(0x80);				//设置初始显示位置
	for(num=0;num<16;num++)
	{
		write_date(table1[num]);
		delay1(5);
	}
	write_com(0x80+0x40);
	for(num=0;num<16;num++)
	{
		write_date(table2[num]);
		delay1(5);
	}					  
}

void SetTime_dispaly(uchar add,uchar dat)	 //第一个:参数的地址,第二个:参数的内容
{
	uchar shi,ge;
	shi=dat/10;							//十位提取出来
	ge=dat%10;							//个位提取出来
	write_com(add);			   	 		//要写的地址
	write_date(0x30+shi);				//十位的内容   1602字符库
	write_date(0x30+ge);				//个位的内容   1602字符库
}
void Temperature_dispaly(uchar add,uchar dat)	 //第一个:参数的地址,第二个:参数的内容
{
	uchar bai,shi,ge;
	bai=dat/100;
	shi=dat%100/10;						//把温度的十位提取出来
	ge=dat%10;							//把温度的个位提取出来
	write_com(add);			   			//要写的地址
	write_date(0x30+bai);
	write_date(0x30+shi);				//十位的内容   1602字符库
	write_date(0x30+ge);				//个位的内容   1602字符库
}
void Date_dispaly(uchar add,uchar dat)	 //第一个:参数的地址,第二个:参数的内容
{
	uchar shi,ge;
	shi=dat/16;							//把温度的十位提取出来
	ge=dat%16;							//把温度的个位提取出来
	write_com(add);			   	 		//要写的地址
	write_date(0x30+shi);				//十位的内容   1602字符库
	write_date(0x30+ge);				//个位的内容   1602字符库				   
}
void Week_dispaly(uchar add,uchar dat)	//第一个:参数的地址,第二个:参数的内容
{
	write_com(add);						//要写的地址
	write_date(0x30+dat);				//十位的内容   1602字符库
}
void LCD_Clean(uchar i)					//液晶屏清除显示
{
	uchar num;
	if(i==1)
	{
		write_com(0x80);				//设置初始显示位置
		for(num=0;num<16;num++)			//显示第一行内容
		{
			write_date(table3[num]);
			delay1(1);
		}
	}
	if(i==2)
	{
		write_com(0x80+0x40);
		for(num=0;num<16;num++)			//显示第二行内容
		{
			write_date(table3[num]);
			delay1(1);
		}
	}
}

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值