求高手看一下可不可以实现,用proteus仿真怎么不对啊?如图的哇原理图,下面是代码!
#include <reg52.h>
#include <intrins.h>
void Delay10ms(unsigned int c);
main()
{
unsigned char LED1;
unsigned char LED2;
LED1 = 0xff; //0xfe = 1111 1110
LED2=0x02; //P2
while (1)
{
P2 = LED2;
Delay10ms(50);
LED2 = LED2 << 1;
if (P2 == 0x00)
{
P0=LED1;
Delay10ms(50);
LED1=LED1<<1;
if(P0==0x00)
{
LED1=0xfe;
LED2=0x02;
}
}
}
void Delay10ms(unsigned int c)
{
unsigned char a, b;
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
这是正确程序 ,望采纳。最好采用低电平触发 ,否则,单片机在上电的瞬间所有的LED灯会闪一下。
#include <reg52.h>
#include <intrins.h>
void Delay10ms(unsigned int c);
main()
{
unsigned char i;
while (1)
{ P0=0x00;
P2=0x00;
while(1)
{ P2 = 0x02;
Delay10ms(50);
P2 = P2 >>1;
Delay10ms(50);
if (P2 == 0x01)
{ P2 = 0x00;
P0=0x80;
Delay10ms(50);
for(i=0;i<7;i++)
{
P0=P0>>1;
Delay10ms(50);
}
if(P0==0x01)
P0=0x00;
}
}
}
}
void Delay10ms(unsigned int c)
{
unsigned char a, b;
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
追问谢谢建议,不过按照你的方法给了一下,结果还是原来的那样只有票p2口的两个闪烁,其他没反应。
追答不会的 ,我亲测的 。 这是 程序和仿真图 。http://pan.baidu.com/s/1qWnvABM
为什么是0才亮,不是1吗?
情况:
仿真的时候P0口都不亮,放在实验板上只有P0口的在流水,P1长亮
感觉是跑不到if里面,你把0x00改成0x80看下?
你用unchar来移位会出问题,因为你定义的是一个8位的数,你可以sbit P2直接用他来移,反正你的问题肯定是出在这里
“幻城之血恋 ”说的对,你的 P0口上拉电阻阻值太大了,在实际电路中要根据 LED 电流,
用多大的电阻。一般 1K~5K左右吧。
2. 在proteus仿真用这电阻是不行的,我也不知道怎么回事,可能是软件的 BUG 或是我
不会用吧。
3. 如用proteus仿真,你可以用排阻 “RESPACK-8”,接线如下图(图上我只接了一个 LED,
其它LED接法相同)。
4. 我看大家都建议你用低电平时,LED 亮。我也是这个建议。
另,程序中 主函数好像少了个 ” }“
谢谢,程序改过了,现在还是只有P2口的亮,其他的没有反应
追答你要把电阻改成排阻的,你仔细看一下,我上面写的。我把仿真和程序给你传上来了,我就画了一个LED,你把其它LED加上就行了。
一个c语言程序关于10个led流水灯的
void Delay10ms(unsigned int c);main(){ unsigned char i;while (1){ P0=0x00;P2=0x00;while(1){ P2 = 0x02;Delay10ms(50);P2 = P2 >>1;Delay10ms(50);if (P2 == 0x01){ P2 = 0x00;P0=0x80;Delay10ms(50);for(i=0;i<7;i++){ P0=P0>>1;Delay10ms(50);} ...
c语言设计的流水灯程序,越简单越好,最好早10行左右!
delayms(250);LED = LED << 1; \/\/循环右移1位,点亮下一个LED "<<"为左移位 if(P2 == 0x00 ) {LED = 0xfe; } \/\/ 0xfe = 1111 1110 } }
关于c语言流水灯程序
实现的功能是 P1 P3口的流水灯 循环闪动 你可以参照这个写..使用位控制 include "reg51.h"void main(){ unsigned int i=10;P1=0xfe;while(1){ while(--i){;} P1=(P1<<1) | 0x01;if(P1==0xff) P3 = 0x7f;while(P1==0xff){ while(--i){;} P3=(P3>>1) | 0x80;if(P...
如何用c语言实现流水灯功能?
可以用for循环试试unsingned char i;for(i=0;i<5;i++)\/\/流水灯闪烁程序。若干个灯泡依次点亮就叫流水灯,它用在夜间建筑物装饰方面。例如在建筑物的棱角上装上流水灯,可起到变换闪烁美不胜收的效果。单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处...
编写出单片机流水灯程序
编写一个基于8051单片机的流水灯程序,假设我们使用P1口连接了8个LED灯,要实现从第一个LED开始依次点亮,形成流水效果。以下是一个简单的C语言程序示例:```c include void delay(unsigned int ms) { unsigned int i, j;for (i = ms; i > 0; i--)for (j = 110; j > 0; j--); \/...
求流水灯(一个灯从上往下依次点亮)和数码管(0000--9999)的C语言程序
h>#include <intrins.h> void sleep(int ma){ int i;for(;ma>0;ma--){ for(i=0;i<124;i++) {;} } } void main(){ P1=0xfe;for(;;){ sleep(10000);\/\/这里是因为我的软件运行速度较快,你可以改为1000就好了。P1=_crol_(P1,1);\/\/向左滚动一位 } } 这是流水灯的 ...
单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
单片机流水灯C语言程序的源代码如下:include \/\/51系列单片机定义文件 define uchar unsigned char \/\/定义无符号字符 define uint unsigned int \/\/定义无符号整数 void delay(uint); \/\/声明延时函数 void main(void){ uint i;uchar temp;while(1){ temp=0x01;for(i=0;i<8;i++) \/\/8个流水...
用c语言编写单片机流水灯程序,(8个发光二极管从左至右循环点亮)_百度...
while(1){ P3=0xfe;\/\/第一个灯亮 delay();\/\/延时 P3=0xfd;\/\/第二个灯亮 delay();P3=0xfb;\/\/第三个灯亮 delay();P3=0xf7;\/\/第四个灯亮 delay();P3=0xef;\/\/第五个灯亮 delay();P3=0xdf;\/\/第六个灯亮 delay();P3=0xbf;\/\/第七个灯亮 delay();P3=0x7f;\/\/第八个灯亮...
51单片机流水灯执行10次 全部闪烁一次 一直循环十次闪烁一次 c语言怎么...
include<reg51.h>#define uchar unsigned charvoid delay(uchar a){uchar i;whilie(a--)for(i=0;i<110;i++);}main(){uchar i,j;for(i=0;i<10;i++) P0=0xfe; for(j=0;j<8;j++) { P0=_crol_(P0,1); delay(200); } } P0=0x00; delay(200...
C语言用一个按钮控制流水灯的编程求帮助啊??? 程序写下,谢谢
delay(100);} if(flag ==1){ P1 = 0xf7;delay(100);P1 = 0xfb;delay(100);P1 = 0xfd;delay(100);P1 = 0xfe;delay(100);} } } 通过外部中断INT0所连的按键可以控制P1.4-P1.7所控制的LED等顺序或者逆序形成流水灯。这是基于51的程序,其它CPU的也大同小异,希望对你有帮助!