单片机流水灯如何结束程序,比如p0.0~p0.7当灯亮到p0.7的时候就结束不循环工作,就是每次上电后只运行一次

#include<reg51.h>
void delay(void)
{
unsigned int i;
for(i=0;i<20000;i++)
;
}

void main(void)
{
while(1)
{
P1=0xfe;
delay();
P1=0xff;
delay();
P1=0xfd;
delay();
P1=0xff;
delay();
P1=0xfb;
delay();
P1=0xf7;
delay(); 一直亮到 7f 当灯亮到7f时就结束 ,刚刚回答那位朋友,不知道什么回事,我准备追问的时候显示问题失效,只能再发一次,谢谢!
}
}

第1个回答  2012-06-05
#include<reg51.h>
#include<intrins.h>//包含后面用到的a= _crol_(a,1) 即每次a都循环左移一次
void delay(void)
{
unsigned int i;
for(i=0;i<20000;i++)
;
}

void main(void)
{
P1 = 0xff;
a = 0xfe;
for(i = 0;i<3;i++)
{
P1 = a;
delay();
a = _crol_(a,1);
}
}

现在你可能还没接触到定时器,但是循环左移/右移在小灯方面还是挺好用的~~~好好学哈追问

你好!谢谢你的回答,但是有点看不懂,其实我是想随意乱点亮LED,不按顺序的亮,比如02 04 05 06 07 03 01 亮到这里停止工作!

追答

但是你给我们的程序就是依次点亮,熄灭;再点亮,熄灭。。。
首先你写流水灯的实验你总要有个目的吧,你写程序肯定是根据你想要实现什么功能来写的。
你想要随意乱写也可以,你随便写一串的编码数组,然后P1再按你随意的想法读取数组里面的元素

追问

谢谢你的回答,最好能写个代码演示下,灯在P1端,随意亮,亮到最后一个就停止工作,,,,,,你上面那个代码 用不了 编译的时候也报错

追答

#include
#include//包含后面用到的a= _crol_(a,1) 即每次a都循环左移一次
typedef unsigned char uchar;
//typedef unsigned int uint;
void delay(uchar t)
{
uchar i;
while(t--)
{
for(i = 0;i<100;i++);
}
}

void main(void)
{
uchar a,i;
P1 = 0xff;
a = 0xfe;
for(i = 0;i<3;i++)
{
P1 = a;
delay();
a = _crol_(a,1);
}
} 不好意思,开始回答太急了,有元素没定义 劝你还是从有序的点亮小灯开始吧,后面自己熟练了花样灯什么,想写什么都可以

追问

谢谢你的回答! 其实我现在只需要的是 想让整个程序只运行一次而已,每次上电后照我编的顺序走一次就可以,

追答

你这个程序是运行一次啊

第2个回答  2012-06-05
有个疑问,为什么不采用定时器的方式来执行这个程序呢?for的方式占用资源太大,不太合适。采用定时器的方式比较合适,在定时器中断函数中判断p1的值,然后做循环。追问

你好,谢谢你的回答,刚刚也是你回答的吗?? 我不是很懂编程的,我也是在网上抄的代码 用是能用上了 但是只想每次上电后运行一次,

追答

如果每次上电只想运行一次,把while(1)去掉就可以。while(1) 的意思是无限循环。

追问

你好!可惜去掉这while(1)里面的一不行,编译的时候报错!我的意思是每次上电后P1.0~P1.7的灯亮到最后一个既P1.7的时候 停止工作!

追答

不是去掉while(1)里面的,而是就把while(1) 这行去掉。

追问

去掉了,还是不行,删了好像不管用,还是循环的亮。不停的

第3个回答  2012-06-06
while(P1!=0xF7)
{

}
第4个回答  2012-06-06
将所有的函数提到while前边,while中加一个‘;’分号即可

单片机P0.0~ P0.7是什么意思?
P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)。P3.0~P3.7 P3口8位双向口线(在引脚的10~17号端子)。P0口有三个功能 1、外部扩展存储器时,当做数据总线(如图1中的D0~D7为数据总线接口)2、外部扩展存储器时,当作地址总线(如图1中的A0~A7为地址总线接口)3、不扩展时,可...

编写流水灯程序时为什么不再需要把它熄灭后再让下一个亮,而闪烁程序要...
闪烁是针对一个灯的操作,只涉及一位,故只要对P0.0取循环反就行。流水灯程序针对的是多个(R个)灯,这里是8个,也就是从每个灯轮流亮一次,P0.n口为0的表示亮。P0.0--P0.7是可以同时工作的,并且可以作为输入、输出口,具体看配置。

求汇编语言程序:8个开关p0.0——p0.7分别控制8个灯p1.0——p1.7,
MOV P0,#0FFH ;按键初始都没有按下 LOOP:JB P0.0,LOOP1 ;第一个键没按转下一个 JNB P0.0,$ ;第一键按下则等抬起 CPL P1.0 ;第一个灯如果开始灭则点亮,开始亮则灭 LOOP1: ;以下与此类似,不做注释。JB P0.1,LOOP2 JNB P0.1,CPL P1.1 LOOP2:JB P0.2,...

单片机汇编程序:有八个小灯,要求依次点亮,时间间隔1s
做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P0.0-P0.7接口上,输出“0”时,发光二极管亮,开始时P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→┅→P0.0亮,重复循环。\/ ORG 0000H LJMP START ORG 0030H START:MOV R2,#8 ;左移次数 MOV A,#0FEH ;A的初始值...

单片机 数码管加流水灯 电路图
MAIN:mov dptr,tab mov p0,#0 mov r0,#1 mov r1,#8 setb c loop:mov a,p0 nop rlc a mov p0,a inc r0 mov a,r0 movc a,@a+dptr mov p2,a call delay djnz r1,main tab: 0C0H, 0F9H,4AH,0B0H,099H,092H,082H,0F8H,80H DELAY: MOV R7,#255 D1:MOV R6,#255 D...

单片机P0.0到P0.7,如果要P0.0低电平,是不是0xfe
是的,P0=0xfe就可以。

如何用_crol_(LED,1)实现p0.0-p0.7之间的移位?
低电平0使LED点亮。当LED=0xfe(1111 1110)时,执行LED = _crol_(LED,1),即左移一位,高位溢出,补到低位,此时LED=0xfd(1111 1101);下一次左移变为LED=0xfb(1111 1011).如此循环,直到LED=0x7f(0111 1111),即为最左边的灯亮。再执行LED = _cror_(LED,1),则LED=0xfe(1111 1110)...

用单片机switch语句实现汽车转换灯控制
74hc573的好处就是可以并口输出,这样可以一次控制8个灯 程序里实现流水灯也很简单,假如你只控制8个灯,对应P0口的P0.0到P0.7,74hc595直接输出驱动led 程序:MOV A,#00000001B LOOP:MOV P0,A ;LCALL DELAY ;延时保持点亮状态 RR A JMP LOOP ...

用五一单片机c语言编程,p1口控制八个发光二极管,实现每隔一秒,两两点亮...
P0 = 0x00; \/\/P0.0~P0.7分别接八个发光二极管,刚开始全灭 while(1){ delay(1000);P0 = 0xc0;\/\/点亮前两个发光二极管P0.0和P0.1;delay(1000);\/\/延时1秒 P0 = 0x30;\/\/点亮第三个和第四个LED delay(1000);P0 = 0x0c;delay(1000);P0 = 0x03;} } 二、include <reg52.h>...

数码管段码只用P0.0-0.6显示怎分离出P0.7用作继电器开关
如开:relays=1; 关:relays=0; 当然了,这样看你用P0.7是怎么控制继电器,是用高电平开,还是用低电平,要做相应的调整。好了,在每次输出段码时,都要将relays这个标志位,继电器的控制位,与段码合并后再输出。这样是危险,一旦输出有误,就会破坏继电器的状态。

相似回答