标题:
帮我看看这个按键程序怎么改进
[打印本页]
作者:
cyy998
时间:
2016-7-4 19:04
标题:
帮我看看这个按键程序怎么改进
自己做的一个小项目里的一个按键处理程序,按键只有3个,想实现的功能是:
key1:“设置/确认”复合键,
key2:“加/连加”,
key3:“减/连减”。
由于是初学,不懂什么高级语法,只会比较直观的,程序也基本可以实现想要的功能,但写出来的代码看着比较繁琐,3个按键写出来一堆代码看着很不爽,特把代码发上来看看能不能改简单一点?
下面是代码,其中time定时器溢出标志位,设置为50毫秒溢出。请大神帮忙看看呗,在此先行谢过了。
void key_self()
{
uchar kum;
if(key1!=1) //按键1被接下
{
delayMS(10); //延时10毫秒
if(key1!=1) //再次确认按键1被按下
{
delayMS(10); //延时10毫秒
while(!key1); //检测按键是否弹起
JK=1; //继电器释放
kum=1; //按键标志位置1
time=0; //time清零
}
}
while(kum==1) //当按键1标志位置1时进入循环
{
while(key1!=0 & key2!=0 & key3!=0) //当按键都没有被按下时进入循环
{
P2=0xff;
if(time>=5)
{
display(num); //闪烁显示num的值
if(time>=10)
{
time=0;
P2=0xff;
}
}
}
if(key1!=1) //按键1被接下
{
delayMS(10); //延时10毫秒
if(key1!=1) //再次确认按键1被按下
{
delayMS(10); //延时10毫秒
while(!key1); //检测按键是否弹起
SectorErase(0x2000); //擦除EEPROM数据。
byte_write(0x2000,num); //把num的值写入EEPROM。
t=1; //待机标志位置1
kum=0; //按键1标志位清零,为下次进入做准备
}
}
//===========================按键+处理================================//
if(key2!=1) //按键2被接下
{
delayMS(10); //延时10毫秒
if(key2!=1) //再次确认按键2被按下
{
delayMS(10); //延时10毫秒
if(key2!=1)
{
time=0; //time清零
while(!key2) //检测按键是否弹起
{
display(num); //显示num的值
if(time>=10) //延时500毫秒
{
time=0; //time清零
while(!key2) //检测按键是否弹起
{
if(time>=4) //延时200毫秒
{
num++; //按住不放连加
if(num>99)num=1; //当num大于99时给num置最小值
time=0; //time清零
}
display(num); //显示num的值
}
}
}
}
}
num++; //按键点按num加1
if(num>99)num=1; //当num大于99时给num置最小值
}
//===========================按键-处理================================//
if(key3!=1) //按键3被接下
{
delayMS(10); //延时10毫秒
if(key3!=1) //再次确认按键3被按下
{
delayMS(10); //延时10毫秒
if(key3!=1)
{
time=0; //time清零
while(!key3) //检测按键是否弹起
{
display(num); //显示num的值
if(time>=10) //延时500毫秒
{
time=0; //time清零
while(!key3) //检测按键是否弹起
{
if(time>=4) //延时200毫秒
{
num--; //按住不放连减
if(num<1)num=99; //当num小于1时给num置最大值
time=0; //time清零
}
display(num); //显示num的值
}
}
}
}
}
num--; //按键点按num减1
if(num<1)num=99; //当num小于1时给num置最大值
}
}
}
复制代码
作者:
zl2168
时间:
2016-7-5 11:40
本帖最后由 zl2168 于 2016-7-5 11:43 编辑
本案例按键部分功能符合你的要求,供参考。
直流电机正反转及
PWM
调速
按下
Kp
,电机正转(顺时针);按下
Kn
,电机反转(逆时针)。两位数码管显示
PWM
脉冲波占空比,初始值为
70
(脉冲高电平占比
70%
)。按一次加速键
up
,占空比加
1
;按住不放,快速加
1
;最大值
100
(显示
00
)。按一次减速键
up
,占空比减
1
;按住不放,快速减
1
;最小值
20
。
先
Proteus
仿真一下,确认有效。
实例100 直流电机正反转及调速.rar
(44.12 KB, 下载次数: 7)
2016-7-5 11:42 上传
点击文件名下载附件
直流电机正反转及PWM调速.jpg
(302.26 KB, 下载次数: 76)
下载附件
2016-7-5 11:43 上传
以上摘自张志良编著《单片机实验实训
100
例》
ISBN 978-7-5124-1603-1
,北航社出版
书中电路和程序设计有详细说明,程序语句条条有注解。
作者:
电子发烧友。
时间:
2016-7-5 16:34
我就看看 不说话。
作者:
zl2168
时间:
2016-7-5 19:24
电子发烧友。 发表于 2016-7-5 16:34
我就看看 不说话。
已经说了“我就看看 不说话。”
作者:
32323232
时间:
2016-7-7 10:22
没看懂 按下1不应该是k1=1吗?为什么用不等于1呢
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1