【Proteus仿真】【Arduino单片机】定时智能插座开关

文章目录


一、功能简介

本项目使用Proteus8仿真Arduino单片机控制器,使LCD1602液晶,DS18B20温度传感器、按键、蜂鸣器、继电器开关、HC05蓝牙模块等。

主要功能:

系统运行后,LCD1602显示温度、温度阈值,定时时间及状态信息等;如果温度高于阈值,则开关关闭,且蜂鸣器报警。

如果温度低于阈值,当定时器状态开启,定时结束,开关关闭,发出提示音。正常模式下,可通过K1键对开关的开和关控制。

通过K3键进入阈值设置模式,可通过K3选择需修改的数据位置,K1和K2调节,当需要开启定时器时,需将状态由N设置为Y,K4键确定并返回正常模式。可通过蓝牙发送字符'O'远程打开开关,发送字符'C'关闭。


二、软件设计

c 复制代码
/*
作者:嗨小易(QQVIP群2:570487280)

*/



//系统数据显示
void sys_data_show(void)
{
	while(1)
	{
		//正常模式显示
		if(sys_ctrl.mode==0)
		{
			//温度显示
			lcd1602_show_nums(3,0,sys_ctrl.temp,2,0);
			//温度阈值显示
			lcd1602_show_nums(7,0,sys_ctrl.temph,2,0);
			//时间显示
			lcd1602_show_nums(5,1,sys_ctrl.time[0],2,0x80);
			lcd1602_show_nums(8,1,sys_ctrl.time[1],2,0x80);
			lcd1602_show_nums(11,1,sys_ctrl.time[2],2,0x80);
			
			//开关状态显示
			if(sys_ctrl.onoff==0)lcd1602_show_string(13,0,"OFF");
			else lcd1602_show_string(13,0," ON");
			//定时开关显示
			if(sys_ctrl.time_onoff==0)lcd1602_show_string(15,1,"N");
			else lcd1602_show_string(15,1,"Y");	
		}
		//设置模式显示
		else
		{
			//温度阈值显示
			lcd1602_show_nums(7,0,sys_ctrl.temph,2,0);
			//时间显示
			lcd1602_show_nums(5,1,sys_ctrl.time[0],2,0x80);
			lcd1602_show_nums(8,1,sys_ctrl.time[1],2,0x80);
			lcd1602_show_nums(11,1,sys_ctrl.time[2],2,0x80);
			switch(sys_ctrl.mode)
			{
				case 1://温度
					lcd1602_show_string(7,0,"  ");
					delay_ms(100);
					lcd1602_show_nums(7,0,sys_ctrl.temph,2,0);
					break;
				case 2://小时
					lcd1602_show_string(5,1,"  ");
					delay_ms(100);
					lcd1602_show_nums(5,1,sys_ctrl.time[0],2,0x80);
					break;
				case 3://分钟
					lcd1602_show_string(8,1,"  ");
					delay_ms(200);
					lcd1602_show_nums(8,1,sys_ctrl.time[1],2,0x80);
					break;
				case 4://开关
					lcd1602_show_string(15,1," ");
					delay_ms(200);
					if(sys_ctrl.time_onoff==0)lcd1602_show_string(15,1,"N");
					else lcd1602_show_string(15,1,"Y");
					break;	
			}	
		}	

		break;			
	}
}

//系统数据设置
void sys_data_set(void)
{
	u8 key=0;
	key=key_scan(0);
	//模式设置
	if(key==KEY3_PRESS)
	{
		sys_ctrl.mode++;
		if(sys_ctrl.mode>4)sys_ctrl.mode=1;
	}
	//正常模式
	if(sys_ctrl.mode==0)
	{
		//开
		if(key==KEY1_PRESS)
		{
			sys_ctrl.onoff=!sys_ctrl.onoff;	
		}
	}
	//设置模式
	else
	{
		//加
		if(key==KEY1_PRESS)
		{
			switch(sys_ctrl.mode)
			{
				case 1://温度
					sys_ctrl.temph++;
					if(sys_ctrl.temph>99)sys_ctrl.temph=0;
					break;
				case 2://小时
					sys_ctrl.time[0]++;
					if(sys_ctrl.time[0]>23)sys_ctrl.time[0]=0;
					break;
				case 3://分钟
					sys_ctrl.time[1]++;
					if(sys_ctrl.time[1]>59)sys_ctrl.time[1]=0;
					break;
				case 4://开关
					sys_ctrl.time_onoff=!sys_ctrl.time_onoff;
					break;
			}
		}
		//减
		else if(key==KEY2_PRESS)
		{
			switch(sys_ctrl.mode)
			{
				case 1://温度
					sys_ctrl.temph--;
					if(sys_ctrl.temph<0)sys_ctrl.temph=99;
					break;
				case 2://小时
					sys_ctrl.time[0]--;
					if(sys_ctrl.time[0]<0)sys_ctrl.time[0]=23;
					break;
				case 3://分钟
					sys_ctrl.time[1]--;
					if(sys_ctrl.time[1]<0)sys_ctrl.time[1]=59;
					break;
				case 4://开关
					sys_ctrl.time_onoff=!sys_ctrl.time_onoff;
					break;
			}
		}
		//确定
		else if(key==KEY4_PRESS)
		{
			sys_ctrl.mode=0;
		}
	}
}

三、实验现象

B站演示视频:https://space.bilibili.com/444388619


联系作者

视频地址:https://space.bilibili.com/444388619/video

专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

相关推荐
咸鱼不用加盐7 小时前
HC32F460 USB CDC通信异常:非对齐访问异常排查
单片机·arm·c·cm4
EVERSPIN10 小时前
低功耗MCU对TWS充电仓的驱动控制
单片机·嵌入式硬件·mcu·低功耗mcu
没 名 字11 小时前
电源--辅助电源电路
单片机·嵌入式硬件
西城微科方案开发14 小时前
高速低功耗增强型8位单片机——HC89F0531 SSOP24
单片机·嵌入式硬件
EdmundXjs15 小时前
flashrom v1.5.1 Windows
windows·stm32·单片机
Saniffer_SH16 小时前
【市场洞察】一叶知秋 - 从2026年开年Quarch公司PCIe 6.0测试工具销售状况说起
服务器·人工智能·嵌入式硬件·测试工具·fpga开发·自动化·压力测试
知识分享小能手17 小时前
MongoDB入门学习教程,从入门到精通,MongoDB备份完全指南(23)
数据库·学习·mongodb
llilian_1617 小时前
铷原子频率标准 以时频基准破局,为计量校准赋能 时基铷钟
网络·功能测试·单片机·嵌入式硬件·测试工具·算法
潜创微科技17 小时前
CH9339 双主机 USB3.2 协同 + PD 快充对拷芯片方案
嵌入式硬件·音视频
wearegogog12318 小时前
NEC红外线协议编码与解码(STM32实现)
网络·stm32·嵌入式硬件