yzhkpli 发表于 2025-1-2 20:38:47

通义千问·给出的按键检测程序也有错


按键是接stc89c52的P3.4和P3.5.
下面这个问题是通义千问·给的错误代码,而且告知错误后,还是没解决。自己尝试解决出来的(已解决)。


#include <reg52.h>

#define LED P0
sbit KEY1 = P3^4;
sbit KEY2 = P3^5;

typedef unsigned char uchar;
typedef unsigned int uint;
uint cnt;
bit showModeFlag = 0;

uchar table1 = {0x5F, 0xED, 0xDB, 0xE7, 0x00, 0xFF, 0x00, 0xFF, 0xED, 0xDB, 0xE7, 0x00, 0xFF, 0x00, 0xFF};
uchar table2 = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F, 0xFF, 0x00, 0xFF, 0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD, 0xFE, 0x01};

void delay(uint cnt) {
    while(cnt--);
}

void Led_Show1() {
    uint i;
    for (i = 0; i < 15; i++) {
      LED = table1;
      delay(8000); // 增加延时时间
      if (showModeFlag != 1) {
            break;
      }
    }
}

void Led_Show2() {
    uint i;
    for (i = 0; table2 != 0x01; i++) {
      LED = table2;
      delay(8000); // 增加延时时间
      if (showModeFlag != 2) {
            break;
      }
    }
}

// 定义 debounce 函数,参数类型为 sbit
bit debounce(sbit key) {
    static bit lastState = 1; // 静态变量,保存上一次按键状态,默认为未按下(高电平)
    bit currentState = key;   // 获取当前按键状态

    // 检查当前按键是否按下且上次按键状态为未按下
    if (currentState == 0 && lastState == 1) {
      delay(5); // 短暂延时去抖动
      // 再次检查按键状态以确认按键确实按下
      if (key == 0) {
            lastState = 0; // 更新按键状态为已按下
            return 1;      // 返回1表示按键有效按下
      }
    }
    // 如果当前按键状态为释放,则更新lastState为1
    else if (currentState == 1) {
      lastState = 1;
    }

    // 默认情况下返回0,表示按键未有效按下
    return 0;
}

void main() {
    while (1) {
      if (debounce(KEY1)) {
            showModeFlag = 1;
            Led_Show1();
            showModeFlag = 0; // 重置标志位
      }
      if (debounce(KEY2)) {
            showModeFlag = 2;
            Led_Show2();
            showModeFlag = 0; // 重置标志位
      }
    }
}


报错是

Rebuild started: Project: hc_51_key2_led_show
Rebuild target 'Target 1'
compiling main.c...
main.c(42): error C141: syntax error near 'sbit', expected 'bit'
main.c(44): error C202: 'key': undefined identifier
main.c(50): error C202: 'key': undefined identifier
Target not created.
Build Time Elapsed:00:00:00



怎么也不知道错哪里了。
突然貌似看明白了。
把42行参数定义的sbit key改成bit key。即可。

soma 发表于 2025-1-2 22:24:49

自动生成的代码还需要手动检测。。

wangxiangtan 发表于 2025-1-3 08:09:07

智障AI了解一下

yzhkpli 发表于 2025-1-3 10:13:59

dongge 发表于 2025-1-2 22:27
好像是阿里的ai吧?

对头。阿里的通义千问,百度的文心一言。李彦宏这个我还没用过

yzhkpli 发表于 2025-1-3 12:35:57

dongge 发表于 2025-1-3 12:33
头一次见ai写代码
老哥,多接触下吧。这个挺管用的。创作还有点差距。但是搞51这些有点年头的传统技术,还是基本没问题。

到了8h,51u这样的就有点不给力了。

_奶咖君_ 发表于 2025-1-3 14:02:37

<p>让他生成一些固定的算法类的东西还可以,,涉及一些业务代码就差点儿意思了。。</p>
<p>不过一些类似的但又没法抽象出来的代码,照葫芦画瓢的功能用的还是比较顺心。。</p>

yzhkpli 发表于 2025-1-3 14:25:22

_奶咖君_ 发表于 2025-1-3 14:02
让他生成一些固定的算法类的东西还可以,,涉及一些业务代码就差点儿意思了。。
不过一些类似的但又没法抽 ...

直接出一整套代码貌似做不到,但是可以引导他加以修改

_奶咖君_ 发表于 2025-1-3 15:06:40

yzhkpli 发表于 2025-1-3 14:25
直接出一整套代码貌似做不到,但是可以引导他加以修改

是的,,不过他们的代码还是偏向纯软件开发的,,,,沾点儿底层的东西就开始瞎写了,,给他说了不能用指针访问寄存器,就非得用,,气笑了,后来就放过它,让它写点儿别的了

millxhcx 发表于 2025-1-7 07:53:15

_奶咖君_ 发表于 2025-1-3 15:06
是的,,不过他们的代码还是偏向纯软件开发的,,,,沾点儿底层的东西就开始瞎写了,,给他说了不能用指 ...

用的deepv3试试
页: [1]
查看完整版本: 通义千问·给出的按键检测程序也有错