|
下面是我的程序,请问这个是要接线么,我只有按下k2才有反应,其他按键都没有反应
#include"reg51.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit K1=P3^1;
sbit K2=P3^0;
sbit K3=P3^2;
sbit K4=P3^3;
sbit moto=P1^0;
u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //共阴数码管数字显示
void delay(u8 i)
{
while(i--);//延迟函数
}
void keypros()//按键处理函数
{
if(K2==0)// 将1档视为关档,2,3,4档才启动
{
delay(5000);//消除抖动
if(K2==0)//是否真的按下
{
P0=smgduan[1];//数码管显示数字
while(1)
{
moto=1;//电机开动
delay(10);//用延时函数产生pwm波
moto=0;//电机关闭
delay(10);
if(K1==0||K3==0||K4==0)//当有其他按键按下
break;//跳出循环
}
}
while(K2!=0);//按键不松开,则会陷入死循环,直到按键松开
}
if(K1==0)
{
delay(5000);
if(K1==0)
{
P0=smgduan[0];
moto=0;//电机关闭
}
while(!K1);
}
if(K3==0)//将1档视为关档,2,3,4档才启动
{
delay(5000);//消除抖动
if(K3==0)//是否真的按下
{
P0=smgduan[2];//数码管显示数字
while(1)
{
moto=1;//电机开动
delay(20);//用延时函数产生pwm波
moto=0;//电机关闭
delay(20);
if(K1==0||K2==0||K4==0)//当有其他按键按下
break;//跳出循环
}
}
while(K3!=0);
//按键不松开,则会陷入死循环,直到按键松开
}
if(K4==0)//将1档视为关档,2,3,4档才启动
{
delay(5000);//消除抖动
if(K4==0)//是否真的按下
{
P0=smgduan[3];//数码管显示数字
while(1)
{
moto=1;//电机开动
delay(30);//用延时函数产生pwm波
moto=0;//电机关闭
delay(30);
if(K1==0||K3==0||K2==0)//当有其他按键按下
break;//跳出循环
}
}
while(K4!=0);
{
}//按键不松开,则会陷入死循环,直到按键松开
}
}
void main()
{
moto=0;//电机初始化
P0=smgduan[0];
while(1)
{
keypros(); //函数调用
}
} |
|