📄 key.c
字号:
#include<reg51.h>
#include<key.h>
#include<led.h>
#include<start.h>
void count(unsigned char x,unsigned char y) //x代表对那个变量的修改,y是数字的值
{
if(x==1)
{
if(czhengbujin>99) return;//已经设置完三位数字
czhengbujin=czhengbujin*10+y;
if(czhengbujin==0) return;
a++;
show(a,b,c,d);
}
else if(x==2)
{
if(cfanbujin>99) return;
cfanbujin=cfanbujin*10+y;
if(cfanbujin==0) return;
b++;
show(a,b,c,d);
}
else if(x==3)
{
if(czhengjuli>9) return;
czhengjuli=czhengjuli*10+y;
c++;
if(czhengjuli==0) return;
show(a,b,c,d);
}
else if(x==4)
{
if(cfanjuli>9) return;
cfanjuli=cfanjuli*10+y;
if(cfanjuli==0) return;
d++;
show(a,b,c,d);
}
else if(x==5)
{
if(csudu>0) return;
csudu=y;
if(csudu==0) return;
show(a,b,c,d);
}
}
void suduset(void)
{
unsigned char keyword9;
unsigned char start=0;
P3_6=0;
while(1)
{
keyword9 =keyin();
switch(keyword9)
{
case 0x41: count(5,1);break;
case 0x21: count(5,2);break;
case 0x11: count(5,3);break;
case 0x82: count(5,4);break;//数字的设置
case 0x42: count(5,5);break;
case 0x22: count(5,6);break;
case 0x12: count(5,7);break;
case 0x84: count(5,8);break;
case 0x44: count(5,9);break;
case 0x18: start=1; break;
default:break;
}
if(start==1) break;
}
startset();
}
void delay(void) //去抖处理延迟
{
unsigned int i;
for(i=12500;i>0;i--);
}
unsigned char keyscan(void) //按键扫描
{
unsigned char b,c,d,m;
do
{
for(c=0;c<=3;c++)
{
if(c==0)
{
P1=0xef;
}
else if(c==1)
{
P1=0xdf;
}
else if(c==2)
{
P1=0xbf;
}
else if(c==3)
{
P1=0x7f;
}
m=P1;
d=~(m)&0x0f;
b=~(m)&0xff;
if(d!=0) return(b);
}
}
while(d==0);
}
unsigned char keyin(void) //扫描确定那个键按下,做了按键去抖处理
{
unsigned char t;
do
{
t=keyscan();
delay();
}
while(t!=keyscan());
return t;
}
void first(void)
{
unsigned char keyword1;
keyword1 =keyin();
switch(keyword1)
{
case 0x24:second_0(); break; //正转步数
case 0x14:second_1(); break; //反转步数
case 0x88:second_2(); break; //正转距离
case 0x48:second_3(); break; //反转距离
default:break;
}
}
void second_0(void) //正转步数设置
{
unsigned char keyword2=0; //获得按键信息
unsigned char fanzhuanbegin=0;//按下反转设置键标志位
unsigned char sudu=0; //按下速度键标志位
P3_2=0;
if(fanbujin==0)//在此之前并未设置反转
{
zhengbujin=1;//设置正传优先标志位
while(1)
{
keyword2 =keyin();
switch(keyword2)
{
case 0x81: count(1,0);break;
case 0x41: count(1,1);break;
case 0x21: count(1,2);break;
case 0x11: count(1,3);break;
case 0x82: count(1,4);break;//数字的设置
case 0x42: count(1,5);break;
case 0x22: count(1,6);break;
case 0x12: count(1,7);break;
case 0x84: count(1,8);break;
case 0x44: count(1,9);break;
case 0x14: fanzhuanbegin=1; break; //反转步数
case 0x28: sudu=1;break; //只进行正转设置,开始设置速度
default:break;
}
if (sudu==1||fanzhuanbegin==1) break;
}
if (fanzhuanbegin==1) second_1();
else if(sudu==1) suduset();
}
else if(fanbujin==1) //已经设置好反转了,先在开始设置正传
{
while(1)
{
keyword2 =keyin();
switch(keyword2)
{
case 0x81: count(1,0);break;
case 0x41: count(1,1);break;
case 0x21: count(1,2);break;
case 0x11: count(1,3);break;
case 0x82: count(1,4);break;
case 0x42: count(1,5);break; //数字设置
case 0x22: count(1,6);break;
case 0x12: count(1,7);break;
case 0x84: count(1,8);break;
case 0x44: count(1,9);break;
case 0x28: sudu=1;break; //正反都以设置完成,设置速度
default:break;
}
if (sudu==1) break;
}
suduset();
}
}
///////////////////////////////////////////////////////////////////////////
void second_1(void)//反转步数设置
{
unsigned char keyword3; //获得按键信息
unsigned char zhengzhuanbegin=0;//按下正转设置键标志位
unsigned char sudu=0; //按下速度键标志位
P3_3=0;
if(zhengbujin==0)//先进行的是反转的设置
{
fanbujin=1;//设置反传优先标志位
while(1)
{
keyword3 =keyin();
switch(keyword3)
{
case 0x81: count(2,0);break;
case 0x41: count(2,1);break;
case 0x21: count(2,2);break;
case 0x11: count(2,3);break;
case 0x82: count(2,4);break;//数字的设置
case 0x42: count(2,5);break;
case 0x22: count(2,6);break;
case 0x12: count(2,7);break;
case 0x84: count(2,8);break;
case 0x44: count(2,9);break;
case 0x24: zhengzhuanbegin=1; break; //正转步数
case 0x28: sudu=1;break; //只进行反转设置,开始设置速度
default:break;
}
if (sudu==1) break;
else if(zhengzhuanbegin==1) break;
}
if (zhengzhuanbegin==1) second_0();
else if(sudu==1) suduset();
}
else if(zhengbujin==1) //已经设置好正转了,正转优先进行
{
while(1)
{
keyword3=keyin();
switch(keyword3)
{
case 0x81: count(2,0);break;
case 0x41: count(2,1);break;
case 0x21: count(2,2);break;
case 0x11: count(2,3);break;
case 0x82: count(2,4);break;
case 0x42: count(2,5);break; //数字设置
case 0x22: count(2,6);break;
case 0x12: count(2,7);break;
case 0x84: count(2,8);break;
case 0x44: count(2,9);break;
case 0x28: sudu=1;break; //正反都以设置完成,设置速度
default:break;
}
if (sudu==1) break;
}
suduset();
}
}
////////////////////////////////////////////////////////////////////////////////////////
void second_2(void)//正转距离设置
{
unsigned char keyword4; //获得按键信息
unsigned char fanzhuanbegin=0;//按下反转设置键标志位
unsigned char sudu=0; //按下速度键标志位
P3_4=0;
if(fanjuli==0)//先进行的是正转的设置
{
zhengjuli=1;//设置正传优先标志位
while(1)
{
keyword4 =keyin();
switch(keyword4)
{
case 0x81: count(3,0);break;
case 0x41: count(3,1);break;
case 0x21: count(3,2);break;
case 0x11: count(3,3);break;
case 0x82: count(3,4);break;//数字的设置
case 0x42: count(3,5);break;
case 0x22: count(3,6);break;
case 0x12: count(3,7);break;
case 0x84: count(3,8);break;
case 0x44: count(3,9);break;
case 0x48: fanzhuanbegin=1; break; //反转设置键
case 0x28: sudu=1;break; //只进行正转设置,开始设置速度
default:break;
}
if (sudu==1) break;
else if(fanzhuanbegin==1) break;
}
if (fanzhuanbegin==1) second_3();
else if(sudu==1) suduset();
}
else if(fanjuli==1) //已经设置好反转了,反转优先进行
{
while(1)
{
keyword4 =keyin();
switch(keyword4)
{
case 0x81: count(3,0);break;
case 0x41: count(3,1);break;
case 0x21: count(3,2);break;
case 0x11: count(3,3);break;
case 0x82: count(3,4);break;
case 0x42: count(3,5);break; //数字设置
case 0x22: count(3,6);break;
case 0x12: count(3,7);break;
case 0x84: count(3,8);break;
case 0x44: count(3,9);break;
case 0x28: sudu=1;break; //正反都以设置完成,设置速度
default:break;
}
if (sudu==1) break;
}
suduset();
}
}
////////////////////////////////////////////////////////////////////////////////////////
void second_3(void) //反转距离设置
{
unsigned char keyword5; //获得按键信息
unsigned char zhengzhuanbegin=0;//按下反转设置键标志位
unsigned char sudu=0; //按下速度键标志位
P3_5=0;
if(zhengjuli==0)//先进行的是反转的设置
{
fanjuli=1;//设置反传优先标志位
while(1)
{
keyword5 =keyin();
switch(keyword5)
{
case 0x81: count(4,0);break;
case 0x41: count(4,1);break;
case 0x21: count(4,2);break;
case 0x11: count(4,3);break;
case 0x82: count(4,4);break;//数字的设置
case 0x42: count(4,5);break;
case 0x22: count(4,6);break;
case 0x12: count(4,7);break;
case 0x84: count(4,8);break;
case 0x44: count(4,9);break;
case 0x88: zhengzhuanbegin=1; break; //反转设置键
case 0x28: sudu=1;break; //只进行正转设置,开始设置速度
default:break;
}
if (sudu==1) break;
else if(zhengzhuanbegin==1) break;
}
if (zhengzhuanbegin==1) second_2();
else if(sudu==1) suduset();
}
else if(zhengjuli==1) //已经设置好正转了,正转优先进行
{
while(1)
{
keyword5 =keyin();
switch(keyword5)
{
case 0x81: count(4,0);break;
case 0x41: count(4,1);break;
case 0x21: count(4,2);break;
case 0x11: count(4,3);break;
case 0x82: count(4,4);break;
case 0x42: count(4,5);break; //数字设置
case 0x22: count(4,6);break;
case 0x12: count(4,7);break;
case 0x84: count(4,8);break;
case 0x44: count(4,9);break;
case 0x28: sudu=1;break; //正反都以设置完成,设置速度
default:break;
}
if (sudu==1) break;
}
suduset();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -