想用c语言写一个按键控制小灯闪烁的程序,就是按一下闪烁,再按就熄灭
想用记录按键次数来实现,即偶数次为闪烁,奇数次为熄灭。请问下面的程序错在哪里?怎么就是不行?voidmain(){while(1){if(k==0)//按键按下{dela...
想用记录按键次数来实现,即偶数次为闪烁,奇数次为熄灭。请问下面的程序错在哪里?怎么就是不行? void main()
{ while(1)
{ if(k==0) //按键按下
{ delay1ms(20);//延时
if(k==0&&n%2==0) //确定按键按下并且n为偶数(定义初始n为偶数)
{ ledflash(); //灯闪烁
n=n++;//n加1 }
else {
P0=0xff; //否则灯灭,n加1
n=n++;} } 展开
{ while(1)
{ if(k==0) //按键按下
{ delay1ms(20);//延时
if(k==0&&n%2==0) //确定按键按下并且n为偶数(定义初始n为偶数)
{ ledflash(); //灯闪烁
n=n++;//n加1 }
else {
P0=0xff; //否则灯灭,n加1
n=n++;} } 展开
2个回答
展开全部
具体是怎么个不行法。
像你这种按键程序
因为单片机速度非常快,在你按一下按键时,单片机已经循环了很多次程序。
因此这样就会导致,当你按下时,其实k一直==0 一直在执行动作。
所以这种按键需要判断按键是第一次按下(由弹起状态下按下)。而不是一直按着导致的动作。
方法:建一个变量保存上一次按键的值
char LastKey;
LastKey = 1;
while(1)
{
if(k == 0 && LastKey == 1) //按下,且上一次检测按键时是弹起状态
{ //这样才能保证每次按下时只执行一次,
//而不是一直在执行
Delay1ms(20);
if(k == 0) //确定是第一次按下,执行动作
{
if((n % 2) == 0)
{
LedFlash();
}
else
{
P0 = 0xFF;
}
n++;
}
}
LastKey = k; //保存按键状态
}
宿兴电子
2024-11-28 广告
2024-11-28 广告
联系我们一、有无震荡源 无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。 二、价格不同 有源蜂鸣器往比无源蜂鸣器贵,就是因为里面多个震荡...
点击进入详情页
本回答由宿兴电子提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询