A. 单片机51,出现按一次按键,得到多次按键的情况,怎么解决
单片机51,出现按一次按键,得到多次按键的情况,是由于没有做“消抖”处理的结果,在软件上做一些延时消抖处理后,一般就可以解决这个问题。比如:
keyscan()
{
if(key==0)//当按键按下
{
delay(10);//延时消抖
if(key==0)//如果按键任然按下
{
while(key==0);//等待按键抬起
.......
}
}
}
B. 51单片机这段代码怎么实现点击一下按键后蜂鸣器自己就一直响。
蜂鸣器分为两种 一种有源蜂鸣器 只需要给他一个高电平他就会一直响,还有着一种是无源的蜂鸣器,这就需要你给他一个脉冲就是指高低电平的互换,每互换一次就响一次
C. C语言写单片机程序 如何让操纵杆在某一个键一直按着的时候才能有用
提供思路,仅供参考
我觉得你这种情况,应该在程序里做一个自锁程序。流程如下:
1、声明一个按键状态变量key_status,并初始化为0
2、当按键按下并抬起时(此处应该做软件滤波),认为按键被触发,此时:
如果key_status==0, 就让key_status赋值为1
如果key_status==1, 就让key_status赋值为0
3、操纵杆作用七段数码管动作程序只有在key_status==1的时候执行,其他不动作
while(1)
{
...
if(key_status==1)
{
//执行操纵杆作用七段数码管动作程序
}
...
}
D. 单片机按键开关按下一直保持不动
1、首先设置一个状态变量,如flag,定义flag等于0为开状态,flag等于1为关状态。
2、其次因为是按键(不是开关),所以实际上单片机读取的应该是脉冲形式的输入。
3、最后设按键接单片机p01引脚,故可采用以下程序实现按键扫描。
E. 单片机如何实现用一个按键一直按下控制数码管数字连续加1
判断按键按着没放,就使数码管显示的数字连续加1就可以了,不过,加1次需适当延时几十毫秒
F. 51单片机中如何按下按键时数码管正常显示而不闪烁,并且实现长按连续
你好,我也遇到这样的问题,经过一周的研究,问之前的前辈得出结果,希望对你有帮助
char scan_k(char k)
{
int i=0;//定义一个变量用来累计长按的时间
if((KEY1&&KEY2&&KEY3&&KEY4&&KEY5&&KEY6)==0)//如果有按键按下
{
while(!KEY1)//如果按键1按下
{
xianshi(neirong);//执行显示
delay_ms(1);//延时
i++;//每次i自加1
if(i>=1000)
{
k=11;//按键1长按
}
else
{
k=1;//按键1短按
}
}
i=0;
while(!KEY2)//如果按键2按下
{
xianshi(neirong);//执行显示
delay_ms(1);//延时
i++;//每次i自加1
if(i>=1000)
{
k=21;//按键2长按
}
else
{
k=2;//按键2短按
}
}
i=0;//在下一个按键按下之前清空i的值
while(!KEY3)//如果按键3按下
{
xianshi(neirong);//执行显示
delay_ms(1);//延时
i++;//每次i自加1
if(i>=1000)
{
k=31;//按键3长按
}
else
{
k=3;//按键3短按
}
}
i=0;
while(!KEY4)//如果按键4按下
{
xianshi(neirong);//执行显示
delay_ms(1);//延时
i++;//每次i自加1
if(i>=1000)
{
k=41;//按键4长按
}
else
{
k=4;//按键4短按
}
}
i=0;
while(!KEY5)//如果按键5按下
{
xianshi(neirong);//执行显示
delay_ms(1);//延时
i++;//每次i自加1
if(i>=1000)
{
k=51;//按键5长按
}
else
{
k=5;//按键5短按
}
}
i=0;
while(!KEY6)//如果按键6按下
{
xianshi(neirong);//执行显示
delay_ms(1);//延时
i++;//每次i自加1
if(i>=1000)
{
k=61;//按键6长按
}
else
{
k=6;//按键6短按
}
}
i=0;
}
return k;//返回按键的值
}
以上代码,不带操作系统,不包含中断,请根据实际情况调整你想要的长按时间,按键按下的时候,如果你的消抖时间太长,数码管会有明显的闪烁或者变暗,请根据自己的需求进行调整
G. 单片机按键触发C程序
while(1)
{
if(keyflag==1) //有按下切出死循环
break;
else continue;
}
while(1)
{
..... //用户自己的程序
}
这种方法是模拟按键按下启动真正的应用程序,触发的是自己的功能程序短。从效果上来还是可以的