在做单片机按键控制流水灯,但是我做出来后是一直按才能循环,松开就不运行,我想达到按一下自己循环,再按一下就停止的那种,怎么用单片机C语言删改程序啊?
#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
sbit K1 = P3^2; //独立按键
void Delayms(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=100;j>0;j--);
}
void main()
{
uchar x;
uint i;
uchar temp;
while(K1==0)
{
temp=0x01;
for(i=0;i<8;i++)
{
P0=~temp;
Delayms(100);
temp<<=1;
}
}
}
#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
sbit K1 = P3^2; //独立按键
void Delayms(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=100;j>0;j--);
}
void main()
{
uchar x;
uint i;
uchar temp;
uint s=1; //新增一个值来记录按键值 ,初始化为1
while(1) //大的死循环一直扫描按键变化
{
if(K1==0)
{
Delayms(10); //按键去抖动
if(K1==0) s=0; //按键按下此时是键值s=0
}
while(s==0) //当按键第一次按下时进入循环点亮灯的循环
{
temp=0x01;
for(i=0;i<8;i++)
{
P0=~temp;
Delayms(100);
temp<<=1;
// if(K1==0) break; //增强反应速度,有按键按下立马跳出
}
if(K1==0) //当再次按下使键值s=1,将不符合点亮的死 { //循环,进入判断按键的死循环
Delayms(10);
if(K1==0) s=1;
}
}
}
}
一直循环,停不下来……
追答// if(K1==0) break; //增强反应速度,有按键按下立马跳出
把上面这句前面的注释删掉,可怎强反应速度。
出现在循环里跳不出来,是因为在你按按键的时候,程序还在流水灯的延迟中,单片识别反应慢,不信你一直按着很久不动他肯定能跳出来的。不加上面这句是每8xDelayms(100)时间检测一次按键,加上上面这句是每Delayms(100)检测一次。
这种按键检测缺点就是反应慢,用中断的话就爽多了!
不行,只能在电源接通后再按复位键走一次,然后就全息,什么按键也不好使,怎么都不亮
追答我的错把flag除以2改成对2取余,flag%2==0
本回答被网友采纳