51单片机跑马灯电路图(左右来回循环),8个led灯分别接在P2口,c程序、仿真图如下。电路并未出现预期效果

这是怎么回事?是程序的问题还是电路的问题(比如说电压值的设定),
#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//
主程序void main(){uchar i;P2=0x01;while(1){
for(i=0;i<7;i++){P2=_crol_(P2,1); //P2 的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2 的值向右循环移动DelayMS(150);}}}
proteus仿真图:

求高手解释啊! 不胜感激。。

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//延时
void DelayMS(uint x){
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}//
主程序
void main()
{
uchar i;
while(1)
{
P2=0x01;//此处有改

for(i=0;i<7;i++)
{
P2=_crol_(P2,1); //P2 的值向左循环移动
DelayMS(150);
}
P2=0x80;//此处有改

for(i=0;i<7;i++)
{
P2=_cror_(P2,1); //P2 的值向右循环移动
DelayMS(150);
}
}
}
您复制进去试一下,不行再追加吧,谢谢追问

还是不行啊,仿真成功,LED灯会左右来回闪烁吧

追答

#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar led_table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
//延时
void DelayMS(uint x){
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}//
主程序
void main()
{
uchar i;
while(1)
{
for(i=0;i<7;i++)
{
P2=led_table[i]; //P2 的值向左循环移动
DelayMS(150);
}
for(i=7;i<15;i++)
{
P2=led_table[i]; //P2 的值向右循环移动
DelayMS(150);
}
}
}
您再试一下,复制进去,不行再追加吧!,谢谢

追问

灯亮,但是不会左右来回闪烁,是不是硬件的问题,请帮忙看看

追答

您可以不用总线,直接连接试一下,谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-05
电路:

一般的单片机 和 TTL集成电路芯片,都是灌电流能力强,拉电流能力极弱。
为此,应该用输出低电平,来带动负载。
而你的电路,是用高电平带动LED发光的,仿真,也许还行;实际的电路,LED是不会亮的。
第2个回答  2012-10-05
仿真不清楚,真51的高电平输出很差的,应该驱动不了led吧。
应该反接,公共端接vcc,用51往0电位 通过电阻下拉电流。
第3个回答  2012-10-04
1。我记得这个仿真单片机自己就有电源复位和震荡电路的说- -。是不是画蛇添足了还是我那个老版本...
2。这个头文件没用过。。是不是150ms时间太快了?
3。不知道了- -。试下追问

改为1000以后也不行啊,

追答

你是一定要用那个头文件么。
不是的话用>试下呢?
电路多余试过没- -。
还是说你没把程序下进去?右击再左击那个.

追问

多余的我也删除了,程序我先用keil转换为hex格式在放进单片机,是不是我的LED电路有问题啊?请帮忙看看

追答

电路看起来没问题...
#include
#define uchar unsigned char
#define uint unsigned int
//延时
void DelayMS(uint x){
uchar i;
while(x--)
{
for(i=0;i>1;
DelayMS(500);
}
}
}

这样还是不行的话我也不知道了- -。

那个,你开始运行了么...左下角的一个类似音乐播放器的开始箭头-0 -。

追问

开始运行后,灯会从左到右闪烁,间隔时间太短,之后灯就一直亮着,这是怎么回事,是不是需要改变元件参数呢?

追答

原因可能在uchar i 的地方main里的i和延时里的i冲突了,延时出来i就等于120了呢.
你把main里的i改成ii什么的.
左右闪烁是不是0x01和0x03,
之后全亮可能程序跑飞了吧0.0

本回答被提问者采纳
相似回答