您的位置:首页 > 游戏 > 手游 > 在线免费货源网站_广西seo公司有哪些_在线代理浏览国外网站_网上营销新观察网

在线免费货源网站_广西seo公司有哪些_在线代理浏览国外网站_网上营销新观察网

2024/12/23 8:36:10 来源:https://blog.csdn.net/zs849644371/article/details/144306181  浏览:    关键词:在线免费货源网站_广西seo公司有哪些_在线代理浏览国外网站_网上营销新观察网
在线免费货源网站_广西seo公司有哪些_在线代理浏览国外网站_网上营销新观察网

所有仿真详情导航:

PROTEUS专栏说明-CSDN博客

目录

一、主要功能

二、硬件资源

三、主程序编程

四、资源下载


一、主要功能

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

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

二、硬件资源

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

三、主程序编程

//-----------------------------------------------------------------
// 头文件包含
//-----------------------------------------------------------------
//#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表示1suchar 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的分享

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com