标题: 问一下大佬此处为何编译器报错,第一次还能运行 [打印本页]

作者: QQ_5E9EC8    时间: 2025-2-21 17:19
标题: 问一下大佬此处为何编译器报错,第一次还能运行
#include <REGX52.h>
#include <INTRINS.H>

typedef unsigned char u8;
typedef unsigned char u16;
typedef unsigned long u32;

// 数字0-9的编码
static u8 codes[10] = {
    0x3f,
  0x06, // 1
    0x5B, // 2
    0x4F, // 3
    0x66, // 4
    0x6D, // 5
    0x7D, // 6
    0x07, // 7
    0x7F, // 8
    0x6F  // 9
}
u8 buffer[8];//这里哪错了?编译器一直提示

void Delay1ms(u16 count) //@11.0592MHz
{
    u8 i, j;

    while (count > 0) {
        count--;
        _nop_();
        i = 2;
        j = 199;
        do {
            while (--j);
        } while (--i);
    }
}

/**
* @brief 内部方法,让数码管某一位显示特定数字
*
* @param position 片选, 从左到右[0-7]
* @param num_code 显示想要的数字编码
*/
void DigitalTube_DisplaySingle(u8 position, u8 num_code)
{
    P0 = 0x00;
    // 位选:P15 P14 P13
    position <<= 2;
    P2 &= 0xE3;
    P2 |= position;

    // 段选:P0
    P0 = num_code;
}

/**
* @brief 设置显存数组
*
* @param num 待展示数字
*/
void DigitalTube_DisplayNum(u32 num)
{
    u8 i;
    for (i = 0; i < 8; i++) {
        buffer[i] = 0x00;
    }

    if (num == 0) {
        buffer[7] = codes[0];
        return;
    }

    i = 7;
    while (num > 0) {
        buffer[i] = codes[num % 10];
        num /= 10;
        i--;
    }
}

/**
* @brief 动态扫描
*
*/
void DigitalTube_Refresh()
{
    u8 i;
    for (i = 0; i < 8; i++) {
        DigitalTube_DisplaySingle(i, buffer[i]);
        Delay1ms(1);
    }
}

void main()
{

    DigitalTube_DisplayNum(1234567);
    while (1) {
        DigitalTube_Refresh();
    }
}


作者: QQ_5E9EC8    时间: 2025-2-21 17:25
没事了,小错误
作者: 黄youhui    时间: 2025-2-21 20:38
    buffer[i] = 0x00;谁给你定义的数组buffer
作者: 123156fsadf    时间: 2025-2-22 12:21
QQ_5E9EC8 发表于 2025-2-21 17:25
没事了,小错误

typedef unsigned char u16;
这行应该改成:
typedef unsigned int u16;
作者: wpppmlah    时间: 2025-2-22 12:35
标点符号引起的小问题




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1