工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

节能定时器控制电路

作者:dolphin时间:2016-09-08

本人受委托为一个定时器设计相关的控制程序,该定时器不但能定时,还可通过对功率的适度控制而有节能的功效,而且使用方便。我们都有这样的生活经验,
如果家里买不起几百元一个的高级电饭煲,早上又想吃稀饭的话,那必须天还没亮就爬起来做稀饭,把开关打开后,再钻回被窝睡觉。这特别是在大泠天,是一件很苦的差事。又往往因电饭煲的火力不能调小而使稀饭开了后容易溢出,既浪费、不卫生又有漏电的危险。笔者在家时,母亲就经常这样早起做稀饭,现在想起来心里还挺难受的。现在好了,只要用上这个定时器,不用改装就能把我们家的低档(或叫普及型)电饭煲一下子升级为高档电饭煲。晚上临睡前洗好大米,调好水量,或再放上自己喜爱的配料,定个时间。电饭煲就会按时自动启动。水开了后还可按要求转到中火或小火。到点了电饭煲就会自动关闭。方便实用,还节省能源。利用这些功能甚至还可煲老火汤和做炖品。

根据委托方的要求程序功能如下:

1. 设计一个“功能选择”按钮,用户通过该按钮的功能选择可输入4个定时时间(1、定时开;2、大火时间;3、中火时间;4、小火时间),这四个定时时间倒计时完后自动关机。这个“功能选择”按钮其实也是输入时间的“确定”按钮;

2.设计一个“时+”按钮,一个“分+”按钮分别对小时与分钟进行设定,小时最小值为O,最大值为24;分钟最,J、值为0,最大值为59。亦即该定时器的最长延时长度为24小时59分;

3.设计一个“-”按钮,在输入小时的数值时,“-”按钮能对小时数值作减操作;在输入分钟时,该按钮又能对分钟数值进行减操作:

4.一个“启动”按钮,按“启动”按钮后,定时器开始工作,进入倒计时;

5.一个“取消”按钮,即重置。能对上述各定时时间进行重新设置,或中断定时器工作;

6.大火是全功率使用电器,中火、小火分别利用占空比进行功率调整,以节省电力。中火功率为45%,小火为30%:

7.当所有倒计数时间值计数完毕后,音乐片奏乐以示定时器工作完毕。随即系统切断负载电源,等待下一次操作。基本上就是以上要求,电器原理图如图所示。

下面主要就程序设计方面谈一下个人的心得体会。图2是本人根据上述的功能要求设计的流程图。使用C语言编程比较简单快捷。所以我选择C语言编写这个程序。

如果把一个综合性的程序拆分成我们曾学习或接触过的小问题。事情就好办多了。事实上这个程序我们可以细分为以前接触过的一些小实验:

1. 流水灯。

2.LED数码管显示。

3. 键盘扫描。

有一点需要提醒的是,因为多数人为求实验电路版制作起来方便快捷易修改,通常采用万能电路板来制作硬件部分,这带来一个问题就是硬件的制作质量难以保证。所以我们在开始正式编程前,应该要先编写一些简单的语句检查每个硬件的工作情况,确保每一个硬件工作状态良好。不然程序编写完之后,经历长达几十小时的调试都调不通,最后检查硬件部分才发现只是因为某个焊点没焊好或某个有极性要求的零件极性装反了,而导致整个电路或局部电路不能按要求正常工作,那就欲哭无泪了。笔者以前就曾遇到过一次这种“冤”事,浪费了一整天的时间和精力,搞得筋疲力尽,只好怨自己工作不过细,自认倒霉。

现在我们先对这个电路进行硬件测试:

1. 用P1_0=O:……这样的语句点亮每一个发光二极管与蜂鸣器。

2. 查看LED是共阳还是共阴,共阳的话,0(低电平)有效。共阴的话,1(高电平)有效。用“8”字测试。即P1=OxoO;。控制位全为1(有效);同理,继续测试小时与分钟之间的冒号是否有效。

3.测试键盘是否有效,写一个键盘扫描程序(本文后面会详细介绍),临时利用一下该电路的发光二极管,让所有的按钮都对应一个发光二极管。当按钮按下,其所对应的发光二极管发光。这样就可以检查到按钮的连接是否良好。

当硬件的各功能检查能正常工作 后,我们就可以开始正式编程了。具体 步骤如下:

1. 导人头文件 #include absaCC.h#includereg51.h。 2. 定义每一个I/O口sbit P0_0=P0^0:等等。

3. 编写LED显示阿拉伯数字的 数组。

如:TABLE[10]={Oxc0……….} (具体怎么写这个数组,很多基本教 程都有说及,可以随便找一本来参考 一下。注意一下LED是共阳还是共阴 就可以了)

4.定义变量。我定义了4个变 量,hs、hg、ms和mg分别作为输入时 和倒计数时用的“小时十位数”,“小时 个位数”,“分钟十位数”,“分钟个位 数”。接着是4个数组,hSS[4]、rIgs[4]、 mss[4]和mgs[4]用来存放4个时间值 (分别是定时开时间、大火时间、中火时 间和小火时间)。然后是两个用来判断 状态的变量stk和stm,stk用来判断 输入时或分的状态。前面说到了,在输 入小时数值的时候,“-”按钮能对小时 进行减操作,输入分钟数值的时候, “-”按钮能对分钟进行减操作;stm用 来判定是输入那个时间及判定倒计数 时是倒数那个时间。例如:输入 stm==0,(注意判断变量值用双等 号,我经常犯的错误。)表示正在输入 定时开时间。stm==3,表示正在输入 小火时间。倒计数时同理。大火、中火 和小火时间均可跳过不进行设置,跳过 时,该组定时时间程序作零处理。

5.LED显示函数。LED显示有两 个要注意的地方:一是控制位,不要出 现两个控制位同时有效的情况。二是 每两个位显示之间要有一段延时。不 然全部数字就会混在一起看不清。

部分源码如下:


6. 键盘扫描。需要注意的是:1)键盘扫描同样要有延时,而且要有相当的时间,大约O.5秒吧。我在调试时发现。按着按钮不放,LED不会显示数字,等我放开按钮,LED才显示,不过数字已经加了很多了。有一个方法能解决这个问题,把LED显示那段代码复制到键盘延时的程序里面,这样按着按钮不放的时候,LED的数字就会逐一地按部就班累加上去。情况就容易控制得多了。

部分源码如下:


7. 1)当用户在按“时+”的按钮时,stk变量为O。在按“分+”时stk变量为1,这样当需要减小数字而按“一”按钮的时候。程序就能判断出对时或对分进行减操作了;2)注意进位与最大值问题,逢10进1,小时到24归O,分钟到59归0;3)输入完最后一组时间后。要再按一下“确定”按钮即“功能选择”按钮确认,这时,程序把当前的hs、hg、ms和mg数值存入对应数组。Stm状态变量+1;

部分源码如下:



4)按“启动”按钮时调用倒计数函数。对这个按钮的扫描最好写在主函数main里,这涉及到对函数的调用。(我曾经把它写在键盘扫描函数里,但是不起作用,写到主函数里就可以了。)

8.倒计时函数。1)在函数的最开头定义一个变量x,当作秒数,赋值60给x,每个循环X-1,当x为0,mg(分钟的个位)-1,如此循环。2)把h88[stm]等数组第一个数值赋值给hs等变量,然后不断减一。因为要让使用者看到机器在工作,所以我每0.5秒使小时与分钟之间的冒号闪动一次。3)中火、小火的占空比在这个函数里一起写了,因为委托者要求中火设定的占空比是45%(即60秒内有27秒为加热时间,其他时间空闲),同理小火占空比为30%(即60秒内有侣秒为加热时间,其余空闲)。非常简单,因为我们前面设定了x变量,只要判定x的数值,就很容易完成这个工作了。

部分源码如下:


在调试时,为方便安全以及直观考虑,用一只发光二极管代替了MOC可控硅光偶及后面的主可控硅电路,开始时发现发光二极管的亮度非常弱,而这只管子在零部件测试时发光是正常的,经反复检查,才发现问题是因为程序中没有给发光二极管足够的时间发光。这是个很低级的错误,却也很容易让人疏忽的。如果各位在其它制作中觉得数码管或发光二极管的亮度弱的时候,我想这也可能是原因之一吧,只有给它足够的延时时间,亮度就正常了。

使用前,最好先测定一下你的电饭煲在装有多少水和物料时,其达到水开的时间是多少分钟,这是与不同功率、不同容积、不同气温及不同水量有关的函数。只要测定一次就行了,以后就可按此时间设定你的从室温煮至水开的时间。



评论

技术专区