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

发布者:VS821001最新更新时间:2023-08-08 来源: elecfans关键字:STM32  单片机 手机看文章 扫描二维码
随时随地手机看文章

一、功能简介

本项目使用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);

}

三、实验现象

图片

图片

图片

图片


关键字:STM32  单片机 引用地址:STM32单片机智能电饭煲系统设计方案

上一篇:应用笔记|如何在 STM32U5 系列上校准内部 RC 振荡器
下一篇:基于STM32单片机的RFID和云平台仓库管理系统设计

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved