找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5892|回复: 16
收起左侧

关于单片机驱动数码管特别暗的问题 求帮助

[复制链接]
ID:520816 发表于 2019-6-14 19:45 | 显示全部楼层 |阅读模式
我用stc89c52 整了一个6位数码管的 计数器
用的是usb的5v供电
数码管的亮度非常的暗  我以为我程序的问题我就找人帮我又写了一个还是特别暗
要怎么才能解决这个问题 需要提供啥
回复

使用道具 举报

ID:388197 发表于 2019-6-15 00:37 | 显示全部楼层
你数码管共阴还是共阳?89系列IO口高电平时靠内上拉实现的,基本没有带负载能力.IO口直接驱动的话最好用共阳的.或者外加扩流原件.
回复

使用道具 举报

ID:517466 发表于 2019-6-15 00:48 | 显示全部楼层
延长每个数码管的点亮持续时间,根据视觉暂留现象,每个数码管的维持时间低于200ms的时候,在眼睛上很难成像。时间延长太长的话,对于扫描方式的,又会出现闪灭的情况,所以需要做调整,达到平衡。但无论怎么调整,也和静态显示的亮度有区别。
回复

使用道具 举报

ID:213173 发表于 2019-6-15 10:26 | 显示全部楼层
软件都是基于硬件条件编写的,楼主两者都没有提供,只讲数码管的亮度非常的暗,别人只能乱猜。
回复

使用道具 举报

ID:297516 发表于 2019-6-15 16:20 | 显示全部楼层
加个三极管把电流放大一点...是不是单片机IO驱动不够!!
回复

使用道具 举报

ID:563120 发表于 2019-6-15 18:23 | 显示全部楼层
你看看你的电阻是不是用大了
回复

使用道具 举报

ID:207421 发表于 2019-6-15 18:32 | 显示全部楼层
电路图摆出来,代码贴出来.
USB供电电流太小,换一个小电源吧
提问要说明白, 问题才容易解决
回复

使用道具 举报

ID:483407 发表于 2019-6-16 08:56 | 显示全部楼层
亮度低,就是电流小呀,想办法提高电流
回复

使用道具 举报

ID:520816 发表于 2019-6-16 09:01 | 显示全部楼层
1.png 2.png 3.png



代码我在家里了
这个是我自己用论坛里下载的改的
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int

sbit k1 = P1^0;                   //加
sbit k2 = P1^1;                   //减
sbit k3 = P1^2;                   //复位
void key(void);
void display(void);

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
                    0x92,0x82,0xf8,0x80,0x90};           //数组
                       
char b = 65,n = 43,m = 21;                                //显示初值,m,n的值决定开机显示数值
//****************************************
//延时程序
//****************************************
void delayms(uint xms)
{
   uint i,j;
   for(i=xms;i>0;i--)
   for(j=110;j>0;j--);
}
//***********************************************
//显示程序
//***********************************************
void display(void)
{
    //        P2=0X20;                  //100000         
         //        P0=table[b%10];          
         //        delayms(5);
         //        P2=0X10;                  //10000         
         //        P0=table[b/10];          
         //        delayms(5);

//                P2=0X08;                  //1000
  //      P0=table[m%10];   //显示位
        //        delayms(5);  
        //        P2=0X04;                   //100
          //  P0=table[m/10];          //显示位
                //delayms(5);
                                                                              
//            P2=0X02;                  //10
//                P0=table[n%10];          //显示位
//                delayms(5);
//                P2=0X01;                  //1
//                P0=table[n/10];          //显示位
//                delayms(5);



                P2=0X20;                  
        P0=table[m%10];   //显示万位
                 delayms(5);  
               

                P2=0X10;                   
            P0=table[m/10];          //显示万位
                 delayms(5);
               
                                                                              
            P2=0X08;                  
                P0=table[n%10];          //显示百位
                 delayms(5);
               
                                 
                P2=0X04;                 
                P0=table[n/10];          //显示千位
                 delayms(5);
               

                P2=0X02;                  //10         
                 P0=table[b%10];          
                 delayms(5);
               

                 P2=0X01;                  //1         
                 P0=table[b/10];          
                 delayms(5);
               

}

//***************************************************
//按键处理
//***************************************************
void key()
{
  if(k1==0)                                         //检测按键是否被按下
   {                                                 //延时消抖
           delayms(10);                         
        if(k1==0)                                 //再次检测是否真正按下按键
        {
          m++;                                         //m自加一
          if(m>=100)                         //如果m加到100则n加一 (限制m的取值范围) 个位、十位最大显示99
          {
                  n++;                                 //n自加一
                m=0;                                 //使m又从0开始计数
                if(n>=100)                         //如果n加到100则m=n=99 (限制n的取值范围) 百位、千位最大显示99
                {
                  b++;
                  n=0;
                  if(b>=100)
                  {
                    m=99;                                 //最大显示9999
                    n=99;
                  }
                }
          }
        }
        while(!k1);                                 //按键松开
   }

  if(k2==0)                                         //检测按键是否被按下
   {                                                 //延时消抖
           delayms(10);                         //再次检测是否真正按下按键
        if(k2==0)
        {                                                 //m自减一
          m--;
          if(m<=0)                                 //如果m减到0则n减一 (限制n的取值范围) 个位、十位最小显示00
          {                                                 
            m=99;                                 //重新给m装初值
                  n--;                                 //n自减一
                if(n==-1)                         //如果n减到-1,则m=n=0 (限制n的取值范围) 百位、千位最小显示00
                {
                  b--;
                  if(n<=0)
                  {
                    n=0;                                 //最小显示0000
                    m=0;
                  }
                }
          }
        }
        while(!k2);                                 //按键松开
   }

if(k3==0)                                         //检测按键是否被按下
{
   delayms(10);                                 //延时消抖
   if(k3==0)                                 //再次检测是否真正按下按键
   {
            m = 0;                                         //复位,显示0000
         n = 0;
         b = 0;
   }
   while(!k3);                                 //按键松开
}
}

void main()
{
  while(1)
  {                                                         //调用按键检测
   key();                                         //数码管显示
   display();
  }

}                                  

回复

使用道具 举报

ID:207421 发表于 2019-6-16 10:10 | 显示全部楼层
1. display();     后面要加延时
2. delayms(5); 合适不合适需要自己调整
3. 数码管电路图没有, 如果没有驱动元件(三极管或驱动芯片),本来就会暗。
回复

使用道具 举报

ID:483407 发表于 2019-6-16 10:21 | 显示全部楼层
数码管怎么连接的,还是没看出来!
回复

使用道具 举报

ID:483407 发表于 2019-6-16 11:07 | 显示全部楼层
没有看到LED与电路是怎么连接的,这个也要发上来
回复

使用道具 举报

ID:213173 发表于 2019-6-16 11:59 | 显示全部楼层
口口麻椒 发表于 2019-6-16 09:01
代码我在家里了
这个是我自己用论坛里下载的改的
#include

这种最小系统板接共阳数码管需要为P2位驱动加6个PNP管,位码取反。P0接8个1K限流电阻。才能解决亮度低。
回复

使用道具 举报

ID:520816 发表于 2019-6-16 12:25 | 显示全部楼层
我自己用面包板连的没有上拉电阻  但是有字 能用   暗

QQ拼音截图20190616122432.jpg
回复

使用道具 举报

ID:520816 发表于 2019-6-16 12:43 | 显示全部楼层
我那个电路只有这个视频我要回家才能照相
QQ拼音截图20190616124208.jpg
回复

使用道具 举报

ID:56665 发表于 2019-6-16 17:18 | 显示全部楼层
数码管亮度与驱动有关,与动态扫描时间也有关。
回复

使用道具 举报

ID:123289 发表于 2019-6-17 15:17 | 显示全部楼层
1、要用超高亮的数码管。
2、驱动电流取大一点,如40mA.
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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