STM32单片机智能电饭煲系统设计方案

发布时间:2023-08-08  

一、功能简介

本项目使用Proteus8.12仿真STM32单片机控制器,使用继电器加热/保温模块、数码管模块、按键模块、LED指示灯、蜂鸣器模块等。


主要功能:

系统运行后,数码管默认不显示,当按下K5键选择功能模式,此时数码管会显示对应模式所需时间,且LED指示灯工作,系统默认有煮饭、煮粥、蒸、煲汤四种功能,还可按下K6键设置预约时间,通过K2和K3键修改时间,当设置好时间后,按下K4键开始,预约时间开始倒计时,当时间达到后,继电器开启加热,在所选功能时间倒计时结束后停止加热,开启保温。若不需要保温,可按下K1键关闭。


主要功能如下:

(1)功能:煮饭、煮粥、蒸、煲汤;

(2)按键:开始、取消、功能、加减、预约;

二、软件设计

//功能指示灯显示

void _fun_led_show(u8 sta)

{

switch(sta)

{

case 1://煮饭

LED_ZF=0;LED_ZZ=1;LED_Z=1;LED_BT=1;

break;

case 2://煮粥

LED_ZF=1;LED_ZZ=0;LED_Z=1;LED_BT=1;

break;

case 3://蒸

LED_ZF=1;LED_ZZ=1;LED_Z=0;LED_BT=1;

break;

case 4://煲汤

LED_ZF=1;LED_ZZ=1;LED_Z=1;LED_BT=0;

break;

}

}

//功能选择时间初始化

void _fun_time_init(u8 fun)

{

switch(fun)

{

case 1://煮饭

sys_ctrl.hour=0;sys_ctrl.min=0;sys_ctrl.sec=10;

break;

case 2://煮粥

sys_ctrl.hour=0;sys_ctrl.min=0;sys_ctrl.sec=7;

break;

case 3://蒸

sys_ctrl.hour=0;sys_ctrl.min=0;sys_ctrl.sec=5;

break;

case 4://煲汤

sys_ctrl.hour=0;sys_ctrl.min=0;sys_ctrl.sec=4;

break;

}

}

//系统数据设置

void sys_data_set(void)

{

u8 key=0;

key=KEY_Scan(0);

//还未开启时,按键控制

if(sys_ctrl.start==0)

{

//功能选择

if(key==KEY5_PRESS)

{

sys_ctrl.fun++;

if(sys_ctrl.fun>4)sys_ctrl.fun=1;

_fun_led_show(sys_ctrl.fun);//功能指示灯显示

_fun_time_init(sys_ctrl.fun);//设置初始时间

}

//开始工作

else if(key==KEY4_PRESS)

{

//未开启预约

if(sys_ctrl.order==0)

{

//仅当选择好功能模式后,开启有效

if(sys_ctrl.fun!=0)

{

sys_ctrl.start=1;

LED_KS=0;//开始指示灯亮

TIM_Cmd(TIM2,ENABLE);//开启定时器

RELAY_JR=0;//加热开启

RELAY_BW=1;//保温关闭

sys_ctrl.insul=0;

}

}

//已开启预约

else

{

//仅当选择好功能模式后,开启有效

if(sys_ctrl.fun!=0)

{

sys_ctrl.start=1;

TIM_Cmd(TIM2,ENABLE);//开启定时器

RELAY_BW=1;//保温关闭

sys_ctrl.insul=0;

}

}

}

//保温/取消

else if(key==KEY1_PRESS)

{

//还未开启预约,保温

if(sys_ctrl.order==0)

{

sys_ctrl.insul=!sys_ctrl.insul;

RELAY_BW=!RELAY_BW;

}

//已开启预约,取消

else

{

sys_ctrl.order=0;

LED_YY=1;

}

}

//预约

else if(key==KEY6_PRESS)

{

//已选择好功能模式,可以开始预约时间

if(sys_ctrl.fun!=0)

{

sys_ctrl.order=1;

LED_YY=0;

}

}

//加

else if(key==KEY2_PRESS)

{

//已开启预约,可以设置时间

if(sys_ctrl.order==1)

{

sys_ctrl.time[1]+=30;//加30分钟

if(sys_ctrl.time[1]>=60)

{

sys_ctrl.time[1]=0;

sys_ctrl.time[0]++;//加1小时

if(sys_ctrl.time[0]>23)sys_ctrl.time[0]=0;

}

}

}

//减

else if(key==KEY3_PRESS)

{

//已开启预约,可以设置时间

if(sys_ctrl.order==1)

{

sys_ctrl.time[1]-=30;//减30分钟

if(sys_ctrl.time[1]<0)

{

sys_ctrl.time[1]=30;

sys_ctrl.time[0]--;//减1小时

if(sys_ctrl.time[0]<0)sys_ctrl.time[0]=23;

}

}

}

}

//开始工作时,按键控制

else

{

//取消

if(key==KEY1_PRESS)

{

TIM_Cmd(TIM2,DISABLE);

sys_parm_init();

}

}

}

//系统数据获取

void sys_data_get(void)

{

}

//系统数据显示

void sys_data_show(void)

{

u8 buf[8];

//还未开启时,功能选择时,数码管显示对应功能时间

if(sys_ctrl.start==0)

{

//进入功能选择时,数据处理

if(sys_ctrl.fun!=0)

{

//未开启预约,时间显示

if(sys_ctrl.order==0)

{

buf[0]=gsmg_code[sys_ctrl.hour/10];

buf[1]=gsmg_code[sys_ctrl.hour%10];

buf[2]=0x40;

buf[3]=gsmg_code[sys_ctrl.min/10];

buf[4]=gsmg_code[sys_ctrl.min%10];

buf[5]=0x40;

buf[6]=gsmg_code[sys_ctrl.sec/10];

buf[7]=gsmg_code[sys_ctrl.sec%10];

//数码管显示

smg_display(buf,1);

}

//开启预约,数码管显示预约时间

else

{

buf[0]=gsmg_code[sys_ctrl.time[0]/10];

buf[1]=gsmg_code[sys_ctrl.time[0]%10];

buf[2]=0x40;

buf[3]=gsmg_code[sys_ctrl.time[1]/10];

buf[4]=gsmg_code[sys_ctrl.time[1]%10];

buf[5]=0x40;

buf[6]=gsmg_code[sys_ctrl.time[2]/10];

buf[7]=gsmg_code[sys_ctrl.time[2]%10];

//数码管显示

smg_display(buf,1);

}

}

}

//开启后,时间显示

else

{

//未开启预约,时间显示

if(sys_ctrl.order==0)

{

buf[0]=gsmg_code[sys_ctrl.hour/10];

buf[1]=gsmg_code[sys_ctrl.hour%10];

buf[2]=0x40;

buf[3]=gsmg_code[sys_ctrl.min/10];

buf[4]=gsmg_code[sys_ctrl.min%10];

buf[5]=0x40;

buf[6]=gsmg_code[sys_ctrl.sec/10];

buf[7]=gsmg_code[sys_ctrl.sec%10];

//数码管显示

smg_display(buf,1);

}

//已开启预约,显示预约时间

else

{

buf[0]=gsmg_code[sys_ctrl.time[0]/10];

buf[1]=gsmg_code[sys_ctrl.time[0]%10];

buf[2]=0x40;

buf[3]=gsmg_code[sys_ctrl.time[1]/10];

buf[4]=gsmg_code[sys_ctrl.time[1]%10];

buf[5]=0x40;

buf[6]=gsmg_code[sys_ctrl.time[2]/10];

buf[7]=gsmg_code[sys_ctrl.time[2]%10];

//数码管显示

smg_display(buf,1);

}

}

}

//系统功能控制

void sys_fun_ctrl(void)

{

}

//应用控制系统

void appdemo_show(void)

{

KEY_Init();

smg_init();

BEEP_Init();

ctrl_pin_init();

TIM2_Init(500-1,71);//定时10ms

sys_parm_init();//系统参数初始化

while(1)

{

sys_data_set();//系统数据设置

sys_data_get();//系统数据获取

sys_data_show();//系统数据显示

sys_fun_ctrl();//系统功能控制

}

}

/*******************************************************************************

  • 函 数 名 : TIM2_IRQHandler

  • 函数功能 : TIM2中断函数

  • 输 入 : 无

  • 输 出 : 无

*******************************************************************************/

void TIM2_IRQHandler(void)

{

static u8 i=0;

if(TIM_GetITStatus(TIM2,TIM_IT_Update))

{

i++;

if(i>=100)//1S到达

{

i=0;

//未开启预约,倒计时

if(sys_ctrl.order==0)

{

sys_ctrl.sec--;

if(sys_ctrl.sec<0)

{

sys_ctrl.sec=59;

sys_ctrl.min--;

if(sys_ctrl.min<0)

{

sys_ctrl.min=59;

sys_ctrl.hour--;

if(sys_ctrl.hour<=0)

sys_ctrl.hour=0;

}

}

else if(sys_ctrl.sec==0)

{

if(sys_ctrl.min==0)

{

if(sys_ctrl.hour==0)//时间达到

{

TIM_Cmd(TIM2,DISABLE);//关闭定时器

sys_parm_init();

sys_ctrl.okflag=1;

sys_ctrl.insul=1;//保温标记

RELAY_BW=0;//保温开启

BEEP=0;//蜂鸣器提示

delay_ms(1000);

BEEP=1;

}

}

}

}

//已开启预约,倒计时

else

{

sys_ctrl.time[2]--;

if(sys_ctrl.time[2]<0)

{

sys_ctrl.time[2]=59;

sys_ctrl.time[1]--;

if(sys_ctrl.time[1]<0)

{

sys_ctrl.time[1]=59;

sys_ctrl.time[0]--;

if(sys_ctrl.time[0]<=0)

sys_ctrl.time[0]=0;

}

}

else if(sys_ctrl.time[2]==0)

{

if(sys_ctrl.time[1]==0)

{

if(sys_ctrl.time[0]==0)//时间达到

{

sys_ctrl.order=0;

sys_ctrl.okflag=0;

sys_ctrl.time[0]=0;sys_ctrl.time[1]=0;sys_ctrl.time[2]=0;

LED_KS=0;LED_YY=1;//开始指示灯亮

sys_ctrl.okflag=1;

sys_ctrl.start=1;

TIM_Cmd(TIM2,ENABLE);//开启定时器

RELAY_JR=0;//加热开启

}

}

}

}

}

}

TIM_ClearITPendingBit(TIM2,TIM_IT_Update);

}

三、实验现象

图片

图片

图片

图片


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>