?功能描述:按下开关键s4(外部中断0)可以实现控制直流电机转动,按键s5(外部中断1)改变风速(利用PWM控制直流电机转动速度)
1、P1.4和P1.5使能端分别控制一个直流电机可转或不可转
2、P1.4、P1.2和P1.3共同控制一个直流电机,两者值分别为1、0或0、1时,直流电机转动,方向可变。
3、P1.5、P1.6和P1.7同上。
main.c?
#include <reg52.h>
//按键s4(外部中断0)作为开关,按键s5(外部中断1)作为换挡的功能
unsigned int n=0,m=1;
unsigned int flag=0;
unsigned int F[3]={90,65,1};//不同的占空比对应不同转速
void time0() interrupt 1 //利用PWM调整直流电机速度
{
if(flag!=0)
{
n++;
if(n==F[flag-1])
{
P1|=1<<5;//使能端置一
P1&=~(1<<6);//P1位6置0
P1|=1<<7;//位7置1
}
else if(n==100)
{
P1 &=~(1<<5);
n=0;
}
}
}
void Switch() interrupt 0 //外部中断0,按键s4用作开关
{
m=!m;
if(m==0) //开
{
flag=1;
m=0;
}
else if(m==1) //关
{
flag=0;
P1&=~(1<<5);
}
}
//切换挡数s5,共三档
void change() interrupt 2 //外部中断1
{
if(m==0)//开状态下可换挡数
{
flag++;
if(flag==4)
{
flag=1;
}
}
}
void main()
{
IT0=1;//中断触发方式为下降沿触发,若IT0=0,则触发方式为低电平触发
EX0=1;//打开外部中断0
EA=1;//打开总中断
IT1=1;//中断触发方式为下降沿触发 //切换挡数
EX1=1;//打开外部中断1
EA=1;//打开总中断
TMOD=0x02;//定时器0工作模式2
EA=1;
ET0=1;//允许T0中断
TH0=156;
TL0=156;
TR0=1;//开启定时器0
while(1)
{}
}
|