找回密码
 立即注册
查看: 163|回复: 0

普中单片机动态显示多位数字错误显示

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:143
  • 最近打卡:2025-04-29 09:29:30

31

主题

148

回帖

980

积分

高级会员

积分
980
发表于 2025-2-5 14:42:44 | 显示全部楼层 |阅读模式
显示的是22085.

#include <STC89C5xRC.H>
#include "INTRINS.H"

typedef unsigned char u8;
typedef unsigned int u16;

#define SMG_A_DP_PORT P0

u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7C,0x39,0x5e,0x79,0x71};


void delay_1us(u16 n){
    while(n--);
}


void displayDigit(unsigned char index,unsigned char digit){

        // 清除指定位置的位,然后设置需要的位
        P2 &= ~(0x01 << 2); // 先清除P2端口第2位
        P2 |= (((index >> 0) & 0x01) << 2); // 根据index最低位设置P2端口第2位

        P2 &= ~(0x01 << 3); // 清除P2端口第3位
        P2 |= (((index >> 1) & 0x01) << 3); // 根据index次低位设置P2端口第3位

        P2 &= ~(0x01 << 4); // 清除P2端口第4位
        P2 |= (((index >> 2) & 0x01) << 4); // 根据index更高一位设置P2端口第4位

    SMG_A_DP_PORT=gsmg_code[digit];
    delay_1us(300);
    SMG_A_DP_PORT=0x00;
}


void setDisplay(u16 n){
        unsigned char i=0;
    while(n>=1){
                //n=n%10;
        displayDigit(i,n%10);
        n=n/10;
                i++;
    }
}

void main(){
    while(1){        
        setDisplay(2024102);
    }
}


其实 setdisplay函数中  displayDigit(i,n%10);是错误的。

通义的解释是

void setDisplay(u16 n) {
    unsigned char digits[8] = {0}; // 假设最多显示8位数字
    int i = 0;
   
    // 将数字分解成单个数字并保存
    while (n > 0 && i < 8) {
        digits[i++] = n % 10;
        n /= 10;
    }
   
    // 从最高有效位到最低有效位显示数字
    for (int j = i - 1; j >= 0; j--) {
        displayDigit(7 - (i - 1 - j), digits[j]); // 假设数码管从右到左编号0-7
        // 如果数码管从左到右编号,则使用displayDigit(i - 1 - j, digits[j]);
    }
}
这段代码首先将输入的数字n拆解成单个数字并存储在数组digits中,
然后逆序遍历该数组,从最高位到最低位依次调用displayDigit函数进行显示。注意这里的7 - (i - 1 - j)是为了适配从右至左编号的数码管(0-7)。
如果数码管是从左到右编号,请相应地调整索引计算部分。这样就能正确显示如20241022这样的数字了。



问题是,通义也没有给出为什么要显示2014102,但是显示的是另外一个不想干的数字!


回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 19:41 , Processed in 0.217666 second(s), 45 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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