用 51 单片机 C 语言实现电磁炉功能 韩增值 tel:13282780310
- 1 -
用 51
51
51
51 单片机 C
C
C
C 语言实现电磁炉功能
韩增值
2008 年 12 月 8 日
家里有一台电磁炉,用了三年多了,觉得质量不错,是 “ 美的
”
牌的。大前天晚上吃 晚
饭时看着桌上的电磁炉, 突然想到厂家可能用的就是单片机来控制这个机器工作的 (没把 那
个电磁炉拆开过,不敢下定论) 。我可以写一个单片机程序来实现它的功能,等以后这个电
磁炉退休后升级它。
这个电磁炉的型号是 MCEP201 ,功能不多,不过很实用。有火力调节、定时调节、炒
菜、火锅、煮粥、煲汤、蒸煮、炖奶。它的显示部分用的是发光二极管,用到了哪个功能 就
点亮哪个发光二极管。
我写程序的重点为用 51 单片机 C 语言实现个控制系统。
编写程序时使用的目标板是 “ LY51-L2 单片机学习实验板
”
。针对这个电路板,先将它
的矩阵键盘的各个按键进行定义。
用 51 单片机 C 语言实现电磁炉功能 韩增值 tel:13282780310
- 2 -
运行 Keil C51 编程集成环境,书写程序代码。
共有 21 个 C 源程序文件,每个源程序对应一个功能实现。
2008/12/08 09:54 603 addfun.c
2008/12/07 18:49 295 Beep.c
2008/12/08 10:15 548 Braise.c
2008/12/08 08:57 597 conjee.c
2008/12/08 14:34 1,005 Displayled.c
2008/12/08 10:50 857 externident.c
2008/12/08 10:08 564 Food.c
2008/12/08 11:06 544 Fry.c
2008/12/08 09:32 591 Hoti.c
2008/12/08 09:53 563 Hotmilk.c
2008/12/08 10:04 566 Huoguo.c
2008/12/08 08:27 603 Initial.c
2008/12/08 09:31 485 Kaiguanji.c
2008/12/08 14:35 2,929 KeyPad.c
2008/12/08 14:36 959 main.c
2008/12/07 18:42 444 Selfcheck.c
2008/12/08 09:57 564 Soup.c
2008/12/08 14:06 706 subfun.c
2008/12/08 09:41 3,624 T0_int.c
2008/12/07 09:40 117 T1_int.c
2008/12/07 18:49 331 timewait.c
用 51 单片机 C 语言实现电磁炉功能 韩增值 tel:13282780310
- 3 -
各个 C 源文件的内容如下。
#include "externident.c"
extern bit fireortime;//0 火力或 1 定时
extern bit KGflag;//1 开 0 关机标记
extern uchar Huoli; // 火力标记
extern uchar Dingshi; // 事件工作时间定时
extern uchar Disbuf[8];
void addfun(void)
{
if(KGflag==1)// 开机状态下
{
if(fireortime==0)
{ if(++Huoli>10)
Huoli=10;
Disbuf[0]=20;//not display
Disbuf[1]=15;
Disbuf[2]=Huoli/10;
Disbuf[3]=Huoli%10;
}
else
{ if(Dingshi>=90)
Dingshi=90;
else Dingshi+=10;
Disbuf[5]=16;// 显示 t
Disbuf[6]=Dingshi/10;
Disbuf[7]=Dingshi%10;
}
}
}
#include "externident.c"
//#include "externident2.c"
extern uint T0_count_max;
extern uchar T0_workfor;
extern bit T0using;//T0 使用标记
void Beep(uint t)
{
while(T0using);
TH0=-1000/256;
TL0=-1000%256;
T0_workfor=1;
用 51 单片机 C 语言实现电磁炉功能 韩增值 tel:13282780310
- 4 -
T0_count_max=t;
TR0=1;
T0using=1;
BSound=0;
}
// 蒸
#include "externident.c"
extern uchar Autotime,fire1,fire2,fire3,fire4;
extern uchar Disbuf[8]; // 显示缓存
extern uchar Dingshi;
extern bit T0using;//T0 使用标记
extern uchar T0_workfor;
extern uchar Dingshimin,Autot1,Autot2,Autot3;
void Braise(void)
{
TR0=0;
Dingshi=0;// 定时清零
Disbuf[0]=9;
Disbuf[4]=20;// 清除定时显示
Disbuf[5]=20;
Disbuf[6]=20;
Disbuf[7]=20;
T0_workfor=4;
Dingshimin=0;
Autotime=28;
Autot1=20;
fire1=10;
Autot2=25;
fire2=9;
Autot3=28;
fire3=7;
fire4=4;
T0using=1;
TR0=1;
}// 煮粥的程序
#include "externident.c"
extern uchar Autotime,fire1,fire2,fire3,fire4;
extern uchar Disbuf[8]; // 显示缓存
extern uchar Dingshi;
extern bit T0using;//T0 使用标记
extern uchar T0_workfor;
用 51 单片机 C 语言实现电磁炉功能 韩增值 tel:13282780310
- 5 -
extern uchar Dingshimin,Autot1,Autot2,Autot3;
void conjee(void)
{
TR0=0;
Dingshi=0;// 定时清零
Disbuf[0]=1;// 显示功能 1, 煮粥
Disbuf[4]=20;// 清除定时显示
Disbuf[5]=20;
Disbuf[6]=20;
Disbuf[7]=20;
T0_workfor=4;// 煮粥用
Dingshimin=0;
Autotime=30;// 煮粥 30 分钟
Autot1=10;
Autot2=20;
Autot3=26;
fire1=10;
fire2=10;
fire3=9;
fire4=8;
T0using=1;
TR0=1;
}
#include "externident.c"
//#include "externident2.c"
extern uchar Digbit; // 显示位选
extern uchar Disbuf[8]; // 显示缓存
uchar getdiscode(uchar i)// 获得共阳段选码
{
uchar p;
switch(i)
{
case 0:p=0x3f;break;
case 1: p=0x06;break;
case 2: p=0x5b;break;
case 3: p=0x4f;break;
case 4: p=0x66;break;
case 5: p=0x6d;break;
case 6: p=0x7d;break;
case 7: p=0x07;break;
评论1