51单片机微波炉c语言程序,基于51单片机的微波炉控制C源程序.doc

该程序实现了一个微控制器系统,用于读取按键输入并动态显示在LED上。系统包括电源键和数字键,可以设置定时器进行定时。按键扫描功能检测到按键按下并更新变量,LED显示函数根据变量值动态更新显示内容。定时器中断服务程序用于计时和更新显示状态。主函数中处理按键输入和显示逻辑,并在电源键被按下时关闭电源并清除显示。
摘要由CSDN通过智能技术生成

#include #define GET_KEY P1

#define GET_LED P0

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

unsigned char code DIG_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //“-”的段码是0x40

unsigned char flag=0,power=0; //flag 数字键加1; power表示电源键是否按下

unsigned char Keyvalue,Keystate;

unsigned char fenh,fenl,miaoh,miaol,huo;

void delay(unsigned int u)

{ unsigned char i;

for(;u>0;u--)

for(i=50;i>0;i--);

}

void Key_Scan()

{ GET_KEY=0x0f;

if(GET_KEY!=0x0f)

{ delay(15);

if(GET_KEY!=0x0f)

{ Keystate=1; //有键按下

GET_KEY=0x0f; //测试列

switch(GET_KEY)

{

case(0X07):Keyvalue=0;break;

case(0X0b):Keyvalue=4;break;

case(0X0d): Keyvalue=8;break;

case(0X0e):Keyvalue=12;break;

}

GET_KEY=0xf0; //测试行

switch(GET_KEY)

{

case(0X70):Keyvalue=Keyvalue+3;break;

case(0Xb0):Keyvalue=Keyvalue+2;break;

case(0Xd0): Keyvalue=Keyvalue+1;break;

case(0Xe0):Keyvalue=Keyvalue;break;

}

while(GET_KEY!=0xf0); //松手检测

if(Keyvalue==0x0f)

power++;

else flag++;

}

}

}

void init_t0()

{TH0=(65536-20000)/256;

TL0=(65536-20000)%256; //定时20ms

EA=1;

ET0=1;

TMOD=0x01;

}

void display1() //LED动态显示函数

{ unsigned char i;

for(i=0;i<8;i++)

{ switch(i)

{ case 0: LSC=0;LSB=0;LSA=0;GET_LED=DIG_CODE[fenh];break;

case 1: LSC=0;LSB=0;LSA=1;GET_LED=DIG_CODE[fenl];break;

case 2: LSC=0;LSB=1;LSA=0;GET_LED=0x40;break;

case 3: LSC=0;LSB=1;LSA=1;GET_LED=0x40;break;

case 4: LSC=1;LSB=0;LSA=0;GET_LED=DIG_CODE[miaoh];break;

case 5: LSC=1;LSB=0;LSA=1;GET_LED=DIG_CODE[miaol];break;

case 6: LSC=1;LSB=1;LSA=0;GET_LED=DIG_CODE[1];break;

case 7: LSC=1;LSB=1;LSA=1;GET_LED=DIG_CODE[huo];break;

}

delay(1);

GET_LED=0x00;

}

}

void display2()

{ unsigned char i;

for(i=0;i<8;i++)

{ switch(i)

{ case 0: LSC=0;LSB=0;LSA=0;break;

case 1: LSC=0;LSB=0;LSA=1;break;

case 2: LSC=0;LSB=1;LSA=0;break;

case 3: LSC=0;LSB=1;LSA=1;break;

case 4: LSC=1;LSB=0;LSA=0;break;

case 5: LSC=1;LSB=0;LSA=1;break;

case 6: LSC=1;LSB=1;LSA=0;break;

case 7: LSC=1;LSB=1;LSA=1;break;

}

GET_LED=0x00;

delay(1);

}

}

void main()

{unsigned char temp;

Keystate=0;

init_t0();

TR0=0;//定时器初始化

while(1)

{ Key_Scan();

temp=Keyvalue;

if(Keystate==1) //有键按下

{ if(temp==0x0f)

{

if(power==1)

{ huo=0;

fenh=0;

fenl=0;

miaoh=0;

miaol=0;

} //电源打开

if(power==2)

{

power=0;

} //电源关掉

}

if(flag==1)

{

if(temp>=0&&temp<=5)

fenh=temp;

else flag--;

}

if(flag==2)

{

if(temp>=0&&temp<=9)

fenl=temp;

else flag--;

}

if(flag==3)

{

if(temp>=0&&temp<=5)

miaoh=temp;

else flag--;

}

if(flag==4)

{

if(temp>=0&&temp<=9)

miaol=temp;

else flag--;

}

if(flag==5)

{

if(temp>=0x0a&&temp<=0x0c)

{

huo=temp;

TR0=1;

flag=0;

// 先输入定时时间,然后按火候键开始定时

}

else flag--;

}

}

// 开始显示

if(power==1) display1();

if(power==0) display2();//电源关闭,灯灭,重新开始输入、定时

}

}

void timer0() interrupt 1

{ static unsigned char count=0;

TH0=(65536-20000)/256;

TL0=(65536-20000)%256;

count++;

if(count==50) //1ms定时到

{miaol--;

count=0;

}

if(miaol==0xff)

{ miaoh--;

miaol=9;

}

if(miaoh==0xff)

{ fenl--;

miaoh=5;

}

if(fenl==0xff)

{ fenh--;

fenl=9;

}

if(fenh==0xff)

{ TR0=0;

fenh=0;

fenl=0;

miaoh=0;

miaol=0;

power=0; //定时时间到,关电源

}

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值