单片机流水灯从上往下循环一次再从下往上循环一次再关闭。运行一次后再次重复进行,我是没有加循环语句了

程序如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar a;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
uchar i;
a=0xfe;
for(i=0;i<8;i++)
{
P1=a;
delay(100);
a=_crol_(a,1);
delay(100);
}

a=0x7f;
for(i=0;i<8;i++)
{
P1=a;
delay(100);
a=_cror_(a,1);
delay(100);
}
a=0xff;
P1=a;
delay(500);
}
不知道哪里有错误??

本来加while(1)是为了防止程序自动执行时出错,并不是你不加while 它就不会循环,单片机在你以上电之后就开始工作,不会停止。所以重复执行,你可以在末尾加 while(1); 程序就会一直执行这条语句,达到你所说的效果。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-05
我郁闷了,你程序运行的现象是什么,有什么异常,不要贴个程序就问哪里错了,说出以运行或者编译的错误或者异常,这样能有针对性的解决你的问题
第2个回答  2017-11-21
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar a;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
uchar i;
while(1) // 加入这个while(1) { }
{
a=0xfe;
for(i=0;i<8;i++)
{
P1=a;
delay(100);
a=_crol_(a,1);
delay(100);
}

a=0x7f;
for(i=0;i<8;i++)
{
P1=a;
delay(100);
a=_cror_(a,1);
delay(100);
}
a=0xff;
P1=a;
delay(500);
}
}

...运行一次后再次重复进行,我是没有加循环语句了
本来加while(1)是为了防止程序自动执行时出错,并不是你不加while 它就不会循环,单片机在你以上电之后就开始工作,不会停止。所以重复执行,你可以在末尾加 while(1); 程序就会一直执行这条语句,达到你所说的效果。

单片机:在程序中实现八灯从上到下流水,然后在从下到上流水,同时亮和同...
可以实现,首先随便连接一个I\/O口,P1\/P2\/P0均可,然后赋予一初值,然后使用本征函数_cror_(循环变量,循环次数)循环右移,或者循环左移实现。左移只需改掉本征函数,同时亮灭可以先给全1,然后给全0,中间加延时,自然得到需要的功能。include <reg51.h>\/\/包含头文件 include <INTRINS.H>\/\/...

51单片机问题,按下K1流水灯从上到下,再从下往上流动,然后停止,按下K2计...
while(ms--)for(i=0;i<120;i++);}main(){ if(k1==0) { key=1; flag=0; while(k1==0); } if(k2==0) { key=2; dat=9; while(k2==0); } if(key==1) { if(flag==0) { P1=_crol_(led,1); num++;...

单片机程序 8个发光二极管间隔500ms由上至下,再由下至上,再重复一次...
循环7次,使P1口分别为0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe也就是LED循环由高到低流水灯显示。

51单片机LED流水灯怎么实现从两边同时逐个点亮到中间,又从中间逐个熄灯...
回答:如果只用一个端口的话,你可以建一个表,如果LED是高电平点亮的话,里面存放数据0x81,0x42,0x24,0x18 如果LED是低电平点亮的话,里面存放数据 0x7e,0xbd,0xdb,0xe7 然后在循环里一直按照数组下标0到3递增3到0递减将数组里面的数赋给端口即可。 即一个大循环里面再加两个小循环即可,具体多少次...

...用单片机实现流水灯,从一依次亮到八,再从八依次亮回一,一直循环?
可位寻址。 每一位代表一个灯。对字节LED附初值1,做一个200mS的时钟,每200ms对字节LED值做左移1位指令(汇编可循环)。主程序中位寻址判断字节LED的bit(0-7)点亮相应的灯。或者直接P0=LED 纯想法、还没试过,感觉好玩,呵呵。 好像上述灯流的方式不对,不过可以改。。。

有关单片机 for循环语句 控制 流水灯 的问题
void main(void) {}主程序是一直循环的,当i=255循环完255次后,主程序又从头开始,进入for循环i=0,再次进行循环,其实for已经完成一个循环了,你可以在for循环结束后加入while(1);在当前语句循环 void main(void){ unsigned char i;for(i=0;i<255;i++) \/\/注意i的值不能超过255 { P0=...

单片机中流水灯如何控制
例如: 可以由两边逐渐向内点亮 然后再由内逐渐向外一个一个熄灭。还可以由由内逐渐向两边内点亮 然后再由两边渐向内逐一个一个熄灭。在程序的实现上 可以把各种花式流水的P1口亮灭状态字 事先定义成数组 然后每隔一定的时间 取出送P1口显示。呵呵 俺只提供给你一个号的算法 程序...

单片机流水灯怎么实现的?
最后,我们需要在程序中定义delay函数,以便实现LED灯的亮灭延迟。这个函数可以通过使用while循环来实现,需要注意的是,在实际应用中,需要根据不同的单片机型号和硬件环境来进行相应的调整和修改。单片机流水灯的定义 单片机流水灯是一种常见的电子装置,通过单片机控制多个LED灯以一定的顺序逐个亮起,形成...

单片机c语言编了个流水灯,用按键怎么实现它暂停。
void main(void){ uint i;uchar temp;uint Flag1=0; 按键标志位bai uint Flag2=0;while(1){ Flag1 = keyscan();if(Flag1==1)(Flag2=~Flag2); \/\/如果一旦检测到一次按键扫描就把标志位2 打开;再次就关闭;if(Flag2==1)\/\/ 如果标志位打开就开始流水灯 { temp=0x01;for(i=0;i...

相似回答