huq2012 发表于 2013-4-18 10:33:38

定时煮沸锅

本帖最后由 huq2012 于 2013-4-18 10:36 编辑

我刚学单片机,想用个电饭锅做个定时煮沸锅,我电路图设想如下,感应器用电压力锅的感应器,把感应器装在电饭锅锅底,加水加热。我测量到在常温下是约80K电阻,在水开时约7.5K电阻。根据这特性,我设想利用2051内的比较器输出,水开后开始按设定好的时间倒计时煮汤,到时停止工作。我回来就可以有汤喝了。
失业在家终于把这做好了,感觉不是很理想,程序还是修改坛友的定时器。想做个工作模式还不懂怎样编程,只好把这端口暂用来做温度检测输出。这程序我用关闭总中断后几分钟,总是显示乱码,但输出不影响。只好把TR0中断关了才显示正常。请各位帮我分析下是什么原因。


煮沸定时器
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define leddata P3 //共阳p3口,P3.0=a......P3.7=h
sbit enshifen=P1^6; //定义十分位数码管阳极
sbit engefen=P1^7; //定义个分位数码管阳极
sbit typesw=P1^5;    //定义功能键
sbit upkey=P1^4;    //定义加键
sbit runkey=P1^3;   //定义运行倒计时键
sbit run=P1^2;      //定义控制用电器的继电器控制脚
sbit ttsacn=P3^6;//温度检测口
uchar code table[]={
0xc0,0xf9,0x64,0x30,
0x59,0x52,0x42,0xf8,
0x40,0x50,};   //共阳数码管字符表0-9
uchar fen;
uchar count=0;   //定义100ms计数次数变量,count=20即到1S

uchar miao=60;   //定义秒初值,减到0分就减1
uchar tt;          //定义检测常数

void delay1ms(uint z)   
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}      //延时子程序,延时Z个ms

void display (uchar shifen,uchar gefen,uchar cishu)//数码管动态扫描程序
{    uchar x;
for(x=cishu;x>0;x--)
{
   
if(shifen!=0)
    {
enshifen=0;
   leddata=table;
delay1ms(2);
enshifen=1;    //显示十位1ms左右
   }
else
   enshifen=0;
   leddata=0x4e;
   delay1ms(2);
   enshifen=1;



engefen=0;
    leddata=table;
delay1ms(2);
engefen=1;      //显示个位1ms左右

}

   
}

void init()   //定时器设置打开,暂未开总中断,当EA=1时候就会产生定时器中断。
{
TMOD=0x01;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256; //预装初值定时50MS
ET0=1;       //开定时器T0
}

void timer0() interrupt 1
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256; //重装初值
   count++;    //用于100MS定时的计数单元加1
    if(count==10)   //1s定时到,秒减1
       {
      count=0;// 用于50MS定时的计数单元归零
      miao--;
      
       if(miao==0)//一分钟到
      {
            miao=60; //秒重置60
         fen--;//分减1
      }
         
      }
   

   

}
void main()
{
init();
fen=1;//上电先显示F1分钟
run=1;//先关闭用电器继电器
tt=200;

while(1)
      {
      display((fen/10),(fen%10),1); //显示

      if(upkey==0) //加1
       {
       delay1ms(10);//按键防抖 ,再检测
   if(upkey==0)
   fen++;
   if(fen==16)
       fen=1;
   
      
      display((fen/10),(fen%10),50); //调用显示程序,用于延时
   
    }
      if(ttsacn==0)
             {
            tt--;
                     }
       if(tt==0)
            {
          EA=1; //开总中断
         typesw=0;
         }
    if(runkey==0)//启动倒计时
       {
       delay1ms(10);//按键防抖 ,再检测
    if(runkey==0)
         {
      
               run=0;   //开用电器继电器
         TR0=1;       //开定时器T0中断
          tt=200;
         ttsacn=1;//复位温度检测口
          }
   display((fen/10),(fen%10),100); //调用显示程序,用于延时,这样可以消除闪烁,还能自减
   
       }
   
    if(fen==0){EA=0;TR0=0;run=1;}//时间到0,输出控制,关闭总中断,,关闭用电器继电器      

      }


}

lcw_swust 发表于 2013-4-18 11:09:22

fen--;//分减1
改为:
if(fen>0)fen--;//分减1

huq2012 发表于 2013-4-18 12:11:37

lcw_swust 发表于 2013-4-18 11:09 static/image/common/back.gif
fen--;//分减1
改为:
if(fen>0)fen--;//分减1

多谢,要这样,我这程序是不是一直在后台做减数。

devcang 发表于 2013-4-18 12:48:19


一般的電壓力鍋都有煮粥檔,費事弄,搞出來的效果可能還很不如意{:smile:}

kyughanum 发表于 2013-4-18 12:54:22

这个可以关注下美国最新的爆炸案,说不定就有思路了!哈

绿茶山人 发表于 2013-4-18 14:00:28

kyughanum 发表于 2013-4-18 12:54 static/image/common/back.gif
这个可以关注下美国最新的爆炸案,说不定就有思路了!哈

真有才!!那时候单片机都灰飞烟灭了,可惜了了!

lee345 发表于 2013-4-18 14:10:55

很快这种锅要实名制

skynet 发表于 2013-4-18 14:15:14

kyughanum 发表于 2013-4-18 12:54 static/image/common/back.gif
这个可以关注下美国最新的爆炸案,说不定就有思路了!哈

这个就是 逆向思维啊,哈哈哈

tongdayusu 发表于 2013-4-18 18:45:49

支持一下!

huq2012 发表于 2013-4-19 12:11:30

本帖最后由 huq2012 于 2013-4-19 12:15 编辑

devcang 发表于 2013-4-18 12:48 static/image/common/back.gif
一般的電壓力鍋都有煮粥檔,費事弄,搞出來的效果可能還很不如意 ...

我做这东西主要是用来煮汤的,把锅盖的压力锅密封圈拿下,放好料和水,设定好煮沸的时间,下班回来就可有美味的汤了。我想做个模式是煮沸几分钟后再半煮,是加热三四秒再停三四秒,到设定时间后才停止。这模式不会怎样编写程序?压力锅煮的粥太烂了,像婴儿食品了,大人不好吃吧。

devcang 发表于 2013-4-19 13:35:57

huq2012 发表于 2013-4-19 12:11 static/image/common/back.gif
我做这东西主要是用来煮汤的,把锅盖的压力锅密封圈拿下,放好料和水,设定好煮沸的时间,下班回来就可有 ...

你怎么判断水已经烧开



烧一小会、停一小会,这很容易。

huq2012 发表于 2013-4-19 23:15:16

devcang 发表于 2013-4-19 13:35 static/image/common/back.gif
你怎么判断水已经烧开




看电路图那温变电阻,就是压力锅的中间温度感应器,利用2051的比较器就可调得出水开的电平输出。

juncheng88 发表于 2013-4-23 11:06:10

sbit enshifen=P1^6; //定义十分位数码管阳极
sbit engefen=P1^7; //定义个分位数码管阳极


这个是不是和图不一样啊。。。。

huq2012 发表于 2013-4-26 10:06:58

juncheng88 发表于 2013-4-23 11:06 static/image/common/back.gif
sbit enshifen=P1^6; //定义十分位数码管阳极
sbit engefen=P1^7; //定义个分位数码管阳极



我实际做出试验板和这电路图是不一致,画图方便才这接法,程序才是试验板接法。

yk28981 发表于 2013-4-26 10:50:04

除非把测温探头放锅里,否者靠外部温度来准确判断沸点是很难的!另外水的沸点和气压有关,楼主做粥加不同的东西其沸点就不一样了!本人认为还是测试蒸汽靠谱!

laodangong 发表于 2013-4-27 12:09:31

最难的就是检测水是否烧开,单靠外面的温度不靠谱,探头放里面也不是百分之百准确, 如果做到像人眼那样准确是个难题。 其他的都 SOEASY

cyxavr 发表于 2013-4-27 12:15:59

我家买了一个美的智能电饭煲,就有这样的功能.可以yu 约的.

benqme 发表于 2013-4-27 12:16:06

支持一下,

huq2012 发表于 2013-4-29 18:50:28

yk28981 发表于 2013-4-26 10:50 static/image/common/back.gif
除非把测温探头放锅里,否者靠外部温度来准确判断沸点是很难的!另外水的沸点和气压有关,楼主做粥加不同的 ...

我现想买到带AD功能的单片机,在锅里放半水就检测这温变电阻的曲线图,就可以根据温度控制了。
页: [1]
查看完整版本: 定时煮沸锅