找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1536|回复: 6
打印 上一主题 下一主题
收起左侧

LED亮度不够 附单片机程序

[复制链接]
跳转到指定楼层
楼主
我想写第5个练习。烧录进去现象是对的,但是LED闪烁那部分非常暗,有时候写其他程序的时候,也会出现LED很暗的情况,我现在知道的是肯定不是硬件的问题,但是我也找不出是什么问题,感觉好像是单片的特性一类的......求大神指点一下。


单片机源程序如下:
#include <REGX52.H>
#include <intrins.h>

typedef unsigned char u8;
typedef unsigned int u16;

sbit BEEP=P2^5;

#define LED_PORT P2

void delay(u16 x)//x传入1大约延时1ms
{
         u16 y,z;
        for(y=x;y>0;y--)
                for(z=115;z>0;z--);
}

void main()
{
        u8 i=0;
         while(1)//死循环
        {        
                static b;
                for(i=0;i<4;i++)//大循环上下流动两次
                {
                        for(i=0;i<8;i++)//内层循环流水灯
                        {        
                                if(b%2==0)//第一次先从低位到高位
                                {
                                        LED_PORT=_crol_(0xfe,i);//左移
                                }
                                else if(b%2==1)//由于b自加为奇数,执行从高位到低位
                                {
                                LED_PORT=_cror_(0x7f,i);//右移
                                }
                                delay(200);
                                 LED_PORT=0xff;        
                        }
                                b++;//每完成一次内循环自加1
                                if(b==4)
                                {
                                        for(i=0;i<5;i++)//最后一个循环,全部LED闪烁5次
                                        {
                                           LED_PORT=0xff;
                                           delay(500);
                                           LED_PORT=~0xff;
                                        }
                               }                        
                 }                                                                        
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:672792 发表于 2022-11-27 20:00 | 只看该作者
LED正极串联一个1K电阻到电源正极,LED负极接单片机引脚
回复

使用道具 举报

板凳
ID:161164 发表于 2022-11-27 21:31 | 只看该作者
亮的时间不够


回复

使用道具 举报

地板
ID:384109 发表于 2022-11-27 23:41 | 只看该作者
要看电路图,能亮不代表电路没问题
回复

使用道具 举报

5#
ID:1047841 发表于 2022-11-28 00:00 | 只看该作者
这个真的是 硬件的问题,跟51单片机的特性相关,因为单片机的io口驱动能力弱,即输出电流1mA都不到,你如果要使LED的亮度高,必须接一个pnp三极管, 能极大的增强电流,在提供led 1.8~2.5v的电压下,串一个220Ω的电阻,亮度就足够量。
回复

使用道具 举报

6#
ID:1054240 发表于 2022-11-28 16:24 | 只看该作者

现在又出现了一个问题,就是如果我吧0xff放在前面,它会闪烁,但是LED还是很暗,如果我把~0xff放前面,它就不会闪烁了,但是LED很亮,直到循环结束它才熄灭,可我写的闪烁它根本不执行。
回复

使用道具 举报

7#
ID:1054240 发表于 2022-11-28 17:16 | 只看该作者
我换了一种写法,可还是有问题,就是在LED闪烁那一部分,就是如果我把0xff写在前面了,它能正常闪烁,但LED还是很暗;如果我把0x00写在前面了,它就不闪烁了,LED也很亮,完成循环才熄灭,相当于我写的闪烁部分根本没有执行。
以下是代码:

#include <REGX51.H>

typedef char u8;
typedef int u16;

#define LED_PORT P2//宏定义整个LED端口

void delay(u16 x)//延时函数,当ten_us传入1,大约延时10us
{
        u16 y,z;
        for(y=0;y<x;y++)
                for(z=0;z<115;z++);
}

main()
{  
  u8 i=0,b=0;//定义变量i和b
  while(1)
  {
          for(i=0;i<8;i++)                                         
          {
              LED_PORT=~(0x01<<i);//从LED1亮起,i每增加一次,移位一次
              delay(200); // 延时大约0.2秒
          }
          for(i=0;i<8;i++)
          {
              LED_PORT=~(0x80>>i);//从LED8亮起,i每增加一次,移位一次
              delay(200);// 延时大约0.2秒
             }
          b++;//b自加1
          if(b%2==0)//上下循环两次后进入此循环
          {                                    
                  for(i=0;i<5;i++)
                  {
                          LED_PORT=0xff;//LED全灭
                          delay(300);
                          LED_PORT=0x00;//LED全亮
                  }
          }
  }
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表