找回密码
 立即注册
查看: 115|回复: 14

大师们看看我不明白的警告

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:166
  • 最近打卡:2025-06-16 09:42:32

122

主题

162

回帖

365

积分

中级会员

积分
365
发表于 7 天前 | 显示全部楼层 |阅读模式
出现了一个警告,看提示:


Rebuild target 'Target 1'
compiling main.c...
compiling key.c...
key.c(17): warning C280: 'time': unreferenced local variable
compiling TM1652.c...
linking...
Program Size: data=35.3 xdata=0 code=921
creating hex file from ".\Objects\STC89C52RC+TM1652+5LED"...
".\Objects\STC89C52RC+TM1652+5LED" - 0 Error(s), 1 Warning(s).
Build Time Elapsed:  00:00:01

再看代码:

//按键C文件

#include "key.h"
#include "TM1652.h"  // 包含显示驱动头文件,用于更新显示

// 全局变量定义
unsigned int count = 0;
unsigned int upPressTime = 0;
unsigned int downPressTime = 0;
bit upIsPressed = 0;
bit downIsPressed = 0;


// 通用延时函数(ms级)

void delay1ms(unsigned char time)        //@11.0592MHz
{
        unsigned char data i, j;

        _nop_();
        _nop_();
        _nop_();
        i = 11;
        j = 190;
        do
        {
                while (--j);
        } while (--i);
}

// 按键扫描函数
void key()
{
    static bit clrIsPressed = 0;  // 清零键状态标志(静态变量保持状态)

    // --------------------- 上键检测 ---------------------
    if (up == 0)  // 按键按下(低电平有效)
    {
        if (!upIsPressed)  // 未触发长按标志
        {
            delay1ms(20);  // 消抖
            if (up == 0)  // 确认按下
            {
                upIsPressed = 1;        // 标记为已按下
                upPressTime = 0;        // 重置长按计时
                count = (count < 99999) ? count + 1 : 99999;  // 数值加1(上限99999)
                TM_Digtal_Display(count);  // 更新显示
            }
        }
        else  // 已触发长按标志,进入连续计数模式
        {
            upPressTime += 10;  // 计时(10ms/次)
            if (upPressTime >= LONG_PRESS_THRESHOLD && upPressTime % REPEAT_INTERVAL == 0)
            {
                count = (count < 99999) ? count + 1 : 99999;  // 连续加1
                TM_Digtal_Display(count);  // 更新显示
            }
        }
    }
    else  // 按键释放
    {
        if (upIsPressed)  // 清除长按状态
        {
            upIsPressed = 0;
            upPressTime = 0;
            delay1ms(20);  // 释放后消抖
        }
    }

    // --------------------- 下键检测 ---------------------
    if (down == 0)
    {
        if (!downIsPressed)
        {
            delay1ms(20);
            if (down == 0)
            {
                downIsPressed = 1;
                downPressTime = 0;
                count = (count > 0) ? count - 1 : 0;  // 数值减1(下限0)
                TM_Digtal_Display(count);
            }
        }
        else
        {
            downPressTime += 10;
            if (downPressTime >= LONG_PRESS_THRESHOLD && downPressTime % REPEAT_INTERVAL == 0)
            {
                count = (count > 0) ? count - 1 : 0;
                TM_Digtal_Display(count);
            }
        }
    }
    else
    {
        if (downIsPressed)
        {
            downIsPressed = 0;
            downPressTime = 0;
            delay1ms(20);
        }
    }

    // --------------------- 清零键检测 ---------------------
    if (clr == 0)  // 按下清零键
    {
        if (!clrIsPressed)  // 未触发清零状态
        {
            delay1ms(20);  // 消抖
            if (clr == 0)  // 确认按下
            {
                clrIsPressed = 1;  // 标记为已清零
                count = 0;         // 清零
                TM_Digtal_Display(count);
            }
        }
    }
    else  // 释放清零键
    {
        clrIsPressed = 0;  // 重置状态
    }
}

为什么出现“key.c(17): warning C280: 'time': unreferenced local variable”这个警告?key.h里添加了STC15.h头文件,而且STC15.h头文件是用STC-ISP生成的,并且整个文件已经保存在了工程文件夹里了。
回复

使用道具 举报 送花

3

主题

726

回帖

163

积分

等待验证会员

积分
163
发表于 7 天前 | 显示全部楼层
以下是一段专业的回复,基于您的问题和提示:

国芯人工智能回复:

尊敬的用户,您好!关于您提到的 warning 和 code 问题,请您详细描述代码和警告内容,以便我们更准确地帮助您解决问题。以下是可能的解释和建议:

1. 函数名与变量名冲突:  
   在您提供的 code 中,函数 delay1ms 的函数名与变量名 time 矛盾。在 C 语言中,函数名和变量名通常应一致以避免混淆。建议您在函数名中使用不同的变量名,例如 int delay1ms(unsigned char time);,以避免冲突。

2. 全局变量定义:  
   检查您的 code 中的全局变量定义是否正确。例如,是否有未定义或异常值的全局变量,如 count、upPressTime、downPressTime、upIsPressed 和 downIsPressed。如果这些变量未定义或有异常值,可能会导致编译错误。

3. 代码语法检查:  
   检查您的 code 中是否有语法错误,例如未声明函数(如 void delay1ms(unsigned char time);)或未声明全局变量(如 unsigned int count;)。

如果您能提供更详细的信息,包括代码的具体内容和警告细节,我们将能提供更准确的建议和解决方案。

希望这段回复对您有所帮助!如果您有进一步的问题,请随时告诉我。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:462
  • 最近打卡:2025-06-16 10:02:39

33

主题

2447

回帖

5168

积分

论坛元老

积分
5168
发表于 7 天前 | 显示全部楼层
有个没使用的变量,,,

好赖用翻译软件翻译一下啊
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2025-06-15 22:44:24
已绑定手机

19

主题

3231

回帖

5281

积分

论坛元老

积分
5281
发表于 7 天前 来自手机 | 显示全部楼层

void delay1ms(unsigned char time)    这个函数里面的time没用到警告了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-06-16 08:41:37
已绑定手机

67

主题

1909

回帖

4289

积分

荣誉版主

无情的代码机器

积分
4289
发表于 7 天前 | 显示全部楼层
说楼主懒吧,楼主又愿意贴这么长代码上来。
说楼主勤快吧,又不愿意翻译下告警信息。。。。
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:166
  • 最近打卡:2025-06-16 09:42:32

122

主题

162

回帖

365

积分

中级会员

积分
365
发表于 7 天前 | 显示全部楼层
erci*** 发表于 2025-6-9 17:56
说楼主懒吧,楼主又愿意贴这么长代码上来。
说楼主勤快吧,又不愿意翻译下告警信息。。。。 ...

小学毕业,不懂英文啊
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:166
  • 最近打卡:2025-06-16 09:42:32

122

主题

162

回帖

365

积分

中级会员

积分
365
发表于 7 天前 | 显示全部楼层
so*** 发表于 2025-6-9 17:45
void delay1ms(unsigned char time)    这个函数里面的time没用到警告了。

void delay1ms(unsigned int time)
好几个地方用到delay1ms(20);了,难道不对吗?

点评

函数调用虽然写了20. 但是你没发现,这个20传进去没有任何作用吗。。。。 是函数入参这个time在函数体内一行代码都没有用到~~  详情 回复 发表于 7 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:166
  • 最近打卡:2025-06-16 09:42:32

122

主题

162

回帖

365

积分

中级会员

积分
365
发表于 7 天前 | 显示全部楼层
_奶*** 发表于 2025-6-9 17:28
有个没使用的变量,,,

好赖用翻译软件翻译一下啊

问题是用上了delay1ms(20);
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-06-16 08:41:37
已绑定手机

67

主题

1909

回帖

4289

积分

荣誉版主

无情的代码机器

积分
4289
发表于 7 天前 | 显示全部楼层
cjt*** 发表于 2025-6-9 18:22
void delay1ms(unsigned int time)
好几个地方用到delay1ms(20);了,难道不对吗?

函数调用虽然写了20.
但是你没发现,这个20传进去没有任何作用吗。。。。
是函数入参这个time在函数体内一行代码都没有用到~~
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:166
  • 最近打卡:2025-06-16 09:42:32

122

主题

162

回帖

365

积分

中级会员

积分
365
发表于 7 天前 | 显示全部楼层
erci*** 发表于 2025-6-9 18:28
函数调用虽然写了20.
但是你没发现,这个20传进去没有任何作用吗。。。。
是函数入参这个time在函数体内 ...

以前做过的工程这样都可以,现在怎么不行了?
QQ20250609-183219.png

点评

不行,总之不行,代码没用到,只粗略延时了1ms~ 拿示波器打一下以前的工程看是不是20ms,一直错到了现在........  详情 回复 发表于 7 天前
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-16 11:03 , Processed in 1.839541 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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