已被月老拉黑 2023-08-07 14:37 采纳率: 50%
浏览 8
已结题

74HC595控制的4位数码管

我是一个刚接触单片机的,我在写74HC595有关的程序时,遇到了一个问题,就是数码管的亮度会比正常显示时的亮度要暗很多,同时在亮“1”这一个数字时“1”会很亮,其他的数字就不会有这种情况,这是什么原因呢?我在检查代码是发现代码并没有什么不对的地方。
麻烦各位帮忙指点指点

img


#define SCLK PB0
#define RCLK PB1
#define DIO PB2

下面是主函数:
void main()
{
    initialize();  //初始化的程序
    while(1)
    {
        asm("clrwdt");
        duan_wei_display();    
        
    }
}

一下是输入串行数据:
void input_serial_data(uchar data)
{
    static uchar i;
    for(i=0;i<8;i++)        
    {
        if(data&0x80)        
        {
            DIO = 1;        
        }
        else
        {
            DIO = 0;        
        }
        
        SCLK = 0;
        SCLK = 1;            
        SCLK = 0;
        data<<=1;            
        
    }
    

}
数码管扫描:

void duan_wei_display()        
{
    static uchar r_num_i;                    
    num_progressive_increase();            
    
    //个位
    input_serial_data(num1[num_plus%10]);                    
    input_serial_data(0x01);                    
    RCLK = 0;
    RCLK = 1;


    //十位
    input_serial_data(num1[num_plus/10%10]);                    
    input_serial_data(0x02);                    
    RCLK = 0;
    RCLK = 1;

    //百位
    input_serial_data(num1[num_plus/100%10]);                    
    input_serial_data(0x04);                    
    RCLK = 0;
    RCLK = 1;

    //千位    
    input_serial_data(num1[num_plus/1000%10]);                    
    input_serial_data(0x08);                    
    RCLK = 0;
    RCLK = 1;
}

下面的是让数码管每秒递增1的程序
void num_progressive_increase()        
{
    
    if(F_595time_1s==1)            
    {
        F_595time_1s = 0;            
        
        num_plus++;

        if(num_plus>9999)
        {
            num_plus = 0;            
        }
    }
        
}
  • 写回答

2条回答 默认 最新

  • 妖王辣妹儿 2023-08-07 14:55
    关注

    该回答引用gpt
    您好,根据您提供的代码,可能存在以下原因导致数码管亮度问题:

    1.74HC595芯片输出电流不足,导致数码管亮度不够,可以尝试增加输出电流或者使用更高功率的74HC595芯片。

    2.数码管共阳极导致数字“1”亮度更高,其他数字较暗,可以尝试使用共阴极数码管或者调整数码管驱动电路。

    3.输入串行数据时,输出高低电平的时间不够稳定,可能存在一些闪烁现象。您可以使用延时函数来保证输出时钟的稳定性。

    4.数码管显示的亮度还受到外部环境的影响,比如周围光线亮度等。因此,您可以尝试在不同环境下观察数码管的亮度表现,以确定是否存在其他原因影响数码管亮度。

    希望以上建议对您有所帮助。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月23日
  • 已采纳回答 1月15日
  • 创建了问题 8月7日

悬赏问题

  • ¥15 List<Class>有参构造
  • ¥20 搭建三相栅极电路后高侧浮动地VS存在电容特性
  • ¥20 云卓h12pro 数传问题
  • ¥20 请问有人知道怎么用工艺库里面的sdb文件通过virtuoso导出来library里面每个cell的symbol吗?
  • ¥20 海思 nnie 编译 报错
  • ¥50 决策面并仿真,要求有仿真结果图
  • ¥15 springboot接入微信支付SDK
  • ¥50 大区域的遥感影像匹配 怎么做啊
  • ¥15 求解答:pytorch跑yolov8神经网络受挫
  • ¥20 Js代码报错问题不知道怎么解决