无垠的广袤 2024-01-09 18:08 采纳率: 0%
浏览 10

51单片机驱动共阴数码管亮度不够

我想要用NPN型三极管驱动共阴数码管,但是尝试各种方案都失败了,最后用74HC595移位寄存器芯片能实现亮度提升……网上有人说单片机IO口能够输出的驱动电流太小,共阴极数码管所需电流又比较大,所以亮度始终不够,可以考虑同时使用NPN型和PNP型两种三极管驱动数码管,但是没有给出具体的电路图和方案,有没有人解释一下怎么弄?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-01-09 20:10
    关注

    【以下回答由 GPT 生成】

    要同时使用NPN型和PNP型三极管来提升共阴数码管的亮度,可以采用以下电路图和方案:

    1. 首先,需要理解NPN和PNP三极管的工作原理。NPN三极管的发射极需要接地,PNP三极管的基极需要接地。

    2. 连接共阴数码管的每个段到NPN和PNP三极管的集电极,每个段通过一个恰当的电阻接到一个NPN三极管的集电极和一个PNP三极管的集电极。

    3. 连接NPN三极管的基极到单片机的IO口,并通过一个合适的电阻连接到Vcc电源,以确保驱动电流的大小。

    4. 连接PNP三极管的基极到单片机的IO口,并通过一个合适的电阻连接到GND,以确保驱动电流的大小。

    5. 建立一个循环,循环中的代码通过控制单片机的IO口输出高低电平来控制NPN和PNP三极管的导通与截止。

    6. 在每次循环中,根据需要将要显示的数字编码数据依次输出到74HC595移位寄存器芯片中。

    7. 通过控制74HC595移位寄存器芯片的输出引脚来控制数码管的段选。

    下面是一个示例的代码及电路图,假设单片机为51系列单片机:

    电路图:

               +5V
                |
               | |
                |
              [R1]
                |
               | |
                |
            -----NPN
              E [D1]
                |
             [R2]| |
                | |
              B [D2]
                |
              [R3]| |
                | |
              | C |B
        -----NPN NPN----- 74HC595
              C | |
        -----NPN
             E [D3]
                |
             [R4]| |
                | |
              B [D4]
                |
              [R5]| |
                | |
              | C |B
        -----NPN NPN
              C | |
        -----PNP
             E [D5]
                |
             [R6]| |
                | |
              B [D6]
                |
              [R7]| |
                | |
              | C |B
        -----PNP PNP----- 74HC595
              C | |
        -----PNP
             E [D7]
                |
             [R8]| |
                | |
              B [D8]
                |
               | |
                |
                |
              GND
    

    其中,D1-D8代表共阴数码管的8个段,R1-R8是NPN和PNP三极管的基极电流限制电阻。

    代码:

    #include <reg51.h>
    
    sbit NPN_IO = P1^0;
    sbit PNP_IO = P1^1;
    sbit DATA_PIN = P2^0;
    sbit LATCH_PIN = P2^1;
    sbit CLK_PIN = P2^2;
    
    void delay_ms(unsigned int ms) {
        unsigned int i, j;
        for (i = 0; i < ms; i++)
            for (j = 0; j < 110; j++);
    }
    
    void shiftOut(unsigned char data) {
        unsigned char i;
        for (i = 0; i < 8; i++) {
            DATA_PIN = (data & 0x80) >> 7;
            data <<= 1;
            CLK_PIN = 1;
            CLK_PIN = 0;
        }
    }
    
    void displayDigit(unsigned char digit) {
        switch (digit) {
            case 0:
                shiftOut(0x3F);  // 共阴数码管的段选,高电平亮
                break;
            case 1:
                shiftOut(0x06);
                break;
            case 2:
                shiftOut(0x5B);
                break;
            case 3:
                shiftOut(0x4F);
                break;
            case 4:
                shiftOut(0x66);
                break;
            case 5:
                shiftOut(0x6D);
                break;
            case 6:
                shiftOut(0x7D);
                break;
            case 7:
                shiftOut(0x07);
                break;
            case 8:
                shiftOut(0x7F);
                break;
            case 9:
                shiftOut(0x6F);
                break;
            default:
                shiftOut(0xFF);
        }
    }
    
    void main() {
        unsigned char i, j;
    
        while (1) {
            for (i = 0; i < 100; i++) {
                // 切换NPN和PNP三极管的工作状态
                NPN_IO = 1;
                PNP_IO = 0;
    
                displayDigit(i % 10);
                LATCH_PIN = 1;
                LATCH_PIN = 0;
    
                delay_ms(2);
    
                // 切换NPN和PNP三极管的工作状态
                NPN_IO = 0;
                PNP_IO = 1;
    
                displayDigit(i / 10);
                LATCH_PIN = 1;
                LATCH_PIN = 0;
    
                delay_ms(2);
            }
        }
    }
    

    这个示例代码是一个简单的循环显示0-99的数值到共阴数码管,并通过切换NPN和PNP三极管的工作状态来提升亮度。你可以根据实际需求进行修改和优化。

    注意:请根据你实际使用的单片机和数码管进行引脚的连接和代码的修改。以上示例代码可能需要进行适当的调整才能适用于不同的硬件平台。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 1月9日

悬赏问题

  • ¥15 关于logstash转发日志时发生的部分内容丢失问题
  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?