基于中微89F2265B的200w智能电饭煲

大三暑假的时候,小组三人从零设计了一个智能电饭煲项目

文章目录

    • 一、主要功能
    • 二、硬件设计
      • 2.1 控制板
      • 2.2 电源板
    • 三、软件设计
      • 3.1 总体框架
      • 3.2 功能细化
        • 3.2.1 开机
        • 3.2.2 各按键功能
        • 3.2.3 电饭煲定时与预约功能
        • 3.2.4 电饭煲加热功能
        • 3.2.5 其他说明
      • 3.3 主流程图
      • 3.4 主函数程序
    • 四、开发问题

一、主要功能

电饭煲主要功能概括为以下四点:

主要功能逻辑
功能选择① 按“功能选择”键,可依次从煮饭-慢炖-粥/汤-保温之间循环切换。
② 选择功能后,无其他操作5秒后自动进入工作状态数码管显示“- -”并上下跳动。
保温预约① 在待机状态下数码管显示“- -”,按“保温取消”键直接进入保温状态。备注:在通电状态下保温时长为24小时。
② 在工作状态下数码管显示“- -”并上下跳动,按“保温取消”键可取消操作进行重新操作。
定时① 按“定时”键可进行定时设定,煮饭和保温无定时设定。
② 按“功能选择”键选择好功能后,再按“定时”键对所选功能进行定时设定
预约① 按“预约”键可进行预约设定,保温无预约设定。
② 按“功能选择”键选择好功能后,再按“预约”键对多选功能进行预约设定。
③ 预约时间操作完成后,无其他操作5秒后进入预约状态,指示灯开始闪烁

① 煮饭工作时间约40分钟;

② 慢炖工作时间约60分钟;

③ 粥/汤工作时间约75分钟;

④ 保温功能可用于加热饭菜工作时间约20分钟

二、硬件设计

2.1 控制板

控制板主要包括核心芯片 89F2265B、连接到电源板的接线口(包括热敏电阻 NTC)、两位数码管、4 个按键与 4 个指示灯,原理图设计如下:

在这里插入图片描述

PCB 如下:

在这里插入图片描述

BOM 表如下:

在这里插入图片描述

装配实物图:

在这里插入图片描述

2.2 电源板

电源板主要包括电源驱动部分、蜂鸣器驱动电路、继电器驱动电路与连接到控制板的接线口,原理图设计如下:

在这里插入图片描述

其中对于电源驱动部分,由 220V 交流电经过保险丝、压敏电阻等,由变压器变成 10.5V,通过 MB10S 桥式整流器由交流转换成直流电输出给 78L05 输出 5V 作为 VCC。

PCB 如下:

在这里插入图片描述

BOM 表如下:

在这里插入图片描述

装配实物图:

在这里插入图片描述

三、软件设计

3.1 总体框架

按照分层的概念,整个电饭煲功能可以分区硬件驱动层与用户应用层。

对于硬件驱动层,分为:

1、数码管驱动

2、按键驱动

3、发光二极管驱动

4、蜂鸣器驱动

5、继电器驱动

对于用户应用层,分为:

1、待机状态

2、工作状态

3、取消状态

各个状态有各自的功能。

思维导图如下:

在这里插入图片描述

3.2 功能细化

3.2.1 开机

数码管与LED全亮1秒,1秒后数码管显示“- -”,LED全部熄灭。

3.2.2 各按键功能

功能选择

(一)、按“功能选择”键,可依次从煮饭-慢炖-粥/汤-保温之间循环切换,所对应的LED点亮;

(二)、选择功能后,无其他操作5秒后自动进入工作状态数码管显示“- -”并往下跳动;

(三)、无其他操作5秒后只能按下“保温取消”键进行取消,取消后LED全灭,数码管显示“- -”。

保温/取消

(一)、在待机状态下数码管显示“- -”,按“保温取消”键直接进入保温状态。备注:在通电状态下保温时长为24小时;

(二)、在工作状态下数码管显示“- -”并往下跳动,按“保温取消”键可取消操作进行重新操作。

(三)、按“取消”键,功能重新依次从煮饭-慢炖-粥/汤-保温之间循环切换

定时

(一)、按“定时”键可进行定时设定,煮饭和保温无定时设定;

(二)、按“功能选择”键选择好功能后,再按“定时”键对所选功能进行定时设定。

预约

(一)、按“预约”键可进行预约设定,保温无预约设定;

(二)、按“功能选择”键选择好功能后,再按“预约”键对多选功能进行预约设定;

(三)、预约时间操作完成后,无其他操作5秒后进入预约状态,指示灯开始闪烁。

3.2.3 电饭煲定时与预约功能

煮饭

(一)、数码管显示“- -”并间隔1s闪烁,“煮饭”LED点亮;

(二)、无其他操作5秒后,数码管显示“- -”并往下一直跳动,蜂鸣器响一声;

(三)、无其他操作5秒后只能按下“保温取消”键进行取消,取消后LED全灭,数码管显示“- -”;

(四)、5秒内按“预约”键,数码管显示“0.5”,每按一下“预约”键,数码管显示数值增加0.5,一直到显示“10.”(注意显示一个点)切换为数值每次增加1,一直到显示“24.”,再按一下“预约”键就显示“0.0”,无其他操作5秒后,数码管显示“预约值”(不闪烁),“煮饭”LED间隔1秒闪烁,蜂鸣器响一声

慢炖

(一)、数码管显示“1.0”并间隔1秒闪烁,“慢炖”LED点亮;

(二)、无其他操作5秒后,数码管显示“1.0”不闪烁,蜂鸣器响一声;

(三)、无其他操作5秒后只能按下“保温取消”键进行取消,取消后LED全灭,数码管显示“- -”;

(四)、按“定时”键每次数码管显示数值增加0.5,从显示“1.0”到“4.0”循环;

(五)、5秒内按“预约”键,数码管显示“0.5”,每按一下“预约”键,数码管显示数值增加0.5,一直到显示“10.”切换为数值每次增加1,一直到显示“24.”,再按一下“预约”键就显示“0.0”,无其他操作5秒后,数码管显示“预约值”(不闪烁),“慢炖”LED间隔1秒闪烁,蜂鸣器响一声。

粥/汤

(一)、数码管显示“10”(注意不显示点)并间隔1秒闪烁,“粥/汤”LED点亮;

(二)、无其他操作5秒后,数码管显示“- -”并往下一直跳动,蜂鸣器响一声;

(三)、无其他操作5秒后只能按下“保温取消”键进行取消,取消后LED全灭,数码管显示“- -”;

(四)、按“定时”键,在数码管显示“10”到“50”范围每次数值增加10,按至显示“50”后再按变为显示“1.0”,在显示“1.0”到“4.0”范围每次增加0.5,按至显示“4.0”后再按变为显示“10”。

(五)、5秒内按“预约”键,数码管显示“0.5”,每按一下“预约”键,数码管显示数值增加0.5,一直到显示“10.”切换为数值每次增加1,一直到显示“24.”,再按一下“预约”键就显示“0.0”,无其他操作5秒后,数码管显示“预约值”(不闪烁),“粥/汤”LED间隔1秒闪烁,蜂鸣器响一声。

保温

(一)、数码管显示“bb” 并间隔1秒闪烁,“保温”LED点亮;

(二)、无其他操作5秒后,数码管“bb”不闪烁,蜂鸣器响三声;

(三)、无其他操作5秒后只能按下“保温取消”键进行取消,取消后LED全灭,数码管显示“- -”。

3.2.4 电饭煲加热功能

煮饭

煮饭功能煮饭测试:

(一)、进入工作后开始加热,持续加热到130℃后停止,温度降至105℃继续加热50秒,加热停止后温度降至100℃进入7分钟倒计时;

(二)、在七分钟倒计时期间,停止加热2分钟,加热30秒,停止加热2分30秒,加热30秒,之后等待时间结束进入保温。

慢炖

定时“1.0”功能加水测试:

(一)、实际工作1小时,显示部分以倒计时形式显示,从“1.0”开始->“59”-> … -> “01”;

(二)、进入工作后开始加热,15分钟后关闭加热(温度92℃)、17分40秒开启加热(温度95℃)、18分55秒关闭加热(温度96℃)、19分40秒开启加热(温度97℃)、10秒后关闭加热、30秒后开启加热、如此反复间断加热10秒、不加热30秒,直到到达时间,到达时间后蜂鸣器鸣叫三声进入保温模式。

粥/汤

定时“10”功能测试:

(一)、实际工作时长57分15秒,显示部分以“- -”往下刷新,在最后十分钟显示“10”开始每分钟倒计时;

(二)、进入工作后开始加热,14分钟后关闭加热(温度95℃)、16分15秒开启加热(温度96℃)、然后进入间断加热,加热8秒、不加热32秒,直到到达时间,到达时间后蜂鸣器鸣叫三声进入保温模式。

定时“1.0”功能测试:

(一)、大约加热1个小时后,显示“59”倒计时;

(二)、间断加热同上。

保温

保温功能加水测试:

(一)、72℃开启加热、80℃关闭加热。

3.2.5 其他说明
  1. 煮饭工作时间约40分钟;
  2. 慢炖工作时间约60分钟;
  3. 粥/汤工作时间约75分钟;
  4. 保温功能可用于加热饭菜工作时间约20分钟
  5. 每次按按键响一声
  6. 预约时间到,长鸣一声

3.3 主流程图

在这里插入图片描述

3.4 主函数程序

#include <cms.h>
#include "typedef.h"
#include "main.h"
#include "buzzer.h"
#include "task.h"
#include "display.h"
#include "key.h"
#include "working.h"static volatile bool Flag_Main;/*** @brief  毫秒延时函数* @param  x:毫秒数* @retval 无*/ 
void DelayXms(unsigned char x)
{unsigned char i = 0;;while(x--){asm("clrwdt");while(--i){asm("nop");asm("nop");asm("nop");asm("nop");}}
}/*** @brief  系统寄存器初始化* @param  无* @retval 无*/ 
void SysInit(void)
{asm("nop");asm("clrwdt");//预分频给TMR0  OPTION_REG =0;//内部振荡器8M					OSCCON = 0X71;					//允许所有未被屏蔽的中断、外设中断INTCON = 0xC0;			//配置上拉情况WPUA = 0B00000010;WPUB = 0B01100000;WPUC = 0B00000001;//配置IO状态TRISA = 0B00000010;TRISB = 0B11100000;TRISC = 0B00000001;
}/*** @brief  定时器初始化* @param  无* @retval 无*/ 
void TimerInit(void)
{
//---------------------------------------
//125us中断初始化PR2 = 249;				//赋初值	TMR2IF = 0;				//清中断标志位TMR2IE = 1;				//允许Timer2中断T2CON = 0x04;			//开启Timer2,预分频值为1,后分频比为1:1
//---------------------------------------
}/*** @brief  主函数* @param  无* @retval 无*/ 
void main(void)
{task_data Task_Data;// 系统初始化SysInit();// 定时器中断初始化TimerInit();// 待机模式初始化StandbyMode(&Task_Data);// 打开显示Dis_ON();// 延时200ms等待系统稳定DelayXms(400);// 关闭显示Dis_OFF();//RELAY = 0;	// 伪造GND来调试蜂鸣器MakeBeep(BEEP_ONCE, BEEP_LONG);while(1){if(Flag_Main){Flag_Main = 0;asm("clrwdt");KeyScan();AdcGet(&Task_Data.adc_val);TaskProcess(&Task_Data);WorkingMode(&Task_Data);BuzzerCheck();}}
}/*** @brief  定时器2中断函数* @param  无* @retval 无*/ 
void interrupt Isr_Timer(void)
{
// 125us*8=1ms
#define TIME_1MS 	8
// 主循环执行一次时间,1ms*4=4ms
#define	TIME_MAIN	4static uchar time_main;static uchar time_cnt;asm("clrwdt");if(Flag_IsrTimer){// 清定时器中断Flag_IsrTimer = 0;// 125us*8=1msif(++time_cnt >= TIME_1MS){time_cnt = 0;// 主循环执行一次时间,1ms*4=4msif(++time_main >= TIME_MAIN){time_main = 0;Flag_Main = 1;}}// 蜂鸣器if(Flag_Buzzer)Pin_Buzzer = ~Pin_Buzzer;// 动态扫描DisScan();}elseFlag_Isr = 0;
}

四、开发问题

测试仪器使用电参数测试仪器,可以实时查看电饭煲运行的电流与功率:

在这里插入图片描述

还有就是万用表使用测温功能来查看电饭煲温度的变化:

在这里插入图片描述

问题一些总结处理:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/309696.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL server Profiler的使用

在SQL server management studio 中 的工具下 选择SQL server Profiler 对sql进行过滤

{MySQL}索引事务和JDBC

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、索引1.1索引是什么1.2作用1.3代码 二、事务2.1什么是事务2.2使用 三.JDBC总结 前言 接着上次&#xff0c;继续讲下MySQL 提示&#xff1a;以下是本篇文章正…

往期精彩推荐

所有的内容都在这个博客中&#xff0c;此博客为推广导航博客&#xff0c;过后会删掉https://blog.csdn.net/weixin_41620184/article/details/135042416 往期精彩&#xff1a;快来学习吧~~~ 机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归PySpark大数据…

销售转行上位机编程:我的学习与职业经历分享

同学们好&#xff0c;我是杨工&#xff0c;原先是一名销售。 通过在华山编程培训中心学习&#xff0c;成功转行上位机编程&#xff0c;对此我想分享学习和职业经历。 在职业生涯的早期&#xff0c;我并没有考虑将技术融入到我的工作中。然而&#xff0c;在几次创业的失败后&a…

二分查找(非朴素)--在排序数组中查找元素的第一个和最后一个位置

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 本题链接 输入描述 输出描述 算法分析 1.算法一&#xff1a;暴力求解 2.算法二&#xff1a;朴素二分算法 3.算法三&#xff1a;二分查找左右端点 3.1查找左端点 3.1.1细节一&#xff1a;循环条件 3.1.2细节二…

亚信安慧AntDB数据库引领数字时代通信创新

在数字经济与实体经济深度融合的时代&#xff0c;通信行业正迎来前所未有的新机遇。特别是在中国信通院的预测中&#xff0c;2027年5G专网市场规模预计将达到802亿元&#xff0c;呈现出显著的增长态势&#xff0c;年复合增长率高达42%。 亚信安慧AntDB数据库一直致力于紧跟科技…

K8s部署Minio使用NFS持久化存储

一、介绍 Minio是一款高性能的对象存储服务器&#xff0c;它兼容Amazon S3 API。它的设计目的是为了提供云存储服务的性能和可扩展性&#xff0c;同时还保持着本地存储的简单性和易用性。Minio可以在Linux、MacOS和Windows等操作系统上运行&#xff0c;它可以通过命令行界面或R…

车牌识别技术,如何用python识别车牌号

目录 一.前言 二.运行环境 三.代码 四.识别效果 五.参考 一.前言 车牌识别技术&#xff08;License Plate Recognition, LPR&#xff09;在交通计算机视觉&#xff08;Computer Vision, CV&#xff09;领域具有非常重要的研究意义。以下是该技术的一些扩展说明&#xff1…

FL Studio 21.2.2官方中文版重磅发布

纯正简体中文支持&#xff0c;更快捷的音频剪辑及素材管理器&#xff0c;多样主题随心换&#xff01; Mac版新增对苹果M2/1家族芯片原生支持。 丰富的主题换肤 现在大家可以通过控制色调、饱和度、亮度、文本、仪表和步进序列器的颜色来改变你的DAW外观&#xff0c; DAW“情绪…

Vue中的默认插槽详解

Vue中的默认插槽详解 在 Vue 中&#xff0c;插槽&#xff08;Slot&#xff09;是一种非常强大且灵活的机制&#xff0c;用于在组件中插入内容。Vue 提供了两种类型的插槽&#xff1a;默认插槽&#xff08;Default Slot&#xff09;和具名插槽&#xff08;Named Slot&#xff09…

页面布局--Flexbox的自动边距

标题页面布局–Flexbox的自动边距 通过简单的margin:auto&#xff0c;我们就能实现元素的多种对齐方式。 假设我们在盒子模型里有四个元素&#xff1a; 先给容器使用flex布局&#xff1a; .container {display: flex;justify-content: flex-start;align-items: center;gap: 6…

论文阅读<Contrastive Learning-based Robust Object Detection under Smoky Conditions>

论文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2022W/UG2/papers/Wu_Contrastive_Learning-Based_Robust_Object_Detection_Under_Smoky_Conditions_CVPRW_2022_paper.pdf Abstract 目标检测是指有效地找出图像中感兴趣的目标&#xff0c;然后准确地确定它们…