新闻中心

EEPW首页>嵌入式系统>设计应用> 用51单片机做的小旋磁美容仪

用51单片机做的小旋磁美容仪

作者: 时间:2012-12-01 来源:网络 收藏

//以下为按键检测子程序
void key(void)
{
uchar num,num1=0;
uint a;
P1=0xfc;
num=P1;
if(num!=0xfc)
{ fmqbit=0; //检测按键有输入键值时使蜂鸣器鸣叫
if(openbit!=0)
{

for(a=17;a>0;a--)
{
display(time,hotled,xuanled);
}
}
else
{
for(a=200;a>0;a--)
{
duan=0xfe; //此处随便加入值
shila=0;
gela=0;
hotla=0;
xuanla=0;//打开四路数码管位显示控制
delay(1);
}
hotla=1;
shila=1;
gela=1;
xuanla=1;//关闭四路数码管位显示控制
}
P1=0xfc;
num=P1;
if(num!=0xfc)
{ P1=0xfe;
num=P1;
if(num!=0xfe)
{
switch(num)
{
case 0xfa: num1=7; break;//旋转减
case 0xf6: num1=5; break;//hot 减
case 0xee: num1=3; break;//时间减
case 0xde:
if(openbit!=0)
{
for(a=40;a>0;a--)
display(time,hotled,xuanled);
}
else
{
for(a=400;a>0;a--)
{
duan=0xfe; //此处随便加入值
hotla=0;
shila=0;
gela=0;
xuanla=0;//打开四路数码管位显示控制
delay(2);
}
hotla=1;
shila=1;
gela=1;
xuanla=1;//关闭四路数码管位显示控制
}
openbit=~openbit;//改变开关机标志位
default:break;
}

}
else
{
P1=0xfd;
num=P1;
switch(num)
{
case 0xf9: num1=6; break;
case 0xf5: num1=4; break;
case 0xed: num1=2; break;
default: break;
} }
if(openbit!=0)
bianlian(num1);//开机即可改变相关变量值,条件为开机后使能 }
} P1=0xfc;
}//以下为定时0中断程序,定时时间为50MS
void time0_int(void) interrupt 1
{
TH0=0x3c;
TL0=0xb0; //进入装初值
d++;
fmq=~fmq;
if(d%10==0)
xsd=~xsd;
if(d==1200)
{
d=0;
if(time!=0)
time--; //此处停机变量处理已OK了。
else
openbit=0;

}
}//以下为定时1中断程序,定时时间为1000US
void time1_int(void) interrupt 3
{
TH1=0xff;
TL1=0xe0;//进入装初值if(openbit!=0)
{

if(hot1)
{
hot1--;
if(hot1==0)
{
hotoff1=hotoff;
if(biaobit0!=0)
hotout=0;
else hotout=1;
}
}
if(hotoff1)
{
hotoff1--;
if(hotoff1==0)
{
hot1=hot;
if(biaobit1!=0)
hotout=1;
else hotout=0;
}
} if(xuan1)
{
xuan1--;
if(xuan1==0)
{
xuanoff1=xuanoff;
if(biaobit2!=0)
xuanout=0;
else xuanout=1;
}
}

if(xuanoff1)
{
xuanoff1--;
if(xuanoff1==0)
{
xuan1=xuan;
if(biaobit3!=0)
xuanout=1;
else xuanout=0;
}
}



}
}
void main(void)
{
P1=0xfc;
openbit=0;//使起始状态为停机等待状态
TMOD=0x11; //定义定时器工作模式
IP=0x08; //定时器1设置为最高中断级别
TH0=0x3c;
TL0=0xb0; //进入装初值
TH1=0xff;
TL1=0xe0;//进入装初值
ET0=1;
ET1=1;
EA=1; //定时中断至此全部打开开始运作。
while(1)
{
hotout=1;
xuanout=1;//将输出都置为0输出状态,待机状态 TR0=0;
TR1=0;//将返回的定时器全部关闭,避免不必要的误动作
duan=0xfe; //待机时显示的笔段控制
hotla=0;
shila=0;
gela=0;
xuanla=0;//打开四路数码管位显示控制
delay(1); //显示维持时间设定
hotla=1;
shila=1;
gela=1;
xuanla=1;//关闭四路数码管位显示控制

if(P1!=0xfc)
fmqbit=0;
else fmqbit=1; //对按键扫描进行检测,得出判断蜂鸣器的鸣叫结果。 key(); //按键检测函数调用
if(openbit!=0)
{

d=0; //秒钟计时值置0状态
TR0=1;
TR1=1;
hot=0;
hot1=hot;
hotoff=t-hot;
hotoff1=hotoff; //将热控制的初值给予设定 xuan=0;
xuan1=xuan;
xuanoff=t-xuan;
xuanoff1=xuanoff; //将旋转控制的初值给予设定 biaobit0=0;
biaobit1=1;
biaobit2=0;
biaobit3=1; hotled=0; //将热输出显示值及状态设置为0状态
xuanled=0; //旋转,效果同上 time=30; //时间初值设置为30分钟整
while(openbit!=0)
{
key(); //按键检测函数
if((time==0)(d>=1000))
{fmqbit=xsd;} //倒计至最后10秒时进行鸣叫
else
{
if(P1==0xfc)
fmqbit=1;
else fmqbit=0; //对按键扫描进行检测,得出判断蜂鸣器的鸣叫结果。
}
display(time,hotled,xuanled);//调用显示函数
}
}
}}
与hotandxuan10区别于bing1 和bing0两个变量取消,同时定时中断1的程序体全部加以代码优化,解决掉原程序执行过程中中断停留时间过长,影响数码管显示,闪烁的问题,同时处理掉按键在开至最高档时检测灵敏度下降问题.

蜂鸣器相关文章:蜂鸣器原理

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭