CN103082898A - 一种智能调料盒 - Google Patents

一种智能调料盒 Download PDF

Info

Publication number
CN103082898A
CN103082898A CN2009100937390A CN200910093739A CN103082898A CN 103082898 A CN103082898 A CN 103082898A CN 2009100937390 A CN2009100937390 A CN 2009100937390A CN 200910093739 A CN200910093739 A CN 200910093739A CN 103082898 A CN103082898 A CN 103082898A
Authority
CN
China
Prior art keywords
valve
solid
idc
liquid
chip microcomputer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN2009100937390A
Other languages
English (en)
Inventor
张治国
王诗涛
胡冬晶
郭瑾
廖思静
高文鹏
金博思
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing University of Posts and Telecommunications
Original Assignee
Beijing University of Posts and Telecommunications
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing University of Posts and Telecommunications filed Critical Beijing University of Posts and Telecommunications
Priority to CN2009100937390A priority Critical patent/CN103082898A/zh
Publication of CN103082898A publication Critical patent/CN103082898A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Cookers (AREA)

Abstract

一种家用炒菜智能调料盒,包括智能控制装置、至少一个固体调料箱和至少一个液体调料箱,其特征在于:所述智能控制装置包括单片机(4)和多个由电磁阀门构成的固体阀门(9)和液体阀门(10),固体调料箱和液体调料箱设有出料口,固体调料箱通过出料口和与之对应的一个固体阀门(9)相连接,液体调料箱通过出料口和与之对应的一个液体阀门(10)相连接;所述液体阀门(10)和固体阀门(9)分别与单片机(4)相连接,并由单片机(4)控制固体阀门(9)和液体阀门(10)的开启与闭合,从而控制液体调料的流出和固体调料的输出;所述单片机(4)使用民用220V交流电转9V交流电。

Description

一种智能调料盒
所属技术领域
本发明设计一种烹饪设备,其是一种能按一定程序辅助炒菜的智能调料盒。 
背景技术
炒菜做饭是一项再平常不过的日常家务劳动,但如今城市里的独生子女,从小到大都在家长的庇护中长大,普遍缺乏烧菜这项技能,随着这群80后的独生子女开始拥有自己家庭,烧菜做饭成了他们不得不面对的问题,如果能有一种产品既能辅助初学者完成炒菜做饭这项工作,又能让他们亲自体会到烹饪的乐趣和家庭的温暖,就能极大地解决以上的问题,使得人们的生活能够更加和谐美好。 
现有技术中的智能调料盒均直接采用220v民用电,并未将220v民用电转换为安全电压使用,这给使用智能调料盒带来一定的安全隐患。另外,现有技术采用机械的方式来控制调料的阀门,而采用机械方式由于机械磨损的方式,其故障率较高,并且在定量加料时,由于容器体积因素影响,其加料的控制精度不高,例如采用预定单位容积为V的容器来实现定量加料,此时受于容器固有容积的影响,每次只能增加单位体积的调料,即实现的定量加料的数值是不连续的,智能为N*V(其中N为自然数)。 
本发明采用220V转9V交流连接的单片机来控制电磁阀门,有效避免了现有技术中存在的上述缺陷,使得用电更安全,阀门故障概率大大下降,控制更灵活。另外,本发明由于采用单片机,可以有效地对智能调料盒的软件版本升级,使得本发明的智能调料盒可扩展性更强,也可采用自主编程的方式对智能 调料盒的功能实现扩展,以在原有智能调料盒的基础上实现新功能,做出新菜肴;由于使用程序智能控制电磁阀门的开启与闭合,可实现数值连续的定量加料,这大大增大了智能调料盒做菜调料的适用范围,使得做出新菜肴更加方便、简单,同时,由于无需机械智能调料盒的诸多部件,本发明智能调料盒的维护也简单了很多。 
本发明智能调料盒依托预先编辑的程序和菜谱数据,不但能够在播报菜谱文件的同时,配合地放下液体和固体调料,辅助教学整个烹饪过程,更由于采用的菜谱文件都是出自美食书籍,使得炒出的菜更加美味,膳食搭配更加科学合理。相比与先前市场上的有些自动炒菜机,它的设计不仅仅更加经济和实用,更便于维护。其设计出发点也不仅仅是完成炒菜这项工作,还兼顾让人能够体验烹饪的乐趣。 
发明内容
本发明所要解决的技术问题是:提供一种用电安全、可扩展性强、调料控制精度和范围灵活的智能调料盒。 
一种智能调料盒,包括智能控制装置、至少一个固体调料箱和至少一个液体调料箱,其特征在于:所述智能控制装置包括单片机和多个由电磁阀门构成的固体阀门和液体阀门,固体调料箱和液体调料箱设有出料口,固体调料箱通过出料口和与之对应的一个固体阀门相连接,液体调料箱通过出料口和与之对应的一个液体阀门相连接;所述液体阀门和固体阀门分别与单片机相连接,并由单片机控制固体阀门和液体阀门的开启与闭合。从而控制液体调料的流出和固体调料的输出;所述单片机使用民用220V交流电转9V交流电; 
进一步的,所述智能调料盒中的单片机与外部电脑以串口或者无线的方式 连接,所述外部电脑通过菜谱软件实现与所述单片机联合对固体阀门和液体阀门的开启或闭合的控制,所述菜谱软件基于微软Visual C++软件编写的MFC程序制作; 
进一步的,用户通过所述外部电脑设定调料量的具体值,然后通过控制阀门口打开的时间来精确控制调料量的值,具体值的大小通过阀门口打开时间乘以阀门口的横截面积再乘以固体或液体的流出速度得出。 
进一步的,所述调料盒还包括一支架板,所述单片机、固体调料箱、液体调料箱、固体阀门和液体阀门直接或者间接固定在所述支架板上;固体调料箱、液体调料箱位于固体阀门和液体阀门上方,并且分别通过软管进行相应的连接; 
进一步的,所述固体阀门和所述液体阀门分别固定在对应的活动杆上,所述活动杆分为两段,两段连接部上设有固定旋钮,用于固定活动杆的形状,所述活动杆的另一端通过固定支架固定在支架板上,所述活动杆具备调整所述固体阀门和所述液体阀门出料口位置的功能; 
进一步的,所述支架板还包括一底座,所述底座上设置煤气炉灶或电磁炉; 
进一步的,所述支架板还包括一支架挡板,用于当电脑放于智能调料盒旁边时,避免油迸溅到电脑上; 
进一步的,所述单片机使用民用220V交流电转9V交流电对应于一电转设备,所述电转设备将220V交流电转换为9V交流电;所述电转设备外壳为防水外壳; 
进一步的,所述单片机的型号为JMDM28DIOMT单片机。 
本发明的有益效果是:既能用于辅助初级烹饪者学习烹饪,也能用于日常的生活中,所烹饪出的菜品营养科学、美味,操作简便,只要懂得一点电脑知识和基础炒菜流程,并由烧菜所需的材料,就能用它做出任何一种菜肴,其设 计经济、实用,也便于维护,调整方便,能与现有的各种灶具匹配做菜。
附图说明
图1是智能调料盒立体图 
图2是智能调料盒侧视图 
图3是智能调料盒液体做菜程序界面 
具体实施方式
图1、2为本发明的智能调料盒的立体图和侧视图,该调料盒主要包括:智能控制装置、固体调料箱和液体调料箱。其中,固体调料箱和液体调料箱由调料箱2实现,智能控制装置包括单片机4和多个电磁阀门。图1中的固体阀门9、液体阀门10均为电磁阀门,调料箱2分为圆形或方形设有出料口的固体调料箱和液体调料箱,分别与固体阀门9和液体阀门10相连接,图1示出的例子中采用软管的方式连接,当然也可采用金属制成的管子连接,或其他本领域熟知的方式予以连接,液体阀门10和固体阀门9分别与单片机4相连接,可用电线连接,也可用其他本领域所熟知的其他可传输控制信号的缆线,或者采用无线方式连接,此时单片机4和液体阀门10、固体阀门9上分别设有无线发射和接收装置(图1仅给出了电线的连接方式,并未给出无线和其他的连接方式),单片机4控制固体阀门9和液体阀门10的开启与闭合,从而控制液体的流出和固体调料的输出。固体、液体阀门的出口正对锅11,以实现阀门流出的液体或固体调料进入锅中。锅放在电磁炉或者炉灶12上。该单片机4还设有串口线或无线收发模块(图1仅示出了串口连接的方式),可以与外部的电脑(计算机)16连接,外部电脑16可与单片机4进行通信,可读出单片机4的数据,或者将外部数据写入该单片机,也可通过软件实现对该智能调料盒的控制,此时实际上是外部电脑和该单片机联合实现对固体阀门和液体阀门的开启或闭合的控制,上述控制的具体实现为,外部电脑16通过菜谱软件与单片机4通信,通过将相应操作与控制指令发送给单片机4,由单片机4控制固体阀门9和液体阀门10的开启与闭合,从而实现外部电脑16和单片机4联合对固体阀门9和体液阀门10 的控制,所述菜谱软件基于微软Visual C++软件编写的MFC程序制作。 
图1所示的例子中,单片机为JMDM28-DIOMT单片机,当然也可采用其它型号的单片机。 
为方便该智能调料盒的使用与固定,调料箱2、单片机4、固体阀门9和液体阀门10可以固定在支架板1上,调料箱2位于固体阀门9和液体阀门10的上方,以实现依靠调料重力影响自动落入到锅中,调料箱2可以有多个,可根据所需调料种类数量制作相应个数的调料箱,图1中示出的调料箱中三个为液体调料箱,一个为固体调料箱,分别盛放油酱醋和盐。该支架板还可包括一底座13,并在底座上放置炉灶,例如电磁炉或煤气炉灶。 
如图2所示,为方便调节固体阀门9和液体阀门10的下落方位,使调料正好下落到锅11中,可将固体阀门9和液体阀门10分别固定在一活动杆上,该活动杆分为两段,两段连接部上设有固定旋钮15,用于固定活动杆的形状,从而固定固体阀门9和液体阀门10的位置,该活动杆的另一端通过固定支架14固定在支架板1上,这样,就可通过调整该活动杆来微调整阀门出料出口与锅之间的距离,也可调整阀门出料出口与锅11对准,这样即使大小不同的锅,均可通过调整该活动杆来使阀门口对准锅11所需要的位置。为了能够实现对固体阀门和液体阀门的位置调整,此时连接调料箱和阀门的管子应为软管或者其他可方便调节形状的管子。因此,能与现有的各种灶具匹配做菜。 
当电脑与单片机采用串口连接时,为避免油迸溅到电脑上,可在放置电脑与智能调料盒之间设置一支架挡板3。 
单片机电源使用的是民用220V交流电转9V交流电,电转换设备可以放在干燥不易沾水的地方,由密封好不漏水的防水外壳保护该电转换设备。在厨房使用时,由于直接使用9V交流电,即使有液体流到供电装置也不会产生危险, 因此,更加安全。 
优选地,该智能调料盒还可设置一音频输出单元(图1-3中未示出),该声音输出单元与该单片机相连接,或与电脑16相连接,或使用电脑16本身的音频输出单元,用于输出提示语音或信息。 
在控制调料具体量的大小方面,可通过控制阀门口打开的时间来精确控制调料量的大小,具体量的大小可通过阀门口打开时间乘以阀门口的横截面积再乘以固体或液体的流出速度得出,该过程一般为通过外部电脑设定好调料量的具体值,后将该值传送给单片机,由单片机具体实施控制(参见图3)。 
该智能调料盒的控制调料输出的过程为,JMDM28DIOMT单片机4和电脑16联合控制,烹饪者选择菜谱名和菜料质量,所述电脑生成菜谱数据,这些数据通过串口线5传达所述JMDM28DIOMT单片机4,再由所述JMDM28DIOMT单片机4自动控制所述固体阀门9、所述液体阀门10和语音菜谱辅助协同运作。固体调料装置由所述固体阀门9控制固体调料,加料信号通过串口线5给所述JMDM28DIOMT单片机4信号,以控制所述固体阀门的开启和闭合,从而通过所述固体阀门的开启和闭合控制调料的流出和停止。就具体的软件实现而言,本发明软件是用基于微软Visual C++软件编写的MFC程序制作的菜谱软件,图3为该菜谱软件的操作界面。该菜谱软件代码以及具体控制流程参见附录I,该软件可实现对调料量的多少的控制,其功能除了根据用户所选择的调料的量来控制由电磁阀门构成的固体阀门9和液体阀门10的开启和闭合外,可实现菜的主料由烹饪者根据菜谱的语音提示在规定时间手动放入锅中,或者给出该菜的语音提示信息。该软件还可包括一美食数据库,该数据库预先保存各类美食制作过程数据,该数据库可通过录入美食书籍来建立,通过该数据库,可以在用户制做菜肴的过程中实时为用户提供语音提示,以简化菜肴的制作过程。 
当然,对本领域技术人员而言,就具体的软件实现而言,并不具体局限于说明书所附的附录I所描述的具体程序,本发明附录I所描述的程序仅为本发明的一优选实施例,本领域技术人员完全可以在附录I所描述的程序代码上做出等同替换或者适当删除或者增加本领域技术人员熟知的一些功能或者流程,以实现对附录I所描述程序的优化。 
该智能调料盒的工作方法步骤如下: 
1、将智能调料盒所在板放在灶台前方,调节板上阀门的高度和角度,使得阀门的出口可以在较低的位置对准锅,用串口线连接单片机和电脑,接上电源,并打开电脑。 
2、检查硬件间连接和单片机显示灯,以确保整套装置可以正常运行。 
3、点击桌面上的菜谱程序cooking.exe,在用户定义区内第一步先选择需要烹饪的菜的菜名。 
4、第二步中程序根据第一步中用户已输入的菜名自动生成在烹饪该菜会用到的主料和辅料,此时用户输入已准备的主料质量,并选择口味的清淡程度(有偏淡、适中、偏重三项可以选择),然后按下“确定”进入下一步。 
5、第三步中程序会根据用户在第二步中已经输入的主料和口味,科学地生成菜谱数据,其中包括将会用到的调料量和投放的时间点,用户可以选择默认的数据,也可以对该数据做稍许修改,最后按下“确定”结束用户定义区。 
6、在做菜提示区中,此时会显示炒菜的步骤介绍,通过它,用户可以了解到该菜的更详细信息,在烧干锅中剩余水分后,按下“开始”,程序开始做菜。 
7、在做菜过程中,程序中有操作步骤的语音提示、进度条提示和关于该菜的更详细介绍,用户只需根据语音提示,放入菜的主料和翻炒即可,而程序会在规定的时间点放入菜的辅料,待整个过程完成后,会有提示“菜已经完成了”, 此时装盘即可。 
8、用户可以按下“重置”进行下一道菜的烹饪,也可以按下“退出”,退出程序。 
本领域技术人员根据本发明公开内容可知,具体的菜谱软件实现方式多样,并不局限于本申请后附的具体代码,还可以为本领域技术人员数值的其他方式,本发明的发明点和有益效果是采用电磁阀门、单片机控制,并可安全用电、用户操作方便。 
应当理解的是,本发明上述针对具体实施例的描述较为具体,不能因此而理解为对本发明专利保护范围的限制,本领域技术人员根据本发明公开内容对本发明具体实施例做出的等同技术手段的替换,均应属于本发明专利保护的范围。 
附录I: 
头文件 
1、Cooking.h 
//Cooking.h:main header file for the COOKING application 
// 
#if!defined(AFX_COOKING_H__C0463E0F_5F44_405B_87E8_555424CF5A4A__INCLUDED_) 
#define AFX_COOKING_H__C0463E0F_5F44_405B_87E8_555424CF5A4A__INCLUDED_ 
#if_MSC_VER>1000 
#pragma once 
#endif//_MSC_VER>1000 
#ifndef__AFXWIN_H__ 
    #error include’stdafx.h’before including this file for PCH 
#endif 
#include″resource.h″    //main symbols 
///////////////////////////////////////////////////////////////////////////// 
// CCookingApp: 
// See Cooking.cpp for the implementation of this class 
// 
class CCookingApp:public CWinApp 
public: 
     CCookingApp(); 
// Overrides 
     // ClassWizard generated virtual function overrides 
     //{{AFX_VIRTUAL(CCookingApp) 
     public: 
     virtual BOOL InitInstance(); 
     //}}AFX_VIRTUAL 
// Implementation 
     //{{AFX_MSG(CCookingApp) 
     afx_msg void OnButton1(); 
     //}}AFX_MSG 
     DECLARE_MESSAGE_MAP() 
}; 
///////////////////////////////////////////////////////////////////////////// 
//{{AFX_INSERT_LOCATION}} 
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. 
#endif//!defined(AFX_COOKING_H__C0463E0F_5F44_405B_87E8_555424CF5A4A__INCLUDED_) 
2、CookingDlg.h 
//CookingDlg.h:header file 
// 
//{{AFX_INCLUDES() 
#include″mscomm.h″ 
 //}}AFX_INCLUDES 
#if!defined(AFX_COOKINGDLG_H__F12A8AB8_0235_4767_9469_942F52401C5E__INCLUDED_) 
#define AFX_COOKINGDLG_H__F12A8AB8_0235_4767_9469_942F52401C5E__INCLUDED_ 
#if_MSC_VER>1000 
#pragma once 
#endif //_MSC_VER>1000 
//extern int index; 
extern int m1,m2; 
///////////////////////////////////////////////////////////////////////////// 
// CCookingDlg dialog 
class CCookingDlg:public CDialog 
// Construction 
public: 
     CCookingDlg(CWnd*pParent=NULL);  //standard constructor 
// Dialog Data 
    //{{AFX_DATA(CCookingDlg) 
    enum{IDD=IDD_COOKING_DIALOG}; 
    CProgressCtrl m_jindu2; 
    CProgressCtrl m_jindu1; 
    CProgressCtrl m_jindu0; 
    int    m_rad1; 
    CMSComm  m_ctrlComm; 
    //}}AFX_DATA 
    // ClassWizard generated virtual function overrides 
    //{{AFX_VIRTUAL(CCookingDlg) 
    protected: 
    virtual void DoDataExchange(CDataExchange*pDX);  //DDX/DDV support 
    //}}AFX_VIRTUAL 
// Implementation 
protected: 
     HICON m_hIcon; 
     // Generated message map functions 
     //{{AFX_MSG(CCookingDlg) 
     virtual BOOL OnInitDialog(); 
     afx_msg void OnSysCommand(UINT nID,LPARAM lParam); 
     afx_msg void OnPaint(); 
     afx_msg HCURSOR OnQueryDragIcon(); 
     afx_msg void OnButton2(); 
     afx_msg void OnButton3(); 
     afx_msg void OnButton4(); 
     afx_msg void OnTimer(UINT nIDEvent); 
     afx_msg HBRUSH OnCtlColor(CDC*pDC,CWnd* pWnd,UINT nCtlColor); 
     afx_msg void OnButton5(); 
     //}}AFX_MSG 
     DECLARE_MESSAGE_MAP() 
     private: 
          CBrush m_brush; 
}; 
//{{AFX_INSERT_LOCATION}} 
//Microsoft Visual C++ will insert additional declarations immediately before the previous line. 
#endif//!defined(AFX_COOKINGDLG_H_F12A8AB8_0235_4767_9469_942F52401C5E__INCLUDED_) 
3、dlg1.h 
#if!defined(AFX_DLG1_H__7F9846FA_7599_4717_B4DB_B9A36935E7DE__INCLUDED_) 
#define AFX_DLG1_H__7F9846FA_7599_4717_B4DB_B9A36935E7DE__INCLUDED_ 
#if_MSC_VER>1000 
#pragma once 
#endif//_MSC_VER>1000 
//dlg1.h:header file 
// 
///////////////////////////////////////////////////////////////////////////// 
// dlg1 dialog 
class dlg1:public CDialog 
// Construction 
public: 
     dlg1(CWnd*pParent=NULL);  //standard constructor 
// Dialog Data 
     //{{AFX_DATA(dlg1) 
     enum{IDD=IDD_DIALOG1}; 
         // NOTE:the ClassWizard will add data members here 
     //}}AFX_DATA 
// Overrides 
     // ClassWizard generated virtual function overrides 
     //{{AFX_VIRTUAL(dlg1) 
     protected: 
     virtual void DoDataExchange(CDataExchange*pDX);//DDX/DDV support 
     //}}AFX_VIRTUAL 
// Implementation 
protected: 
    //Generated message map functions 
    //{{AFX_MSG(dlg1) 
    virtual BOOL OnInitDialog(); 
    //}}AFX_MSG 
    DECLARE_MESSAGE_MAP() 
}; 
//{{AFX_INSERT_LOCATION}} 
//Microsoft Visual C++ will insert additional declarations immediately before the previous line. 
#endif//!defined(AFX_DLG1_H__7F9846FA_7599_4717_B4DB_B9A36935E7DE__INCLUDED_) 
4、mscomm.h 
#if!defined(AFX_MSCOMM_H__54CC5195_86C5_4ED5_9A65_926E202F6165__INCLUDED_) 
#define AFX_MSCOMM_H__54CC5195_86C5_4ED5_9A65_926E202F6165__INCLUDED_ 
#if_MSC_VER>1000 
#pragma once 
#endif //_MSC_VER>1000 
//Machine generated IDispatch wrapper class(es)created by Microsoft Visual C++ 
//NOTE:Do not modify the contents of this file.If this class is regenerated by 
//Microsoft Visual C++,your modifications will be overwritten. 
///////////////////////////////////////////////////////////////////////////// 
//CMSComm wrapper class 
class CMSComm:public CWnd 
protected: 
    DECLARE_DYNCREATE(CMSComm) 
public: 
    CLSID const& GetClsid() 
    { 
        static CLSID const clsid 
            ={0x648a5600,0x2c6e,0x101b,{0x82,0xb6,0x0,0x0,0x0,0x0,0x0,0x14}}; 
        return clsid; 
    } 
    virtual BOOL Create(LPCTSTR lpszClassName, 
         LPCTSTR lpszWindowName,DWORD dwStyle, 
         const RECT& rect, 
         CWnd*pParentWnd,UINT nID, 
         CCreateContext*pContext=NULL) 
    {return CreateControl(GetClsid(),lpszWindowName,dwStyle,rect,pParentWnd,nID);} 
    BOOL Create(LPCTSTR lpszWindowName,DWORD dwStyle, 
         const RECT& rect,CWnd* pParentWnd,UINT nID, 
         CFile*pPersist=NULL,BOOL bStorage=FALSE, 
         BSTR bstrLicKey=NULL) 
    {return CreateControl(GetClsid(),lpszWindowName,dwStyle,rect,pParentWnd,nID, 
        pPersist,bStorage,bstrLicKey);} 
// Attributes 
public: 
// Operations 
public: 
    void SetCDHolding(BOOL bNewValue); 
    BOOL GetCDHolding(); 
    void SetCommID(long nNewValue); 
    long GetCommID(); 
    void SetCommPort(short nNewValue); 
    short GetCommPort(); 
    void SetCTSHolding(BOOL bNewValue); 
    BOOL GetCTSHolding(); 
    void SetDSRHolding(BOOL bNewValue); 
    BOOL GetDSRHolding(); 
    void SetDTREnable(BOOL bNewValue); 
    BOOL GetDTREnable(); 
    void SetHandshaking(long nNewValue); 
    long GetHandshaking(); 
    void SetInBufferSize(short nNewValue); 
    short GetInBufferSize(); 
    void SetInBufferCount(short nNewValue); 
    short GetInBufferCount(); 
    void SetBreak(BOOL bNewValue); 
    BOOL GetBreak(); 
    void Set InputLen(short nNewValue); 
    short Get InputLen(); 
    void SetNullDiscard(BOOL bNewValue); 
    BOOL GetNullDiscard(); 
    void SetOutBufferSize(short nNewValue); 
    short GetOutBufferSize(); 
    void SetOutBufferCount(short nNewValue); 
    short GetOutBufferCount(); 
    void SetParityReplace(LPCTSTR lpszNewValue); 
    CString GetParityReplace(); 
    void SetPortOpen(BOOL bNewValue); 
    BOOL GetPortOpen(); 
    void SetRThreshold(short nNewValue); 
    short GetRThreshold(); 
    void SetRTSEnable(BOOL bNewValue); 
    BOOL GetRTSEnable(); 
    void SetSettings(LPCTSTR lpszNewValue); 
    CString GetSettings(); 
    void SetSThreshold(short nNewValue); 
    short GetSThreshold(); 
    void SetOutput(const VARIANT& newValue); 
    VARIANT GetOutput(); 
    void Set Input(const VARIANT& newValue); 
    VARIANT GetInput(); 
    void SetCommEvent(short nNewValue); 
    short GetCommEvent(); 
    void SetEOFEnable(BOOL bNewValue); 
    BOOL GetEOFEnable(); 
    void SetInputMode(long nNewValue); 
    long Get InputMode(); 
}; 
//{{AFX_INSERT_LOCATION}} 
//Microsoft Visual C++ will insert additional declarations immediately before the previous line. 
#endif//!defined(AFX_MSCOMM_H__54CC5195_86C5_4ED5_9A65_926E202F6165__INCLUDED_) 
源文件 
1、Cooking.cpp 
//Cooking.cpp:Defines the class behaviors for the application. 
// 
#include″stdafx.h″ 
#include″Cooking.h″ 
#include″CookingDlg.h″ 
#ifdef_DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#endif 
///////////////////////////////////////////////////////////////////////////// 
// CCookingApp 
BEGIN_MESSAGE_MAP(CCookingApp,CWinApp) 
     //{{AFX_MSG_MAP(CCookingApp) 
     //}}AFX_MSG_MAP 
     ON_COMMAND(ID_HELP,CWinApp::OnHelp) 
END_MESSAGE_MAP() 
///////////////////////////////////////////////////////////////////////////// 
// CCookingApp construction 
CCookingApp::CCookingApp() 
     // TODO:add construction code here, 
     // Place all significant initialization in InitInstance 
///////////////////////////////////////////////////////////////////////////// 
// The one and only CCookingApp object 
CCookingApp theApp; 
///////////////////////////////////////////////////////////////////////////// 
// CCookingApp initialization 
BOOL CCookingApp::InitInstance() 
     AfxEnableControlContainer(); 
     // Standard initialization 
     //If you are not using these features and wish to reduce the size 
     // of your final executable,you should remove from the fol lowing 
     // the specific initialization routines you do not need. 
#ifdef_AFXDLL 
    Enable3dControls();    // Call this when using MFC in a shared DLL 
#else 
    Enable3dControlsStatic();  //Call this when linking to MFC statically 
#endif 
    CCookingDlg dlg; 
    m_pMainWnd=&dlg; 
    int nResponse=dlg.DoModal(); 
    if(nResponse==IDOK) 
    { 
       // TODO:Place code here to handle when the dialog is 
       // dismissed with OK 
     } 
     else if(nResponse==IDCANCEL) 
     { 
       //TODO:Place code here to handle when the dialog is 
       // dismissed with Cancel 
      } 
      // Since the dialog has been closed,return FALSE so that we exit the 
      // application,rather than start the application’s message pump. 
      return FALSE; 
2、CookingDlg.cpp 
// CookingDlg.cpp:implementation file 
// 
#include″stdafx.h″ 
#include″Cooking.h″ 
#include″CookingDlg.h″ 
#include″math.h″ 
#include″mmsystem.h″ 
#include″dlg1.h″ 
#ifdef_DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#endif 
//int index(0); 
int m1,m2; 
int tim; 
CString str1,str2;//主料 
CString s1,s2,s3,s4,s5;//其余材料 
int x1(0),x2(0),x3(0),x4(0),x5(0); 
int tt,t1,t2; 
///////////////////////////////////////////////////////////////////////////// 
// CAboutDlg dialog used for App About 
class CAboutDlg:public CDialog 
public: 
     CAboutDlg(); 
// Dialog Data 
     //{{AFX_DATA(CAboutDlg) 
     enum{IDD=IDD_ABOUTBOX}; 
     //}}AFX_DATA 
     // ClassWizard generated virtual function overrides 
     //{{AFX_VIRTUAL(CAboutDlg) 
     protected: 
     virtual void DoDataExchange(CDataExchange* pDX);  // DDX/DDV support 
     //}}AFX_VIRTUAL 
// Implementation 
protected: 
     //{{AFX_MSG(CAboutDlg) 
     //}}AFX_MSG 
      DECLARE_MESSAGE_MAP() 
}; 
CAboutDlg::CAboutDlg():CDialog(CAboutDlg::IDD) 
      //{{AFX_DATA_INIT(CAboutDlg) 
      //}}AFX_DATA_INIT 
void CAboutDlg::DoDataExchange(CDataExchange*pDX) 
      CDialog::DoDataExchange(pDX); 
      //{{AFX_DATA_MAP(CAboutDlg) 
      //}}AFX_DATA_MAP 
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog) 
     //{{AFX_MSG_MAP(CAboutDlg) 
         // No message handlers 
     //}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
///////////////////////////////////////////////////////////////////////////// 
// CCookingDlg dialog 
CCookingDlg::CCookingDlg(CWnd*pParent/*=NULL*/) 
     :CDialog(CCookingDlg::IDD,pParent) 
     //{{AFX_DATA_INIT(CCookingDlg) 
     m_rad1=-1; 
     //}}AFX_DATA_INIT 
     // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 
     m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
void CCookingDlg::DoDataExchange(CDataExchange*pDX) 
     CDialog::DoDataExchange(pDX); 
     //{{AFX_DATA_MAP(CCookingDlg) 
    DDX_Control(pDX,IDC_PROGRESS9,m_jindu2); 
    DDX_Control(pDX,IDC_PROGRESS8,m_jindu1); 
    DDX_Control(pDX,IDC_PROGRESS7,m_jindu0); 
    DDX_Radio(pDX,IDC_RADIO1,m_rad1); 
    DDX_Control(pDX,IDC_MSCOMM1,m_ctrlComm); 
    //}}AFX_DATA_MAP 
BEGIN_MESSAGE_MAP(CCookingDlg,CDialog) 
     //{{AFX_MSG_MAP(CCookingDlg) 
     ON_WM_SYSCOMMAND() 
     ON_WM_PAINT() 
     ON_WM_QUERYDRAGICON() 
     ON_BN_CLICKED(IDC_BUTTON2,OnButton2) 
     ON_BN_CLICKED(IDC_BUTTON3,OnButton3) 
     ON_BN_CLICKED(IDC_BUTTON4,OnButton4) 
     ON_WM_TIMER() 
     ON_WM_CTLCOLOR() 
     ON_BN_CLICKED(IDC_BUTTON5,OnButton5) 
     //}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
///////////////////////////////////////////////////////////////////////////// 
// CCookingDlg message handlers 
BOOL CCookingDlg::OnInitDialog() 
     CDialog::OnInitDialog(); 
     //Add″About...″menu item to system menu. 
     //IDM_ABOUTBOX must be in the system command range. 
     ASSERT((IDM_ABOUTBOX & 0xFFF0)==IDM_ABOUTBOX); 
     ASSERT(IDM_ABOUTBOX<0xF000); 
     CMenu*pSysMenu=GetSystemMenu(FALSE); 
     if(pSysMenu!=NULL) 
     { 
         CString strAboutMenu; 
            strAboutMenu.LoadString(IDS_ABOUTBOX); 
            if(!strAboutMenu.IsEmpty()) 
            { 
                pSysMenu->AppendMenu(MF_SEPARATOR); 
                pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu); 
            } 
     } 
     // Set the icon for this dialog.The framework does this automatically 
     //  when the application’s main window is not a dialog 
     SetIcon(m_hIcon,TRUE);    //Set big icon 
     SetIcon(m_hIcon,FALSE);    //Set small icon 
     // TODO:Add extra initialization here 
  this->GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE); 
  this->GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE); 
//串口参数设置 
   if(m_ctrlComm.GetPortOpen()) 
m_ctrlComm.SetPortOpen(FALSE); 
m_ctrlComm.SetCommPort(3);//选择com1 
if(!m_ctrlComm.GetPortOpen()) 
m_ctrlComm.SetPortOpen(TRUE);//打开串口 
else 
AfxMessageBox(″cannot open serial port″); 
m_ctrlComm.SetSettings(″9600,n,8,1″);//波特率9600,无校验,8个数据位,1个停止位 
m_ctrlComm.SetInputMode(1);//1:表示以二进制方式检取数据 
//m_ctrlComm.SetRThreshold(1); 
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 
m_ctrlComm.SetInputLen(0);//设置当前接收区数据长度为0 
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据 
//设置固阀初始值 
m_ctrlComm.SetOutput(COleVariant(″O(006,1)″)); 
//设置背景色 
m_brush.CreateSolidBrush(RGB(236,243,253)); 
this->GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE); 
 this->GetDlgItem(IDC_BUTTON4)->EnahleWindow(FALSE); 
this->GetDlgItem(IDC_STATIC63)->EnableWindow(TRUE); 
this->GetDlgItem(IDC_EDIT1)->EnableWindow(TRUE); 
    this->GetDlgItem(IDC_RADIO1)->EnableWindow(TRUE); 
       this->GetDlgItem(IDC_RADIO2)->EnableWindow(TRUE); 
       this->GetDlgItem(IDC_RADIO3)->EnableWindow(TRUE); 
    //TODO:Add your control notification handler code here 
    FILE*   pfile1; 
     TCHAR szBuf1[1000];//显示步骤 
    memset(szBuf1,0,999); 
    pfile1=fopen(″12.txt″,″rb″);//打开文件 
     fread(szBuf1,1,1000,pfile1);//读取文件 
    (GetDlgItem(IDC_STATIC1))->SetWindowText(szBuf1);//写控件 
     fclose(pfile1);//关闭文件 
      FILE* pfile2; 
      TCHAR szBuf2[1000];//显示步骤 
     memset(szBuf2,0,999); 
     pfile2=fopen(″13.txt″,″rb″);//打开文件 
      fread(szBuf2,1,1000,pfile2);//读取文件 
     (GetDlgItem(IDC_STATIC2))->SetWindowText(szBuf2);//写控件 
      fclose(pfile2);//关闭文件 
        FILE* pfile5; 
     TCHAR szBuf5[1000];//显示步骤 
    memset(szBuf5,0,999); 
   // pfile5=fopen(″01.txt″,″rb″);//打开文件 
//  else if(index==1) 
         pfile5=fopen(″11.txt″,″rb″);//打开文件 
         fread(szBuf5,1,1000,pfile5);//读取文件 
       (GetDlgItem(IDC_STATIC5))->SetWindowText(szBuf5);//写控件 
        fclose(pfile5);//关闭文件 
     FILE* pfile3; 
        TCHAR szBuf3[1000];//显示步骤 
       memset(szBuf3,0,999); 
       pfile3=fopen(″14.txt″,″rb″);//打开文件 
       fread(szBuf3,1,1000,pfile3);//读取文件 
     (GetDlgItem(IDC_STATIC3))->SetWindowText(szBuf3);//写控件 
     fclose(pfile3);//关闭文件 
     GetDlgItem(IDC_STATIC11)->SetWindowText(″总时间(4min40s)″); 
     GetDlgItem(IDC_STATIC12)->SetWindowText(″步骤1(1min40s)″); 
     GetDlgItem(IDC_STATIC13)->SetWindowText(″步骤2(3min)″); 
     return TRUE; //return TRUE unless you set the focus to a control 
void CCookingDlg::OnSysCommand(UINT nID,LPARAM lParam) 
    if((nID & 0xFFF0)==IDM_ABOUTBOX) 
    { 
         CAboutDlg dlgAbout; 
         dlgAbout.DoModal(); 
     } 
     else 
     { 
         CDialog::OnSysCommand(nID,lParam); 
     } 
//  If you add a minimize button to your dialog,you will need the code below 
//  to draw the icon.For MFC applications using the document/view model, 
//  this is automatically done for you by the framework. 
void CCookingDlg::OnPaint() 
     if(IsIconic()) 
     { 
        CPaintDC dc(this);// device context for painting 
        SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0); 
        //Center icon in client rectangle 
        int cxIcon=GetSystemMetrics(SM_CXICON); 
        int cyIcon=GetSystemMetrics(SM_CYICON); 
        CRect rect; 
        GetClientRect(&rect); 
        int x=(rect.Width()-cxIcon+1)/2; 
        int y=(rect.Height()-cyIcon+1)/2; 
        //Draw the icon 
        dc.DrawIcon(x,y,m_hIcon); 
    } 
    else 
    { 
        CDialog::OnPaint(); 
    } 
//The system calls this to obtain the cursor to display while the user drags 
//  the minimized window. 
HCURSOR CCookingDlg::OnQueryDragIcon() 
    return(HCURSOR)m_hIcon; 
//第二步 
void CCookingDlg::OnButton2() 
   this->GetDlgItem(IDC_EDIT01)->EnableWindow(TRUE); 
   this->GetDlgItem(IDC_EDIT02)->EnableWindow(TRUE); 
   this->GetDlgItem(IDC_EDIT03)->EnableWindow(TRUE); 
   this->GetDlgItem(IDC_EDIT04)->EnableWindow(TRUE); 
   this->GetDlgItem(IDC_EDIT05)->EnableWindow(TRUE); 
   this->GetDlgItem(IDC_EDIT06)->EnableWindow(TRUE); 
   //TODO:Add your control notification handler code here 
  this->GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE); 
   UpdateData(); 
   GetDlgItemText(IDC_EDIT1,str1); 
   GetDlgItemText(IDC_EDIT2,str2); 
   int q(0); 
if (str1==″″) 
   MessageBox(″请输入主材料的质量″); 
    else if(ceil(atof(str1))>10000||ceil(atof(str1))<100) 
     MessageBox(″您输入的材料数量不合理,请重新输入″); 
        else q=1; 
    if(m_rad1==-1) 
    MessageBox(″请选择口味!″); 
    if(q==1 && m_rad1!=-1) 
     { 
       this->GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE); 
        this->GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE); 
        this->GetDlgItem(IDC_RADIO1)->EnableWindow(FALSE); 
       this->GetDlgItem(IDC_RADIO2)->EnableWindow(FALSE); 
          this->GetDlgItem(IDC_RADIO3)->EnableWindow(FALSE); 
      FILE* pfile4; 
      TCHAR szBuf4[1000];//显示步骤 
     memset(szBuf4,0,999); 
     pfile4=fopen(″15.txt″,″rb″);//打开文件 
     fread(szBuf4,1,1000,pfile4);//读取文件 
     (GetDlgItem(IDC_STATIC4))->SetWindowText(szBuf4);//写控件 
     (GetDlgItem(IDC_STATIC6))->SetWindowText(szBuf4);//写控件 
    fclose(pfile4);//关闭文件 
//计算建议量 
    { 
    m1=(int)ceil(atof(str1));//白菜(克) 
    x1=(int)ceil(0.15*m1);//油(ml) 
    if(m_rad1==0) x2=(int)ceil(m1*0.005);  //盐(g) 
   if(m_rad1==1) x2=(int)ceil(m1*0.004); 
   if(m_rad1==2) x2=(int)ceil(m1*0.0625); 
   x4=(int)ceil(m1*0.035);//醋(ml) 
   x3=(int)ceil(x4*0.333);//酱油(ml) 
   x5=(int)ceil(x3*0.5);//醋(ml) 
   } 
//显示建议量 
    s1.Format(″%d″,x1); 
    s2.Format(″%d″,x2); 
    s3.Format(″%d″,x3); 
     s4.Format(″%d″,x4); 
     s5.Format(″%d″,x5); 
  GetDlgItem(IDC_EDIT1)->EnableWindow(FALSE); 
GetDlgItem(IDC_STATIC01)->SetWindowText(str1); 
GetDlgItem(IDC_STATIC02)->SetWindowText(s1); 
GetDlgItem(IDC_STATIC03)->SetWindowText(s2); 
GetDlgItem(IDC_STATIC04)->SetWindowText(s3); 
GetDlgItem(IDC_STATIC05)->SetWindowText(s4); 
GetDlgItem(IDC_STATIC06)->SetWindowText(s5); 
GetDlgItem(IDC_EDIT01)->SetWindowText(str1); 
GetDlgItem(IDC_EDIT02)->SetWindowText(s1); 
GetDlgItem(IDC_EDIT03)->SetWindowText(s2); 
GetDlgItem(IDC_EDIT04)->SetWindowText(s3); 
GetDlgItem(IDC_EDIT05)->SetWindowText(s4); 
GetDlgItem(IDC_EDIT06)->SetWindowText(s5); 
//第三步 
void CCookingDlg::OnButton3() 
    // TODO:Add your control notification handler code here 
    this->GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE); 
   this->GetDlgItem(IDC_EDIT01)->EnableWindow(FALSE); 
   this->GetDlgItem(IDC_EDIT02)->EnableWindow(FALSE); 
    this->GetDlgItem(IDC_EDIT03)->EnableWindow(FALSE); 
    this->GetDlgItem(IDC_EDIT04)->EnableWindow(FALSE); 
    this->GetDlgItem(IDC_EDIT05)->EnableWindow(FALSE); 
    this->GetDlgItem(IDC_EDIT06)->EnableWindow(FALSE); 
      UpdateData(); 
      { 
      this->GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE); 
      GetDlgItemText(IDC_EDIT01,str1); 
      GetDlgItemText(IDC_EDIT02,s1); 
      GetDlgItemText(IDC_EDIT03,s2); 
      GetDlgItemText(IDC_EDIT04,s3); 
      GetDlgItemText(IDC_EDIT05,s4); 
      GetDlgItemText(IDC_EDIT06,s5); 
      m1=(int)ceil(atof(str1));//白菜(g) 
     x1=(int)ceil(atof(s1)); 
      x2=(int)ceil(atof(s2)); 
      x3=(int)ceil(atof(s3)); 
      x4=(int)ceil(atof(s4)); 
      x5=(int)ceil(atof(s5)); 
 //播放准备提示音 
PlaySound(″2_1.wav″,NULL,SND_ASYNC); 
//提示准备材料 
    dlg1 aa; 
    aa.DoModal(); 
    } 
 this->GetDlgItem(IDC_BUTTON4)->EnableWindow(TRUE); 
//开始做菜 
void CCookingDlg::OnButton4() 
        this->GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE); 
     // TODO:Add your control notification handler code here 
  //this->GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE); 
  this->GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE); 
   this->GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE); 
    SetTimer(1,1000,NULL); 
    tim=0; 
//  if(index==0) 
//  {tt=240;t1=120;t2=tt-t1;} 
//  else if(index==1) 
    {tt=280;t1=100;t2=tt-t1;} 
   m_jindu0.SetRange(1,tt); 
   m_jindu0.SetPos(0); 
   m_jindu1.SetRange(1,t1); 
  m_jindu1.SetPos(0); 
   m_jindu2.SetRange(1,t2); 
  m_jindu2.SetPos(0); 
void CCookingDlg::OnTimer(UINT nIDEvent) 
    // TODO:Add your message handler code here and/or call default 
    CDialog::OnTimer(nIDEvent); 
        if(tim<=tt) 
        { 
            CString swm(″0″),sws(″0″); 
    swm.Format(″%d″,(tt-tim)/60); 
    sws.Format(″%d″,(tt-tim)%60); 
         GetDlgItem(IDC_STATIC20)->SetWindowText(swm); 
        GetDlgItem(IDC_STATIC21)->SetWindowText(sws); 
        m_jindu0.SetPos(tim); 
            CString swm1(″0″),sws1(″0″); 
if(tim<=t1) 
           { 
       swm1.Format(″%d″,(t1-tim)/60); 
       sws1.Format(″%d″,(t1-tim)%60); 
       GetDlgItem(IDC_STATIC30)->SetWindowText(swm1); 
      GetDlgItem(IDC_STATIC31)->SetWindowText(sws1); 
      m_jindu1.SetPos(tim); 
else 
      { 
     swm1.Format(″%d″,(t2-tim+t1)/60); 
     sws1.Format(″%d″,(t2-tim+t1)%60); 
     GetDlgItem(IDC_STATIC40)->SetWindowText(swm1); 
    GetDlgItem(IDC_STATIC41)->SetWindowText(sws1); 
    m_jindu2.SetPos(tim-t1);} 
//放调料 
//放油(油为灯9) 
if(tim==3)m_ctrlComm.SetOutput(COleVariant(″O(009,1)″)); 
if(tim==(3+x1/6))m_ctrlComm.SetOutput(COleVariant(″O(009,0)″)); 
//放盐、醋、酱油(盐为灯7、醋为灯11、酱油为灯12) 
if(tim==106)m_ctrlComm.SetOutput(COleVariant(″O(007,1)″)); 
if(tim==114)m_ctrlComm.SetOutput(COleVariant(″O(007,0)″)); 
if(tim==115)m_ctrlComm.SetOutput(COleVariant(″O(011,1)″)); 
if(tim==(115+x4/8))m_ctrlComm.SetOutput(COleVariant(″O(011,0)″)); 
if(tim==122)m_ctrlComm.SetOutput(COleVariant(″O(012,1)″)); 
if(tim==(122+x3/7))m_ctrlComm.SetOutput(COleVariant(″O(012,0)″)); 
//放香油(香油为灯10) 
if(tim==275)m_ctrlComm.SetOutput(COleVariant(″O(009,1)″)); 
if(tim==(275+x5/6))m_ctrlComm.SetOutput(COleVariant(″O(009,0)″)); 
//语音提示 
if(tim==0)PlaySound(″2_2.wav″,NULL,SND_ASYNC); 
if(tim==35)PlaySound(″2_3.wav″,NULL,SND_ASYNC); 
if(tim==101)PlaySound(″2_4.wav″,NULL,SND_ASYNC); 
if(tim==273)PlaySound(″2_5.wav″,NULL,SND_ASYNC); 
tim=tim+1; 
HBRUSH CCookingDlg::OnCtlColor(CDC*pDC,CWnd* pWnd,UINT nCtlColor) 
     HBRUSH hbr=CDialog::OnCtlColor(pDC,pWnd,nCtlColor); 
     if(pWnd->GetDlgCtrlID()==IDC_STATIC50)    /*控件的名称*/ 
     { 
        pDC->SetTextColor(RGB(0,0,0)); /*将色彩容器中的文字颜色设置为黑色*/ 
        pDC->SetBkMode(TRANSPARENT);  /*设置文字的背景为透明,否则文字背景认为系统默认色*/ 
        //pDC->SetBkColor(RGB(255,0,0));  /*设置文字的背景色,注意如果写了上面句的话,背景色无效*/ 
 } 
 if(pWnd->GetDlgCtrlID()==IDC_STATIC51){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
 if(pWnd->GetDlgCtrlID()==IDC_STATIC52){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
 if(pWnd->GetDlgCtrlID()==IDC_STATIC53){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
 if(pWnd->GetDlgCtrlID()==IDC_STATIC54){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
 if(pWnd->GetDlgCtrlID()==IDC_STATIC61){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
 if(pWnd->GetDlgCtrlID()==IDC_STATIC62){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
 if(pWnd->GetDlgCtrlID()==IDC_STATIC63){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
 if(pWnd->GetDlgCtrlID()==IDC_STATIC64){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
 if(pWnd->GetDlgCtrlID()==IDC_STATIC65){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC66){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC67){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC68){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC69){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC70){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC71){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC72){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC73){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC2){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC3){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC4){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC5){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC6){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC01){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC02){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC03){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC04){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC05){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC06){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC11){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC12){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC13){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC21){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC22){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC23){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC24){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC25){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC27){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC20){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC30){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC40){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC31){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_STATIC41){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_RADIO1){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
if(pWnd->GetDlgCtrlID()==IDC_RADIO2){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
     if(pWnd->GetDlgCtrlID()==IDC_RADIO3){pDC->SetTextColor(RGB(0,0,0));pDC->SetBkMode(TRANSPARENT);} 
  if(pWnd->GetDlgCtrlID()==IDC_COMBO1) 
  { 
     pDC->SetTextColor(RGB(0,0,0)); 
     pDC->SetBkMode(TRANSPARENT); 
     //pDC->SetBkColor(RGB(255,255,0)); 
  } 
     // TODO:Change any attributes of the DC here 
     return m_brush; 
     //TODO:Return a different brush if the default is not desired 
     //return hbr; 
void CCookingDlg::OnButton5() 
     // TODO:Add your control notification handler code here 
GetDlgItem(IDC_EDIT1)->SetWindowText(″″); 
m_rad1=-1; 
this->GetDlgItem(IDC_STATIC63)->EnableWindow(TRUE); 
this->GetDlgItem(IDC_EDIT1)->EnableWindow(TRUE); 
GetDlgItem(IDC_STATIC01)->SetWindowText(″″); 
GetDlgItem(IDC_STATIC02)->SetWindowText(″″); 
GetDlgItem(IDC_STATIC03)->SetWindowText(″″); 
GetDlgItem(IDC_STATIC04)->SetWindowText(″″); 
GetDlgItem(IDC_STATIC05)->SetWindowText(″″); 
GetDlgItem(IDC_STATIC06)->SetWindowText(″″); 
GetDlgItem(IDC_STATIC4)->SetWindowText(″″); 
GetDlgItem(IDC_STATIC6)->SetWindowText(″″); 
GetDlgItem(IDC_EDIT01)->SetWindowText(″″); 
GetDlgItem(IDC_EDIT02)->SetWindowText(″″); 
GetDlgItem(IDC_EDIT03)->SetWindowText(″″); 
GetDlgItem(IDC_EDIT04)->SetWindowText(″″); 
GetDlgItem(IDC_EDIT05)->SetWindowText(″″); 
GetDlgItem(IDC_EDIT06)->SetWindowText(″″); 
this->GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE); 
this->GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE); 
this->GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE); 
this->GetDlgItem(IDC_RADIO1)->EnableWindow(TRUE); 
this->GetDlgItem(IDC_RADIO2)->EnableWindow(TRUE); 
this->GetDlgItem(IDC_RADIO3)->EnableWindow(TRUE); 
KillTimer(1); 
tt=350;t1=150;t2=200; 
     m_jindu0.SetRange(1,tt); 
     m_jindu0.SetPos(0); 
     m_jindu1.SetRange(1,t1); 
    m_jindu1.SetPos(0); 
     m_jindu2.SetRange(1,t2); 
    m_jindu2.SetPos(0); 
GetDlgItem(IDC_STATIC20)->SetWindowText(″″); 
GetDlgItem(IDC_STATIC21)->SetWindowText(″″); 
GetDlgItem(IDC_STATIC30)->SetWindowText(″″); 
GetDlgItem(IDC_STATIC31)->SetWindowText(″″); 
GetDlgItem(IDC_STATIC40)->SetWindowText(″″); 
GetDlgItem(IDC_STATIC41)->SetWindowText(″″); 
PlaySound(″空.wav″,NULL,SND_ASYNC); 
3、dlg1.cpp 
//dlg1.cpp:implementation file 
// 
#include″stdafx.h″ 
#include″Cooking.h″ 
#include″CookingDlg.h″ 
#include″dlg1.h″ 
#ifdef_DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#endif 
CString ss1,ss2; 
///////////////////////////////////////////////////////////////////////////// 
// dlg1 dialog 
dlg1::dlg1(CWnd* pParent /*=NULL*/) 
    :CDialog(dlg1::IDD,pParent) 
     //{{AFX_DATA_INIT(dlg1) 
          // NOTE:the ClassWizard will add member initialization here 
     //}}AFX_DATA_INIT 
void dlg1::DoDataExchange(CDataExchange*pDX) 
    CDialog::DoDataExchange(pDX); 
    //{{AFX_DATA_MAP(dlg1) 
        // NOTE:the ClassWizard will add DDX and DDV calls here 
    //}}AFX_DATA_MAP 
BEGIN_MESSAGE_MAP(dlg1,CDialog) 
     //{{AFX_MSG_MAP(dlg1) 
     //}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
///////////////////////////////////////////////////////////////////////////// 
// dlg1 message handlers 
BOOL dlg1::OnInitDialog() 
     CDialog::OnInitDialog(); 
     // TODO:Add extra initialization here 
      FILE* pfile1; 
     TCHAR szBuf1[1000];//显示步骤 
    memset(szBuf1,0,999); 
//  if(index==0) 
 // pfile1=fopen(″02.txt″,″rb″);//打开文件 
  // else if(index==1) 
    pfile1=fopen(″12.txt″,″rb″);//打开文件 
     fread(szBuf1,1,1000,pfile1);//读取文件 
   (GetDlgItem(IDC_STATIC01))->SetWindowText(szBuf1);//写控件 
    fclose(pfile1);//关闭文件 
     FILE*  pfile2; 
     TCHAR szBuf2[1000];//显示步骤 
    memset(szBuf2,0,999); 
   //  if(index==0) 
   //  pfile2=fopen(″03.txt″,″rb″);//打开文件 
   // else if(index==1) 
     pfile2=fopen(″13.txt″,″rb″);//打开文件 
      fread(szBuf2,1,1000,pfile2);//读取文件 
     (GetDlgItem(IDC_STATIC02))->SetWindowText(szBuf2);//写控件 
      fclose(pfile2);//关闭文件 
  ss1.Format(″%d″,m1); 
  ss2.Format(″%d″,m2); 
  // if(index==0) 
 //  { 
// GetDlgItem(IDC_STATIC11)->SetWindowText(ss1); 
// GetDlgItem(IDC_STATIC12)->SetWindowText(ss2); 
  // } 
  //else if(index==1) 
 GetDlgItem(IDC_STATIC11)->SetWindowText(ss1); 
   return TRUE; //return TRUE unless you set the focus to a control 
                 // EXCEPTION:OCX Property Pages should return FALSE 
4、mscomm.cpp 
//Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++ 
//NOTE:Do not modify the contents of this file.If this class is regenerated by 
//Microsoft Visual C++,your modifications will be overwritten. 
#include″stdafx.h″ 
#include″mscomm.h″ 
///////////////////////////////////////////////////////////////////////////// 
//CMSComm 
IMPLEMENT_DYNCREATE(CMSComm,CWnd) 
///////////////////////////////////////////////////////////////////////////// 
// CMSComm properties 
///////////////////////////////////////////////////////////////////////////// 
// CMSComm operations 
void CMSComm::SetCDHolding(BOOL bNewValue) 
     static BYTE parms[]= 
         VTS_BOOL; 
     InvokeHelper(0x1,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
          bNewValue); 
BOOL CMSComm::GetCDHolding() 
     BOOL result; 
     InvokeHelper(0x1,DISPATCH_PROPERTYGET,VT_BOOL,(void*)&result,NULL); 
     return result; 
void CMSComm::SetCommID(long nNewValue) 
     static BYTE parms[]= 
          VTS_I4; 
     InvokeHelper(0x3,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
           nNewValue); 
long CMSComm::GetCommID() 
     long result; 
     InvokeHelper(0x3,DISPATCH_PROPERTYGET,VT_I4,(void*)&result,NULL); 
     return result; 
void CMSComm::SetCommPort(short nNewValue) 
     static BYTE parms[]= 
         VTS_I2; 
     InvokeHelper(0x4,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
         nNewValue); 
short CMSComm::GetCommPort() 
    short result; 
    InvokeHelper(0x4,DISPATCH_PROPERTYGET,VT_I2,(void*)&result,NULL); 
    return result; 
void CMSComm::SetCTSHolding(BOOL bNewValue) 
     static BYTE parms[]= 
          VTS_BOOL; 
       InvokeHelper(0x5,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
             bNewValue); 
BOOL CMSComm::GetCTSHolding() 
    BOOL result; 
    InvokeHelper(0x5,DISPATCH_PROPERTYGET,VT_BOOL,(void*)&result,NULL); 
    return result; 
void CMSComm::SetDSRHolding(BOOL bNewValue) 
     static BYTE parms[]= 
         VTS_BOOL; 
     InvokeHelper(0x7,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
         bNewValue); 
BOOL CMSComm::GetDSRHolding() 
     BOOL result; 
     InvokeHelper(0x7,DISPATCH_PROPERTYGET,VT_BOOL,(void*)&result,NULL); 
     return result; 
void CMSComm::SetDTREnable(BOOL bNewValue) 
     static BYTE parms[]= 
         VTS_BOOL; 
     InvokeHelper(0x9,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
         bNewValue); 
BOOL CMSComm::GetDTREnable() 
      BOOL result; 
      InvokeHelper(0x9,DISPATCH_PROPERTYGET,VT_BOOL,(void*)&result,NULL); 
      return result; 
void CMSComm::SetHandshaking(long nNewValue) 
     static BYTE parms[]= 
         VTS_I4; 
     InvokeHelper(0xa,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
         nNewValue); 
long CMSComm::GetHandshaking() 
     long result; 
     InvokeHelper(0xa,DISPATCH_PROPERTYGET,VT_I4,(void*)&result,NULL); 
     return result; 
void CMSComm::SetInBufferSize(short nNewValue) 
     static BYTE parms[]= 
          VTS_I2; 
     InvokeHelper(0xb,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
          nNewValue); 
short CMSComm::GetInBufferSize() 
     short result; 
     InvokeHelper(0xb,DISPATCH_PROPERTYGET,VT_I2,(void*)&result,NULL); 
     return result; 
void CMSComm::SetInBufferCount(short nNewValue) 
     static BYTE parms[]= 
         VTS_I2; 
     InvokeHelper(0xc,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
         nNewValue); 
short CMSComm::GetInBufferCount() 
    short result; 
    InvokeHelper(0xc,DISPATCH_PROPERTYGET,VT_I2,(void*)&result,NULL); 
    return result; 
void CMSComm::SetBreak(BOOL bNewValue) 
     static BYTE parms[]= 
         VTS_BOOL; 
     InvokeHelper(0xd,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
         bNewValue); 
BOOL CMSComm::GetBreak() 
     BOOL result; 
     InvokeHelper(0xd,DISPATCH_PROPERTYGET,VT_BOOL,(void*)&result,NULL); 
     return result; 
void CMSComm::SetInputLen(short nNewValue) 
     static BYTE parms[]= 
         VTS_I2; 
     InvokeHelper(0xe,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
         nNewValue); 
short CMSComm::GetInputLen() 
     short result; 
     InvokeHelper(0xe,DISPATCH_PROPERTYGET,VT_I2,(void*)&result,NULL); 
     return result; 
void CMSComm::SetNullDiscard(BOOL bNewValue) 
      static BYTE parms[]= 
          VTS_BOOL; 
      InvokeHelper(0x10,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
          bNewValue); 
BOOL CMSComm::GetNullDiscard() 
          BOOL result; 
          InvokeHelper(0x10,DISPATCH_PROPERTYGET,VT_BOOL,(void*)&result,NULL); 
          return result; 
void CMSComm::SetOutBufferSize(short nNewValue) 
     static BYTE parms[]= 
         VTS_I2; 
     InvokeHelper(0x11,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
         nNewValue); 
short CMSComm::GetOutBufferSize() 
    short result; 
    InvokeHelper(0x11,DISPATCH_PROPERTYGET,VT_I2,(void*)&result,NULL); 
    return result; 
void CMSComm::SetOutBufferCount(short nNewValue) 
    static BYTE parms[]= 
        VTS_I2; 
    InvokeHelper(0x12,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
        nNewValue); 
short CMSComm::GetOutBufferCount() 
     short result; 
     InvokeHelper(0x12,DISPATCH_PROPERTYGET,VT_I2,(void*)&result,NULL); 
     return result; 
void CMSComm::SetParityReplace(LPCTSTR lpszNewValue) 
     static BYTE parms[]= 
         VTS_BSTR; 
     InvokeHelper(0x13,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
         lpszNewValue); 
CString CMSComm::GetParityReplace() 
    CString result; 
    InvokeHelper(0x13,DISPATCH_PROPERTYGET,VT_BSTR,(void*)&result,NULL); 
    return result; 
void CMSComm::SetPortOpen(BOOL bNewValue) 
     static BYTE parms[]= 
         VTS_BOOL; 
     InvokeHelper(0x14,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
         bNewValue); 
BOOL CMSComm::GetPortOpen() 
     BOOL result; 
     InvokeHelper(0x14,DISPATCH_PROPERTYGET,VT_BOOL,(void*)&result,NULL); 
     return result; 
void CMSComm::SetRThreshold(short nNewValue) 
     static BYTE parms[]= 
         VTS_I2; 
   InvokeHelper(0x15,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
        nNewValue); 
short CMSComm::GetRThreshold() 
    short result; 
    InvokeHelper(0x15,DISPATCH_PROPERTYGET,VT_I2,(void*)&result,NULL); 
    return result; 
void CMSComm::SetRTSEnable(BOOL bNewValue) 
     static BYTE parms[]= 
         VTS_BOOL; 
     InvokeHelper(0x16,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
         bNewValue); 
BOOL CMSComm::GetRTSEnable() 
     BOOL result; 
     InvokeHelper(0x16,DISPATCH_PROPERTYGET,VT_BOOL,(void*)&result,NULL); 
     return result; 
void CMSComm::SetSettings(LPCTSTR lpszNewValue) 
     static BYTE parms[]= 
         VTS_BSTR; 
     InvokeHelper(0x17,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
         lpszNewValue); 
CString CMSComm::GetSettings() 
     CString result; 
     InvokeHelper(0x17,DISPATCH_PROPERTYGET,VT_BSTR,(void*)&result,NULL); 
     return result; 
void CMSComm::SetSThreshold(short nNewValue) 
     static BYTE parms[]= 
         VTS_I2; 
     InvokeHelper(0x18,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
         nNewValue); 
short CMSComm::GetSThreshold() 
      short result; 
      InvokeHelper(0x18,DISPATCH_PROPERTYGET,VT_I2,(void*)&result,NULL); 
      return result; 
void CMSComm::SetOutput(const VARIANT& newValue) 
      static BYTE parms[]= 
          VTS_VARIANT; 
      InvokeHelper(0x19,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
          &newValue); 
VARIANT CMSComm::GetOutput() 
    VARIANT result; 
    InvokeHelper(0x19,DISPATCH_PROPERTYGET,VT_VARIANT,(void*)&result,NULL); 
    return result; 
void CMSComm::SetInput(const VARIANT& newValue) 
     static BYTE parms[]= 
         VTS_VARIANT; 
     InvokeHelper(0x1a,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
         &newValue); 
VARIANT CMSComm::GetInput() 
     VARIANT result; 
     InvokeHelper(0x1a,DISPATCH_PROPERTYGET,VT_VARIANT,(void*)&result,NULL); 
     return result; 
void CMSComm::SetCommEvent(short nNewValue) 
     static BYTE parms[]= 
         VTS_I2; 
     InvokeHelper(0x1b,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
         nNewValue); 
short CMSComm::GetCommEvent() 
    short result; 
    InvokeHelper(0x1b,DISPATCH_PROPERTYGET,VT_I2,(void*)&result,NULL); 
    return result; 
void CMSComm::SetEOFEnable(BOOL bNewValue) 
     static BYTE parms[]= 
         VTS_BOOL; 
     InvokeHelper(0x1c,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
         bNewValue); 
BOOL CMSComm::GetEOFEnable() 
     BOOL result; 
     InvokeHelper(0x1c,DISPATCH_PROPERTYGET,VT_BOOL,(void*)&result,NULL); 
     return result; 
void CMSComm::SetInputMode(long nNewValue) 
    static BYTE parms[]= 
        VTS_I4; 
    InvokeHelper(0x1d,DISPATCH_PROPERTYPUT,VT_EMPTY,NULL,parms, 
        nNewValue); 
long CMSComm::GetInputMode() 
     long result; 
     InvokeHelper(0x1d,DISPATCH_PROPERTYGET,VT_I4,(void*)&result,NULL); 
     return result; 

Claims (9)

1.一种智能调料盒,包括智能控制装置、至少一个固体调料箱和至少一个液体调料箱,其特征在于:所述智能控制装置包括单片机(4)和多个由电磁阀门构成的固体阀门(9)和液体阀门(10),固体调料箱和液体调料箱设有出料口,固体调料箱通过出料口和与之对应的一个固体阀门(9)相连接,液体调料箱通过出料口和与之对应的一个液体阀门(10)相连接;所述液体阀门(10)和固体阀门(9)分别与单片机(4)相连接,并由单片机(4)控制固体阀门(9)和液体阀门(10)的开启与闭合。从而控制液体调料的流出和固体调料的输出;所述单片机(4)使用民用220V交流电转9V交流电。
2.如权利要求1所述的智能调料盒,其特征在于:所述智能调料盒中的单片机(4)与外部电脑(16)以串口或者无线的方式连接,所述外部电脑(16)通过菜谱软件实现与所述单片机(4)联合对固体阀门(9)和液体阀门(10)的开启或闭合进行控制,所述菜谱软件的制作基于微软Visual C++软件编写的MFC程序。
3.如权利要求2所述的智能调料盒,其特征在于:用户通过所述外部电脑(16)设定调料量的具体值,然后通过控制阀门口打开的时间来精确控制调料量的值,具体值的大小通过阀门口打开时间乘以阀门口的横截面积再乘以固体或液体的流出速度得出。
4.如权利要求1-3所述的智能调料盒,其特征在于:所述调料盒还包括一支架板(1),所述单片机(4)、固体调料箱、液体调料箱、固体阀门(9)和液体阀门(10)直接或者间接固定在所述支架板(1)上;固体调料箱和液体调料箱位于固体阀门(9)和液体阀门(10)上方,并且分别通过软管进行相应的连接。
5.如权利要求4所述的智能调料盒,其特征在于:所述固体阀门(9)和所述液体阀门(10)分别固定在对应的活动杆上,所述活动杆分为两段,两段连接部上设有固定旋钮(15),用于固定活动杆的形状,所述活动杆的另一端通过固定支架(14)固定在支架板(1)上,所述活动杆具备调整所述固体阀门和所述液体阀门出料口位置的功能。
6.如权利要求5所述的智能调料盒,其特征在于:所述支架板(1)还包括一底座(13),所述底座(13)上设置煤气炉灶或电磁炉。
7.如权利要求6所述的智能调料盒,其特征在于:所述支架板(1)还包括一支架挡板(3),用于在电脑放于智能调料盒旁边时,避免油进溅到电脑上。
8.如权利要求1-7所述的智能调料盒,其特征在于:所述单片机(4)使用民用220V交流电转9V交流电对应于一电转设备,所述电转设备将220V交流电转换为9V交流电;所述电转设备外壳为防水外壳。
9.如权利要求1-8所述的智能调料盒,其特征在于:所述单片机的型号为JMDM28DIOMT单片机。
CN2009100937390A 2009-10-16 2009-10-16 一种智能调料盒 Pending CN103082898A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2009100937390A CN103082898A (zh) 2009-10-16 2009-10-16 一种智能调料盒

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009100937390A CN103082898A (zh) 2009-10-16 2009-10-16 一种智能调料盒

Publications (1)

Publication Number Publication Date
CN103082898A true CN103082898A (zh) 2013-05-08

Family

ID=48196423

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009100937390A Pending CN103082898A (zh) 2009-10-16 2009-10-16 一种智能调料盒

Country Status (1)

Country Link
CN (1) CN103082898A (zh)

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104643943A (zh) * 2015-02-15 2015-05-27 深圳减字科技有限公司 烹饪液体调料上料装置
CN104739220A (zh) * 2015-03-23 2015-07-01 安徽瑞德智能科技有限公司 一种可学习全自动炒菜机
CN104783640A (zh) * 2015-03-20 2015-07-22 昆山穿山甲机器人有限公司 一种炒菜机器人
WO2015161713A1 (zh) * 2014-04-25 2015-10-29 珠海优特电力科技股份有限公司 自动配料装置
CN105030038A (zh) * 2015-06-29 2015-11-11 陈晓慧 烹饪设备
CN105573158A (zh) * 2015-07-03 2016-05-11 储华群 一种基于互联网的智能厨房终端产品及其配置方法
CN105595797A (zh) * 2016-03-18 2016-05-25 西安天柏安装装饰工程有限责任公司 一种自动炒菜机
CN106289471A (zh) * 2016-08-23 2017-01-04 北京博信视通科技有限公司 一种基于辅料计量器的菜式辅料计量方法和辅料计量器
CN107049087A (zh) * 2017-06-08 2017-08-18 浙江家丁智能科技有限公司 一种语音控制的调料盒
CN107212758A (zh) * 2017-05-10 2017-09-29 苏州亿腾智慧厨房设备有限公司 一种智能烹饪设备的自动下料系统
CN107397469A (zh) * 2016-05-18 2017-11-28 宁波欧琳厨房电器有限公司 一种调味料添加辅助设备及其使用方法
CN108710385A (zh) * 2018-04-11 2018-10-26 丽睿客信息科技(北京)有限公司 按单位出料量出料的智能调料盒及其控制方法
CN109300523A (zh) * 2018-08-03 2019-02-01 北京小米移动软件有限公司 调料储存设备控制方法及装置
CN109700344A (zh) * 2018-12-28 2019-05-03 南通天威智能科技有限公司 一种烹饪下料机及其控制方法
CN110250959A (zh) * 2019-06-23 2019-09-20 北京鲲鹏神通科技有限公司 一种应用于厨房的智能调味机
CN110916473A (zh) * 2019-10-25 2020-03-27 陈之中 一种数据化自动烹制菜肴的方法和设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN2346365Y (zh) * 1998-11-06 1999-11-03 阎洪继 一种烹调用调料组合架
CN1399934A (zh) * 2002-07-05 2003-03-05 康文朝 自动炒菜机
CN101008854A (zh) * 2006-01-25 2007-08-01 北京新联铁科贸有限公司 一种炒菜机的液体料计量装置
JP2008073309A (ja) * 2006-09-22 2008-04-03 Toshiba Corp 調理器
JP2008272313A (ja) * 2007-05-02 2008-11-13 Nakai Kikai Kogyo Kk 食材煮練り攪拌機の加熱源制御装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN2346365Y (zh) * 1998-11-06 1999-11-03 阎洪继 一种烹调用调料组合架
CN1399934A (zh) * 2002-07-05 2003-03-05 康文朝 自动炒菜机
CN101008854A (zh) * 2006-01-25 2007-08-01 北京新联铁科贸有限公司 一种炒菜机的液体料计量装置
JP2008073309A (ja) * 2006-09-22 2008-04-03 Toshiba Corp 調理器
JP2008272313A (ja) * 2007-05-02 2008-11-13 Nakai Kikai Kogyo Kk 食材煮練り攪拌機の加熱源制御装置

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015161713A1 (zh) * 2014-04-25 2015-10-29 珠海优特电力科技股份有限公司 自动配料装置
CN104643943A (zh) * 2015-02-15 2015-05-27 深圳减字科技有限公司 烹饪液体调料上料装置
CN104783640A (zh) * 2015-03-20 2015-07-22 昆山穿山甲机器人有限公司 一种炒菜机器人
CN104739220A (zh) * 2015-03-23 2015-07-01 安徽瑞德智能科技有限公司 一种可学习全自动炒菜机
CN105030038A (zh) * 2015-06-29 2015-11-11 陈晓慧 烹饪设备
CN105030038B (zh) * 2015-06-29 2018-04-24 南通江海港建设工程有限公司 烹饪设备
CN105573158A (zh) * 2015-07-03 2016-05-11 储华群 一种基于互联网的智能厨房终端产品及其配置方法
CN105595797A (zh) * 2016-03-18 2016-05-25 西安天柏安装装饰工程有限责任公司 一种自动炒菜机
CN107397469A (zh) * 2016-05-18 2017-11-28 宁波欧琳厨房电器有限公司 一种调味料添加辅助设备及其使用方法
CN107397469B (zh) * 2016-05-18 2024-04-09 宁波欧琳厨房电器有限公司 一种调味料添加辅助设备及其使用方法
CN106289471A (zh) * 2016-08-23 2017-01-04 北京博信视通科技有限公司 一种基于辅料计量器的菜式辅料计量方法和辅料计量器
CN107212758A (zh) * 2017-05-10 2017-09-29 苏州亿腾智慧厨房设备有限公司 一种智能烹饪设备的自动下料系统
CN107212758B (zh) * 2017-05-10 2019-06-11 苏州亿腾智慧厨房设备有限公司 一种智能烹饪设备的自动下料系统
CN107049087A (zh) * 2017-06-08 2017-08-18 浙江家丁智能科技有限公司 一种语音控制的调料盒
CN108710385A (zh) * 2018-04-11 2018-10-26 丽睿客信息科技(北京)有限公司 按单位出料量出料的智能调料盒及其控制方法
CN108710385B (zh) * 2018-04-11 2022-05-24 燕粟特膳科技(天津)有限公司 按单位出料量出料的智能调料盒及其控制方法
CN109300523A (zh) * 2018-08-03 2019-02-01 北京小米移动软件有限公司 调料储存设备控制方法及装置
CN109700344A (zh) * 2018-12-28 2019-05-03 南通天威智能科技有限公司 一种烹饪下料机及其控制方法
CN110250959A (zh) * 2019-06-23 2019-09-20 北京鲲鹏神通科技有限公司 一种应用于厨房的智能调味机
CN110916473A (zh) * 2019-10-25 2020-03-27 陈之中 一种数据化自动烹制菜肴的方法和设备
CN110916473B (zh) * 2019-10-25 2021-04-06 陈之中 一种数据化自动烹制菜肴的方法和设备

Similar Documents

Publication Publication Date Title
CN103082898A (zh) 一种智能调料盒
US20200383520A1 (en) System and method for assistive interactions with an automated cooking device
CN104294886B (zh) 用于可编程淋浴界面的系统和方法
CN105138682B (zh) 方便菜与数字菜谱的匹配方法、服务器及终端
RU2583902C1 (ru) Устройство для приготовления пищи, электронная библиотека и соответствующие способы
CN104757872B (zh) 在使用中为用户提供帮助的蒸煮系统
CN109032568A (zh) 程序逻辑的生成方法、终端设备及存储介质
GB2532683A (en) Portable fully automatic cooking system
CN109829835A (zh) 一种确定菜谱的方法、装置、电子设备及存储介质
EP2180390A2 (en) Consumable information holder with user interface data
CN110853733A (zh) 一种创作电子菜谱的方法、装置、电子设备及存储介质
Kim et al. High school students' preferences and food intake on menu items offered by school foodservice in Daegu
CN109213465A (zh) 一种用于教育操作系统的多显示器标识方法及系统
CN201311640Y (zh) 一种营养评价指导点菜系统
CN109584991A (zh) 一种用于通过冰箱提供食材配组信息的方法以及冰箱
Minaam et al. Design of an Internet of Things (IoT) network system for Kitchen food waste management
CN109407534B (zh) 设备控制方法、装置、配置设备及控制装置
CN103292568A (zh) 一种可拆装pad控制模块固定组件及带有该组件的冰箱
JP2011170692A (ja) 食事管理装置、食事管理システム、食事管理方法、プログラムおよび記録媒体
MY151507A (en) Apparatus and method for providing a container with a customized design
CN1871982A (zh) 系列加水装置
CN112353274A (zh) 一种调味品自动调节装置
CN206173076U (zh) 饮用水供应设备及其水质调控模块
CN203074261U (zh) 一种带菜式讲解的炒菜机
CN204260640U (zh) 具有挂钩及密封结构的感应式热水读卡器

Legal Events

Date Code Title Description
DD01 Delivery of document by public notice

Addressee: Zhang Zhiguo

Document name: Notification to Make Rectification

C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C05 Deemed withdrawal (patent law before 1993)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20130508