51单片机流水灯,第一轮每次亮一个灯流水,第二轮每次亮两个灯流水.....然后整个过程循环

#include<reg52.h>
#include<intrins.h>
#define unit unsigned int
#define uchar unsigned char
sbit D8=P1^7;
void delay(unit);
void main()
{
uchar temp,tempx;
P1=0xff;
tempx=0x01;
temp=0xfe;
while(1)
{
while(D8==0)
{
P1=temp;
delay(300);
temp=_crol_(temp,1);
}
P1=0xff;
tempx=_crol_(tempx,1);
temp=temp-tempx;
}

}
void delay(unit z)
{
unit x,y;
for(x=100;x>0;x--)
for(y=z;y>0;y--);
}
P1.0--P1.7控制8个流水灯 at89c52
程序在这里...为什么一直报错啊

第1个回答  推荐于2017-09-22
#include<reg52.h>
#include<intrins.h>

#define unit unsigned int
#define uchar unsigned char

void delay(unit z)
{
unit x, y;
for(x = 100; x > 0; x--) for(y = z; y > 0; y--);
}
void main()
{
uchar temp, i;
temp = 0xfe;
while(1) {
for (i = 0; i < 8; i++) {
P1 = temp; delay(300); temp = _crol_(temp, 1);
}
temp <<= 1;
if(temp == 0) temp = 0xfe;
}
}

试试看。本回答被提问者和网友采纳
第2个回答  2013-09-01
判断口电平是单片机的事,貌似仿真也行但没玩过,但keil的调试功能是搞不定的。
第3个回答  2013-09-01
while 语句处好像有差错 tempx=_crol_(tempx,1);
temp=temp-tempx; 仔细看看这个地方追问

哦~改过了~不报错~~现在D8始终为0

第4个回答  2013-09-01
把错给贴出来啥,追问

哦~改过了~不报错~~现在D8始终为0

追答

软件仿真,去debug。

...第一轮每次亮一个灯流水,第二轮每次亮两个灯流水...然后整个...
while(1) { for (i = 0; i < 8; i++) { P1 = temp; delay(300); temp = _crol_(temp, 1);} temp <<= 1;if(temp == 0) temp = 0xfe;} } 试试看。

51单片机开发板八个led灯依次点亮(就是流水灯)然后再全部
这段代码实现了8个LED灯的流水点亮效果,先点亮第一个LED,等待600毫秒后,再点亮第二个LED,依此类推,直到所有LED都点亮,然后循环重复。

单片机AT89C51单片机流水灯修改成先亮一个后亮两个一直循环到亮八个...
主函数while(1)里面改成 P2=(P2<<1)|0x01;delay500ms();if(P2==0xFF)P2=0x00;

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

51单片机从中间到两边逐个点亮再从两边到中间逐个点亮程序?
这个流水灯程序最好用数组定义8个状态的灯,这样用for循环就可以实现了。简洁明了,易读性强,也容易理解。include<reg51.h> define uchar unsigned char code uchar ledtab[10]= { 0xff,0xe7,0xc3,0x81,0x00,\/\/中间开始逐渐点亮 0xff,0x7e,0x3c,0x18,0x00\/\/两边开始逐渐点亮 } void ...

51单片机流水灯依次点亮循环两次怎么实现?只循环两次!
delay(uint z) \/\/ 延时程序 { uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);} void main(){ t=30;while(1){ t++;if(t==100) t=10;for(i=0;i<20;i++) \/\/ 发光二极管 循环亮 { P1=tabled[i];delay(250); \/\/ 调用延时程序 } } } ...

基于51单片机设计的花样流水灯设计
在51单片机中,可以通过定时器和端口控制实现花样流水灯的效果。硬件搭建时,需要将多个LED灯按照一定的顺序连接到51单片机的IO引脚上。每个LED灯配备一个适当电阻,连接到5V电源引脚和地线上,形成一个完整的电路。具体硬件搭建方法如下:(1)将多个LED灯依次连接组成电路链,每个LED的正极连接到51单片机...

51单片机C程序实验LED灯:[2]左到右的流水灯
说明:实现一排灯从左到右依次一个一个点亮熄灭,实现流水灯 proteus电路图 元件清单:(分别是) 51单片机 电容 瓷片电容(也可用普通电容) 晶振 红色二极管 电阻 电路图的连接方法 程序清单 说明:本例有两种程序写法 第一种是入门级别比较基础的写法 先是依旧延时子程序,然后主程序利用直接赋值,与...

51单片机中如何用汇编语言编写流水灯
流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:ORG 0000H;复位启动AJMP START;ORG 001BH;T1中断AJMP T1INT;;定义变量===YSJSEQU 30H;延时计数器LEDEQU 31H;LED控制缓冲器 ;主程序===START:MOV LED,#0FEH;初始化数据MOV YSJS,#0;MOV TMOD,#10H;定时器1工作于方式1,16位定时...

51单片机流水灯程序
程序如下:include <reg52.h> sbit led1 = P2^0;sbit led2 = P2^1;sbit led3 = P2^2;sbit led4 = P2^3;sbit led5 = P2^4;sbit led6 = P2^5;sbit led7 = P2^6;sbit led8 = P2^7;void main(){ int i,j;\/\/点亮第一个灯 led1 = 1;led2 = 0;led3 = 0;led4 = ...

相似回答