亮仔zai 2025-01-17 11:38 采纳率: 0%
浏览 7

数码管是共阴连接的,我按着普中科技给的视频敲代码,功能是让 LED8控制的灯显示出数字零,并且我并未点亮第四个数码管(相关搜索:51单片机)

img

img

img


这是普中科技的51单片机,数码管是共阴连接的,我按着普中科技给的视频敲代码,功能是让 LED8控制的灯显示出数字零,可显示了一个8.,并且我并未点亮第四个数码管,它为什么会存在余晖

  • 写回答

2条回答 默认 最新

  • CLLLLLLY 2025-01-17 11:40
    关注
    很高兴在 CSDN 上回答你的问题,本次回答使用 【豆包】让我们一起探讨,找到解决问题的最佳方案吧。
    以下是对该问题的分析及解决方法:

    问题分析

    1. 显示数字错误
      • 数码管显示数字错误可能是由于数码管的编码错误或者数据传输错误导致。
      • 共阴数码管显示数字“0”的编码应为 0x3F(假设使用常规的共阴数码管编码),如果显示为“8”,可能是发送了 0x7F 的编码。
    2. 余晖现象(鬼影)
      • 余晖现象(鬼影)通常是由于数码管的动态显示刷新不及时或者数据未清零导致。
      • 在动态显示中,如果没有及时关闭不显示的数码管或者没有正确刷新数据,就会出现这种情况。

    解决方案

    1. 检查数码管编码
      • 确保用于显示数字“0”的编码正确。以下是一个常见的共阴数码管编码表:
    unsigned char code smgduan[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
    
    - 在代码中,将正确的编码发送到对应的数码管。
    
    1. 解决余晖现象
      • 在动态显示中,每次刷新一个数码管之前,需要先关闭所有数码管,然后再打开需要显示的数码管并发送数据。
      • 以下是一个简单的动态显示函数示例:
    #include <reg52.h>
    
    // 共阴数码管编码表
    unsigned char code smgduan[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
    
    // 延时函数
    void delay(unsigned int i)
    {
        while(i--);
    }
    
    void main()
    {
        while(1)
        {
            // 先关闭所有数码管
            P2 = 0xFF;
    
            // 选择第8个数码管(假设P0控制数码管位选)
            P0 = 0x80;
    
            // 发送数字“0”的编码到第8个数码管(假设P2控制数码管段选)
            P2 = smgduan[0];
    
            // 延时一段时间,以稳定显示
            delay(500);
        }
    }
    
    

    总结

    • 通过检查数码管编码和优化动态显示的代码逻辑,可以解决显示错误和余晖现象的问题。确保每次刷新数码管时,先关闭所有数码管,然后再正确地打开并发送数据到需要显示的数码管,同时使用合适的延时来稳定显示。
    评论

报告相同问题?

问题事件

  • 创建了问题 1月17日