定时煮沸锅
本帖最后由 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,输出控制,关闭总中断,,关闭用电器继电器
}
}
fen--;//分减1
改为:
if(fen>0)fen--;//分减1
lcw_swust 发表于 2013-4-18 11:09 static/image/common/back.gif
fen--;//分减1
改为:
if(fen>0)fen--;//分减1
多谢,要这样,我这程序是不是一直在后台做减数。
一般的電壓力鍋都有煮粥檔,費事弄,搞出來的效果可能還很不如意{:smile:} 这个可以关注下美国最新的爆炸案,说不定就有思路了!哈 kyughanum 发表于 2013-4-18 12:54 static/image/common/back.gif
这个可以关注下美国最新的爆炸案,说不定就有思路了!哈
真有才!!那时候单片机都灰飞烟灭了,可惜了了! 很快这种锅要实名制 kyughanum 发表于 2013-4-18 12:54 static/image/common/back.gif
这个可以关注下美国最新的爆炸案,说不定就有思路了!哈
这个就是 逆向思维啊,哈哈哈 支持一下! 本帖最后由 huq2012 于 2013-4-19 12:15 编辑
devcang 发表于 2013-4-18 12:48 static/image/common/back.gif
一般的電壓力鍋都有煮粥檔,費事弄,搞出來的效果可能還很不如意 ...
我做这东西主要是用来煮汤的,把锅盖的压力锅密封圈拿下,放好料和水,设定好煮沸的时间,下班回来就可有美味的汤了。我想做个模式是煮沸几分钟后再半煮,是加热三四秒再停三四秒,到设定时间后才停止。这模式不会怎样编写程序?压力锅煮的粥太烂了,像婴儿食品了,大人不好吃吧。 huq2012 发表于 2013-4-19 12:11 static/image/common/back.gif
我做这东西主要是用来煮汤的,把锅盖的压力锅密封圈拿下,放好料和水,设定好煮沸的时间,下班回来就可有 ...
你怎么判断水已经烧开
烧一小会、停一小会,这很容易。 devcang 发表于 2013-4-19 13:35 static/image/common/back.gif
你怎么判断水已经烧开
看电路图那温变电阻,就是压力锅的中间温度感应器,利用2051的比较器就可调得出水开的电平输出。 sbit enshifen=P1^6; //定义十分位数码管阳极
sbit engefen=P1^7; //定义个分位数码管阳极
这个是不是和图不一样啊。。。。 juncheng88 发表于 2013-4-23 11:06 static/image/common/back.gif
sbit enshifen=P1^6; //定义十分位数码管阳极
sbit engefen=P1^7; //定义个分位数码管阳极
我实际做出试验板和这电路图是不一致,画图方便才这接法,程序才是试验板接法。 除非把测温探头放锅里,否者靠外部温度来准确判断沸点是很难的!另外水的沸点和气压有关,楼主做粥加不同的东西其沸点就不一样了!本人认为还是测试蒸汽靠谱! 最难的就是检测水是否烧开,单靠外面的温度不靠谱,探头放里面也不是百分之百准确, 如果做到像人眼那样准确是个难题。 其他的都 SOEASY 我家买了一个美的智能电饭煲,就有这样的功能.可以yu 约的. 支持一下, yk28981 发表于 2013-4-26 10:50 static/image/common/back.gif
除非把测温探头放锅里,否者靠外部温度来准确判断沸点是很难的!另外水的沸点和气压有关,楼主做粥加不同的 ...
我现想买到带AD功能的单片机,在锅里放半水就检测这温变电阻的曲线图,就可以根据温度控制了。
页:
[1]