62 基于单片机的智能饮水机

所有仿真详情导航:

PROTEUS专栏说明-CSDN博客

目录

一、主要功能

二、硬件资源

三、主程序编程

四、资源下载


一、主要功能

基于51单片机,采用DS1302时钟模块读取时间,DS18B20温度传感器检测时间,超声波检测,如果靠近,则感应自动出水,LCD1602显示实时时间,水杯温度,水位高度,是否出水,如果水温和水位超过下限,则声光报警,此时继电器闭合,自动加热/加水,然后也可以手动加热,加水,清洗,然后采用串口模拟WIFI,与电脑端通信模拟手机APP,报警的时候会发出信息给电脑端。

具体动态效果看B站演示视频(高清需要跳转到B站看)

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

三、主程序编程

cpp 复制代码
//-----------------------------------------------------------------
// 头文件包含
//-----------------------------------------------------------------
//#include <reg51.h>
#include "reg52.H"
#include <intrins.h>
#include <stdio.h>
//-----------------------------------------------------------------
// 数据类型宏定义
//-----------------------------------------------------------------
#define uchar unsigned char
#define uint  unsigned int

//-----------------------------------------------------------------
// 定义LCD使用的IO口
//-----------------------------------------------------------------
sbit rs=P2^2;  //寄存器选择端口
sbit rw=P2^1;  //读写选择端口
sbit ep=P2^0;  //使能信号端口

//-----------------------------------------------------------------
// 定义ds1302使用的IO口
//-----------------------------------------------------------------
sbit DSIO=P2^7;
sbit RST=P2^5;
sbit SCLK=P2^6;

//-----------------------------------------------------------------
// 定义按键、蜂鸣器和继电器使用的IO口
//-----------------------------------------------------------------
sbit KEY1=P1^2;  			//手动加水按键设置
sbit KEY2=P1^3;  			//手动清洗按键设置
sbit KEY3=P1^4;  			//手动上传数据按键设置
sbit LED1=P1^0;				//led报警设置
sbit LED2=P1^1;   		//led水位过低标志
sbit BUZZER=P2^3;  		//蜂鸣器设置
sbit HOT=P2^4;  			//加热设置
sbit ADD_Water=P1^7;	//加水设置
sbit CLEAN=P3^2;	    //清洗设置
//-----------------------------------------------------------------
// 定义DS18B20数据口
//-----------------------------------------------------------------
sbit DQ = P3^3;  
uchar FLAG=1;   //正负温度标志
unsigned char TMPH,TMPL;
uint temp;
//-----------------------------------------------------------------
// 定义ADC0832数据口
//-----------------------------------------------------------------
sbit cs = P3^4;//片选使能,低电平有效
sbit clk = P3^5;//芯片时钟输入
sbit dio = P3^7;//数据输入DI与输出DO

//-----------------------------------------------------------------
// 定义超声波数据口
//-----------------------------------------------------------------
sbit Trig = P1^5;		//触发信号控制端口
sbit Echo = P1^6;		//回响信号接收端口
unsigned int S = 0;					//距离缓存变量
unsigned long times = 0;				//时间缓存变量 

//sbit TXD   = P3^1;

//---DS1302写入和读取时分秒的地址命令---//
//---秒分时日月周年 最低位读写位;-------//
uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; 
uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};

//LCD要显示的时间所在的地址
uchar code DT_lcdplace[] = {0x06,0x03,0x00};

//---存储顺序是秒分时日月周年,存储格式是用BCD码---//
uchar TIME[] = {0, 0, 0};

uchar data_h,data_l;

uchar add_flag,drop_flag;

char count=0;		//计数,count=20表示1s

uchar Alarm_time[] = {12,30,00};//闹钟时间

uchar temp1,temp2;

static char Dat_rxd;

static int moshi=0;

//-----------------------------------------------------------------
// 延时程序
//-----------------------------------------------------------------
void delay(uchar ms)
{
	uchar i;
	while(ms--)
	{
		for(i=0; i<250; i++)
		{			
			_nop_();
			_nop_();
			_nop_();			
			_nop_();			
		}
	}
}
void delay_temp(uchar N)
{
     while(--N);
}

//延时2us
void Delay_2us(void)
{
	_nop_();
	_nop_();
}

/******************************************************
** 函数名:Com0
** 描述  :串口上传pc函数
** 输入  :要上传的数据
** 输出  :无
******************************************************/
void Com0_Init(void)
{
	  ES=1;        //允许串口中断
    TMOD=0x21;   //定时器T1,在方式3中断产生波特率
    SCON=0x50;
    TH1=0xfd;    //波特率设置为9600(晶振12M)
    TL1=0xfd;
    TR1=1;       //开定时器T1运行控制位
	  TI=1;
	
}

void Com0(void) interrupt 4 using 1
{
    if(RI)
    {
        Dat_rxd=SBUF;                 //串口接收
        Dat_rxd=Dat_rxd-0x30;
        RI=0;
    }
}

/*******************************************************************************
* 函 数 名         : Ds1302Write
* 函数功能		   : 向DS1302命令(地址+数据)
* 输    入         : addr,dat
* 输    出         : 无
*******************************************************************************/
void Ds1302Write(uchar addr, uchar dat)
{
	uchar n;
	RST = 0;
	_nop_();

	SCLK = 0;//先将SCLK置低电平。
	_nop_();
	RST = 1; //然后将RST(CE)置高电平。
	_nop_();

	for (n=0; n<8; n++)//开始传送八位地址命令
	{
		DSIO = addr & 0x01;//数据从低位开始传送
		addr >>= 1;
		SCLK = 1;//数据在上升沿时,DS1302读取数据
		_nop_();
		SCLK = 0;
		_nop_();
	}
	for (n=0; n<8; n++)//写入8位数据
	{
		DSIO = dat & 0x01;
		dat >>= 1;
		SCLK = 1;//数据在上升沿时,DS1302读取数据
		_nop_();
		SCLK = 0;
		_nop_();	
	}	
		 
	RST = 0;//传送数据结束
	_nop_();
}

/*******************************************************************************
* 函 数 名         : Ds1302Read
* 函数功能		   : 读取一个地址的数据
* 输    入         : addr
* 输    出         : dat
*******************************************************************************/
uchar Ds1302Read(uchar addr)
{
	uchar n,dat,dat1;
	RST = 0;
	_nop_();

	SCLK = 0;//先将SCLK置低电平。
	_nop_();
	RST = 1;//然后将RST(CE)置高电平。
	_nop_();

	for(n=0; n<8; n++)//开始传送八位地址命令
	{
		DSIO = addr & 0x01;//数据从低位开始传送
		addr >>= 1;
		SCLK = 1;//数据在上升沿时,DS1302读取数据
		_nop_();
		SCLK = 0;//DS1302下降沿时,放置数据
		_nop_();
	}
	_nop_();
	for(n=0; n<8; n++)//读取8位数据
	{
		dat1 = DSIO;//从最低位开始接收
		dat = (dat>>1) | (dat1<<7);
		SCLK = 1;
		_nop_();
		SCLK = 0;//DS1302下降沿时,放置数据
		_nop_();
	}

	RST = 0;
	_nop_();	//以下为DS1302复位的稳定时间,必须的。
	SCLK = 1;
	_nop_();
	DSIO = 0;
	_nop_();
	DSIO = 1;
	_nop_();
	return dat;	
}

四、资源下载

全部资料(源程序、仿真文件、安装包、原理图、演示视频):

链接: https://pan.baidu.com/s/1E1pIODjUJ1ykFsrM7jJFPQ?pwd=c8y4 提取码: c8y4

--来自百度网盘超级会员v4的分享

相关推荐
sinat_360704829 小时前
STM32 看门狗
stm32·单片机·嵌入式硬件
亿道电子Emdoor9 小时前
【ARM】MDK如何生成指定大小的bin文件,并指定空区域的填充数据
arm开发·stm32·单片机
mftang9 小时前
STM32 CAN过滤器配置和应用方法介绍
stm32·单片机·嵌入式硬件
楼台的春风11 小时前
【详细讲解在STM32的UART通信中使用DMA机制】
stm32·单片机·嵌入式硬件·mcu·物联网·嵌入式·信息与通信
Chambor_mak11 小时前
stm32单片机个人学习笔记16(SPI通信协议)
stm32·单片机·学习
电子科技圈12 小时前
在低功耗MCU上实现人工智能和机器学习
人工智能·经验分享·科技·嵌入式硬件·mcu·物联网·机器学习
小白今天也很酷12 小时前
Python与MCU通信:串口数据采集及CSV/Excel存储方法
python·单片机·excel
海的预约13 小时前
51单片机-按键
单片机·嵌入式硬件·51单片机
qq_7556822401 天前
STM32使用NRF2401进行数据传送
stm32·单片机·嵌入式硬件
FreakStudio1 天前
开源一款串口舵机驱动扩展板-FreakStudio多米诺系列
单片机·嵌入式·大学生·电子diy