用 51 单片机 C 语言实现电磁炉功能
韩增值 tel:13282780310
用 51515151 单片机 CCCC 语言实现电磁炉功能
韩增值
2008 年 12 月 8 日
家里有一台电磁炉,用了三年多了,觉得质量不错,是“美的”牌的。大前天晚上吃晚
饭时看着桌上的电磁炉,突然想到厂家可能用的就是单片机来控制这个机器工作的(没把那
个电磁炉拆开过,不敢下定论)。我可以写一个单片机程序来实现它的功能,等以后这个电
磁炉退休后升级它。
这个电磁炉的型号是 MCEP201,功能不多,不过很实用。有火力调节、定时调节、炒
菜、火锅、煮粥、煲汤、蒸煮、炖奶。它的显示部分用的是发光二极管,用到了哪个功能就
点亮哪个发光二极管。
我写程序的重点为用 51 单片机 C 语言实现个控制系统。
编写程序时使用的目标板是“LY51-L2 单片机学习实验板”。针对这个电路板,先将它
的矩阵键盘的各个按键进行定义。
- 1 -
用 51 单片机 C 语言实现电磁炉功能
韩增值 tel:13282780310
运行 Keil C51 编程集成环境,书写程序代码。
603 addfun.c
295 Beep.c
548 Braise.c
597 conjee.c
共有 21 个 C 源程序文件,每个源程序对应一个功能实现。
2008/12/08 09:54
2008/12/07 18:49
2008/12/08 10:15
2008/12/08 08:57
2008/12/08 14:34
2008/12/08 10:50
2008/12/08 10:08
2008/12/08 11:06
2008/12/08 09:32
2008/12/08 09:53
2008/12/08 10:04
2008/12/08 08:27
2008/12/08 09:31
2008/12/08 14:35
2008/12/08 14:36
2008/12/07 18:42
2008/12/08 09:57
2008/12/08 14:06
2008/12/08 09:41
2008/12/07 09:40
2008/12/07 18:49
1,005 Displayled.c
857 externident.c
564 Food.c
544 Fry.c
591 Hoti.c
563 Hotmilk.c
566 Huoguo.c
603 Initial.c
485 Kaiguanji.c
2,929 KeyPad.c
959 main.c
444 Selfcheck.c
564 Soup.c
706 subfun.c
3,624 T0_int.c
117 T1_int.c
331 timewait.c
- 2 -
用 51 单片机 C 语言实现电磁炉功能
韩增值 tel:13282780310
各个 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;
if(Dingshi>=90)
Dingshi=90;
else Dingshi+=10;
Disbuf[5]=16;//显示 t
Disbuf[6]=Dingshi/10;
Disbuf[7]=Dingshi%10;
else
{
}
{
}
}
#include "externident.c"
//#include "externident2.c"
extern uint T0_count_max;
extern
extern bit T0using;//T0 使用标记
uchar T0_workfor;
void Beep(uint t)
{
while(T0using);
TH0=-1000/256;
TL0=-1000%256;
T0_workfor=1;
- 3 -
用 51 单片机 C 语言实现电磁炉功能
韩增值 tel:13282780310
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
extern uchar Dingshimin,Autot1,Autot2,Autot3;
uchar T0_workfor;
//显示缓存
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;
//显示缓存
- 4 -
用 51 单片机 C 语言实现电磁炉功能
韩增值 tel:13282780310
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)
{
p=0x06;break;
p=0x5b;break;
case 0:p=0x3f;break;
case 1:
case 2:
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;
- 5 -
用 51 单片机 C 语言实现电磁炉功能
韩增值 tel:13282780310
case 8: p=0x7f;break;
case 9: p=0x67;break;
case 10: p=0x77;break;
case 11: p=0x7c;break;
case 12: p=0x39;break;
case 13: p=0x5e;break;
case 14: p=0x79;break;
case 15: p=0x71;break;//显示 F
case 16: p=0x78;break;//显示 t
case 17: p=0x40;break;//显示-
case 20: p=0x00;break;//灭显
default:
break;
}
return(p);
}
void Displayled(void)//LED 显示函数
{
uchar i,tmp;
Digbit=0;
for(i=0;i<=7;i++)
{
DIGPORT=Digbit;
WORDPORT=getdiscode(Disbuf[i]);//显示字符
for(tmp=0;tmp<=50;tmp++);//延时
WORDPORT=0;//灭显
Digbit++;
}
}
//all the data for test
//easy for extern identifier
//这类文件不能对 uchar ,uint 变量进行包括,否则引起编译时的空间重复错误
//可以对 sbit 类的声明包括,因为所有的 sbit 声明在最后地址空间上是一致的
#include
#define uchar unsigned char
#define uint unsigned int
#define DIGPORT P1
#define WORDPORT P2
#define KEYBOARD P0
#define time1 2000 //T1 用于显示中断,2ms
sbit BSound=P3^4;
- 6 -
用 51 单片机 C 语言实现电磁炉功能
韩增值 tel:13282780310
extern void Initial();
extern void Beep(uint t);
extern void Selfcheck();
extern void Displayled();
extern void KeyPad();
extern void Kaiguanji();
extern void timewait(uint t);
extern void addfun();//+功能
extern void subfun();//-功能
extern void conjee();//煮粥的程序
extern void Hoti();
extern void Hotmilk();
extern void Soup();
extern void Huoguo();
extern void Food();
extern void Fry();
extern void Braise();
extern void Out();
//做饭
#include "externident.c"
extern uchar Autotime,fire1,fire2,fire3,fire4;
extern uchar Disbuf[8];
extern uchar Dingshi;
extern bit T0using;//T0 使用标记
extern
extern uchar Dingshimin,Autot1,Autot2,Autot3;
uchar T0_workfor;
//显示缓存
void Food(void)
{
TR0=0;
Dingshi=0;//定时清零
Disbuf[0]=5;//显示功能 2,热奶
Disbuf[4]=20;//清除定时显示
Disbuf[5]=20;
Disbuf[6]=20;
Disbuf[7]=20;
T0_workfor=4;
Dingshimin=0;
Autotime=28;
Autot1=15;
fire1=10;
Autot2=20;
- 7 -
用 51 单片机 C 语言实现电磁炉功能
韩增值 tel:13282780310
fire2=9;
Autot3=24;
fire3=8;
fire4=7;
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
extern uchar Dingshimin,Autot1,Autot2,Autot3;
uchar T0_workfor;
//显示缓存
void Fry(void)
{
TR0=0;
Dingshi=0;//定时清零
Disbuf[0]=6;
Disbuf[4]=20;//清除定时显示
Disbuf[5]=20;
Disbuf[6]=20;
Disbuf[7]=20;
T0_workfor=4;
Dingshimin=0;
Autotime=10;
Autot1=1;
fire1=5;
Autot2=5;
fire2=8;
Autot3=8;
fire3=10;
fire4=7;
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
extern uchar Dingshimin,Autot1,Autot2,Autot3;
uchar T0_workfor;
//显示缓存
- 8 -