feccccccccc 2022-05-22 18:12 采纳率: 50%
浏览 253
已结题

Proteus单片机仿真,数码管仿真的时候为什么有的数字不会显示?

想要进行一个数组的输出显示:arr[11] = {-3, -15, 2, 64, 487, 41, -888, 654, 9, 10};

img

img

共阴极数码管,段码转换函数如下



void SMG_Trans(unsigned char *SMG_String, unsigned char *SMG_Buf)
{
    unsigned char temp;
    unsigned char i,j=0;
    
    for(i=0;i<6;i++,j++)
    {
        switch(SMG_String[j])
        {
            case '0': temp = 0x3f; break;
            case '1': temp = 0x06; break;  
            case '2': temp = 0x5b; break;
            case '3': temp = 0x4f; break;
            case '4': temp = 0x66; break;
            
            case '5': temp = 0x6d; break;
            case '6': temp = 0x7d; break;
            case '7': temp = 0x07; break;
            case '8': temp = 0x7f; break;
            case '9': temp = 0x6f; break;
            
            case '-': temp = 0x40; break;  
            case ' ': temp = 0x00; break;
            
            default: temp = 0x31;
        }
        
        SMG_Buf[i] = temp;
    }
}

函数调用过程中,switch语句没有出现为default的情况,说明段码转换后,在SMG_Buf中的段码应该是正常的。

数码管显示函数如下:



void SMG_Disp(unsigned char *SMG_Buf, unsigned char pos)
{
    P2 = (P2 & 0x3f) | 0x80;
    P0 = ~(0x01 << pos);
    P2 &= 0x3f;

    P2 = (P2 & 0x3f) | 0x40;
    P0 = 0x00;
    P2 &= 0x3f;
    
    P2 = (P2 & 0x3f) | 0x40;
    P0 = SMG_Buf[pos];
    P2 &= 0x3f;    
}

img

从Debug来看P0口也能输出像 ‘-’ 对应的段码 0x40 之类的,但像 ‘-’ 、‘1’、‘3’ 这些特定的符号和数字,最后数码管就是不会显示。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 5月30日
    • 创建了问题 5月22日

    悬赏问题

    • ¥15 fluent里模拟降膜反应的UDF编写
    • ¥15 MYSQL 多表拼接link
    • ¥15 关于某款2.13寸墨水屏的问题
    • ¥15 obsidian的中文层级自动编号
    • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
    • ¥15 神经网络模型一直不能上GPU
    • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
    • ¥20 wpf datagrid单元闪烁效果失灵
    • ¥15 券商软件上市公司信息获取问题
    • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout