【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设计,视频分享,技术交流。

相关推荐
Mr..Jackey5 小时前
瑞佑 RUI Builder 图形化 UI 设计工具
arm开发·人工智能·单片机·ui·人机交互·ra8889·lcd控制芯片
西城微科方案开发8 小时前
多品类电子秤一体化PCBA整体方案
单片机·嵌入式硬件·电子秤
火花页.8 小时前
【正点原子ZYNQ领航者7020】PS端GPIO中断→按键控制LED实验
单片机·嵌入式硬件
ye150127774559 小时前
4.2V升6V1A同步升压WT3213
单片机·嵌入式硬件·其他·硬件工程
嵌入式小站10 小时前
STM32 可移植教程 02:按键状态机,消抖、长按、释放一行也不用多写(实战篇)
chrome·vscode·stm32·单片机·嵌入式硬件
Szime10 小时前
AD9694 国产替代方案:四通道高速 ADC 在通信与雷达项目中的选型参考
单片机·嵌入式硬件·fpga开发
fanged10 小时前
Datasheet学习6(光机)
嵌入式硬件
芯岭技术郦11 小时前
高性能的 32 位 ARM® Cortex®-M0+内核PY32F002A
单片机·嵌入式硬件
破晓单片机12 小时前
060、STM32项目分享:养老智能手环系统
stm32·单片机·嵌入式硬件
H__Rick12 小时前
C51学习-DAY4
嵌入式硬件·学习·51单片机·硬件工程