破灬王 发表于 2014-10-15 08:55:24

鱼友们帮帮忙吧!!!

我要实现LED1和LED2的单亮轮亮与常亮
右边为51单片机的带推挽的P0口,左边为电路原理
通过CPU控制为高阻输入模式,会自动实现翻转



那张源代码图各位大神解决。3Q3Q





下面这个和QQ截图都是参考的。。。
#include <reg51.h>

sbit led=P1^0;

void delay(unsigned int i)
{
      unsigned int j;
      unsigned char k;
      for(j=i;j>0;j--)
                for(k=125;k>0;k--);
}

void main()
{
      unsigned char m;
      for(m=20;m>0;m--)
      {
                led=~led;      //没隔一段时间即对输出取反。
                delay(3000); //闪烁间隔。
      }
      while(1); //闪烁十次后,到此不再闪烁。
}


仰望天上的光 发表于 2014-10-15 12:30:32

本帖最后由 仰望天上的光 于 2014-10-15 12:33 编辑

代码没问题啊

仰望天上的光 发表于 2014-10-15 12:31:30

看不到电路,这个电路根本用不到推挽模式啊,只要普通IO就可以了

破灬王 发表于 2014-10-15 13:09:06

不好意思不知道就图片没传上去

破灬王 发表于 2014-10-15 13:09:57

仰望天上的光 发表于 2014-10-15 12:31
看不到电路,这个电路根本用不到推挽模式啊,只要普通IO就可以了

抱歉,我以为图片传了上来,图片我重新传上来了。

破灬王 发表于 2014-10-16 08:30:20

:cry咋没人呀,,有会的渔友帮忙解决下。。。。。 非常感谢

liyf 发表于 2014-10-18 07:46:07

你这问题也太不说清楚,没人能回答的,还有个这里大多数是玩win编程的,问的地方不对
看你驱动led的电路可以一根io就能驱动,也可以两根驱动,程序里只体现一线,也没定义驱动io,给你代码也没用
而且你得电路可不是那么简单的,最简单的就是一个io一个led,你这个可是和用的led又关了,不同电压点亮不同的led的

破灬王 发表于 2014-10-18 11:50:48

liyf 发表于 2014-10-18 07:46
你这问题也太不说清楚,没人能回答的,还有个这里大多数是玩win编程的,问的地方不对
看你驱动led的电路可 ...

哎,这也是我纠结地方了,我同学没发原图片哎。。。

downloads 发表于 2014-10-21 10:22:49

本帖最后由 downloads 于 2014-10-21 10:30 编辑

电路图有点问题建议修改:1.    Q1和Q2中心连接点与LED1和LED2的中心连接点连接;
                                          2.    R1和LED1相串联,R2和LED2相串联;
即可,祝你成功
说明:cpu芯片P0口能单独驱动发光二极管,不需要另外新增外部驱动电路;除非驱动另外负载;

破灬王 发表于 2014-10-23 08:55:56

downloads 发表于 2014-10-21 10:22
电路图有点问题建议修改:1.    Q1和Q2中心连接点与LED1和LED2的中心连接点连接;
                     ...

额 我要的是代码..........

破灬王 发表于 2014-10-23 08:57:22

就是一个单片机然后接了2跟线,按一下闪烁100下之后应该是同时2个灯都熄灭的,可还有一个灯一直亮着

downloads 发表于 2014-10-23 15:04:01

本帖最后由 downloads 于 2014-10-23 15:41 编辑

tpfile:///d:/1.gif
led接见下楼,程序如下:(程序已验证通过!)
#include <reg51.h>
sbit led1=P1^0;
sbit led2=P1^1;
void delay(unsigned int i)
{
// 我要实现LED1和LED2的单亮轮亮与常亮
// 右边为51单片机的P1口上;
      unsigned int j;
      unsigned char k;
      for(j=i;j>0;j--)
      for(k=125;k>0;k--);
}
void main()
{
      
   
   unsigned char m;
   led1=0;    //led1关闭
led2=0;    //led2关闭
//led1 单亮

led1=1;   //led1打开
delay(30000); //led1单亮时间
led1=0;
//led2 单亮
led2=1;   //led2打开
delay(30000); //led2单亮时间

//LED1和LED2轮亮
for(m=20;m>0;m--)
      {
                led1=~led1;      //没隔一段时间即对输出取反。
    led2=~led2;   //没隔一段时间即对输出取反。
                delay(2000);   //闪烁间隔。
      }
///LED1和LED2常亮
led1=1;   //led1打开
led2=1;   //led2打开
delay(30000); //led2单亮时间

      led1=0;//led1关闭
led2=0;//led2关闭

      while(1); //闪烁十次后,到此不再闪烁。
}


downloads 发表于 2014-10-23 15:20:20

本帖最后由 downloads 于 2014-10-23 15:39 编辑

d:\1.gif

破灬王 发表于 2014-10-24 13:16:25

downloads 发表于 2014-10-23 15:20


哥们抱歉, 的再麻烦你下了,我会在加50鱼币的
是为一个LED点亮俩个LED,可单亮也可全灭全亮
LED俩反并联接法,两个100欧姆电阻串联取单片机5V中点2.5V
通过IO口高低电平控制
但默认接口有上拉输出,所以需在常灭时通过软件设置为输入模式,通过IO内IO图腾三极管驱动,输出高低电平
简单说,就是设置51单片机有三个电平模式
高,低,高阻

downloads 发表于 2014-10-24 14:35:18

因为C51单片机I/O口内部有上拉电阻,高阻抗输出时,作为I/O口输入用,高阻输出时,也是高电平,本身无法达到你的要求,建议用其它方法实现;

破灬王 发表于 2014-10-25 14:17:58

downloads 发表于 2014-10-24 14:35
因为C51单片机I/O口内部有上拉电阻,高阻抗输出时,作为I/O口输入用,高阻输出时,也是高电平,本身无法达 ...

那要用什么方法才能实现呢?? C不可以?

downloads 发表于 2014-10-28 18:50:41

要看你的目的是什么?看我是否可以帮你参考一下?

破灬王 发表于 2014-10-28 21:41:31

downloads 发表于 2014-10-28 18:50
要看你的目的是什么?看我是否可以帮你参考一下?

哎 就是一个单片机上我朋友接的2个线,2个小灯泡闪烁,按下开关,一个闪烁到100此后就熄灭了,还有一个在亮着,怎么把他调关掉,就是和上面讲的一样。         

downloads 发表于 2014-10-31 13:46:56

根据你的描述,应该按一下开关,二个灯闪烁100下之后应该是同时2个灯都熄灭的,可是还有一个灯一直亮着,是吗?你想修复,一般CPU故障可能性很低的,你对一直亮的灯的驱动找一下,一般该部分出问题,供参考;

大个的糖果 发表于 2014-11-1 02:47:12

页: [1] 2
查看完整版本: 鱼友们帮帮忙吧!!!