#include <reg52.h>
sbit onn=P1^0;
sbit seet=P1^1;
sbit addd=P1^2;
sbit subb=P1^3;
sbit gass=P1^4;
sbit breakk=P1^5;
sbit IN1=P1^6;
sbit IN2=P1^7;
sbit ENA=P2^0;
//占空比,最大占空比
unsigned char ZKB,high=0,on=0,set=0,add=0,sub=0,sc=0,duty_zkb=0,ZKBB=0,cnt=0;
void Motor_Auto_add();
void Time0_Init(void);
void key_process(unsigned char key_num);
void key_scan();
void Time0_Init(void)
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=ET0=1;
TR0=1;
}
void main()
{ IN1=1;
IN2=0;
Motor_Auto_add();
Time0_Init();
//key_process(unsigned char key_num);
while(1)
{
key_scan();
}
}
//按键扫描
void key_scan()
{
int i=0;
//开始建,自增速
if(onn==0)
for(i=0;i<200;i++);
if(onn==0)
{
on=1;//开始标志
while(onn==1);
}
if(seet==0)
for(i=0;i<200;i++);
if(seet==0)
{
set=1;//巡航开始标志
duty_zkb=high;//将当前占空比保留
while(seet==1);
}
if(addd==0)
for(i=0;i<200;i++);
if(addd==0)
{
add=1;//加速键标志位
while(addd==1);
}
if(subb==0)
for(i=0;i<200;i++);
if(subb==0)
{
sub=1;//减速标志位
while(subb==1);
}
}
//终端按键扫描执行程序
void key_process(unsigned char key_num)
{
switch(key_num)
{
case 1:
high=0;
set=0;
break;
case 2:
high=0;
set=0;
break;
default:
break;
}
}
//电机调速
void Motor_Auto_add()
{
if(on==1)
{
high++;
high%=100;
}
//else
//{
//ZKB=0;
//}
if(set==1)
{
high=duty_zkb;
}
else if(set==0)
{high=0;}
if(set==1&&add==1)
{
high=high+1;
if(high==100)
add=0;
}
if(set==1&&sub==1)
{
high=high-1;
if(high<0)
sub=0;
}
}
//中断优先
void int0_srv() interrupt 0
{int i=0;
for(i=0;i<200;i++);
if(breakk==0)
{
key_process(1);
while(breakk==1);
}
else if(gass==0)
{
key_process(2);
while(gass==1);
}
}
void time0_srv() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++;
cnt%=100;
if(cnt<high)
{
ENA=1;
}
else
{
ENA=0;
}
}
我想实现按键控制电机转速,当按键按下时可以保持当前车速,再有按键按下时实现加速或者减速,为什么我的程序控制不了啊???? |