各位大哥帮帮忙看看哪里不对
sbit SW=P3^0;
void Delay()
{
unsigned char i,j;
for(i=0;i<177;i++)
for(j=0;j<177;j++);
}
void main()
{
unsigned char temp,i;
P1=0xff;
while(1)
{
temp=0x01;
for(i=0;i<8;i++)
{
if(SW==0)
{
P1=~temp;
Delay();
temp=temp<<1;
}
}
}
}
在流水灯设置一个开关控制的,不知道怎么运行都不行 大家帮帮忙我。
好久不写51了原理就是我说的这些,给你写个大概你试试可能有错误
char flag = 0;//bit 可以定义的话可以用bit
while(1)
{
if(flag == 0) //start/stop 标志位
{
P1 = ~temp;
Delay();
temp = temp<<1;
}
//我不确定这个移位动作是否是循环的所以我加一下判断
if(temp == 0x80)
{
temp = 0x01;
}
//按键消抖,可以网上找找
if(sw == 按下)
{
delay_us(10);
if(sw == 按下)
{
flag =(~flag)&0x01;
}
}
}
这个应该就可以了,我也没试过,你可以试一下
这个是什么功能呢?是按完按键后流水灯自行跑还是每按一次按键切换一次流水灯?
愚人之见:
此软件无论按多少下按键,流水灯也不会跑起来;
问题点:“while”循环第一步就是“temp=0x01;”,那么流水灯应该是一直亮一个灯,或者会出现按下按键后第二个等闪
一 下的现象;
解决:将这个语句放在“while”循环外边,一次定义好,防止一直被初始化。
希望对你有帮助!
temp=0x01;
这一句在while里面,那你后面的
temp=temp<<1;
不就没有任何意义了么?移位了也会立即置位的。
赋初始值应该在while循环外边吧
你好,原本设置是想按一下开关按键流水灯就停止的。现在一直按也不停
首先看你这个撑血是sw置低事灯开始有移位,这里呢建议你可以加一下按键消抖,还有你temp=0x01结合你后面的一句你可能是想左移八位进行值的复位,不过这样写是有问题的,你可以进行if语句判断还原初值,如果你是想按键按下后停止,简单的话你可以增加一个标志位,正常情况下流水灯在跑,按键后标志位置位,然后停止,或者您可以设置成标志位在按键后进行翻转这样就可以通过按键控制流水灯开始停止
大哥可以给个代码吗?我是小白不太会写,拜托拜托
上面的那个程序应该还会最后一个灯会一直不亮的问题,就当作思考题把
虽然还是不行,大哥不过你也教了不少。
在解决问题中学习到的会更多更深刻。加油
