- 打卡等级:常住居民III
- 打卡总天数:143
- 最近打卡:2025-04-29 09:29:30
高级会员
- 积分
- 982
|
按键是接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[15] = {0x5F, 0xED, 0xDB, 0xE7, 0x00, 0xFF, 0x00, 0xFF, 0xED, 0xDB, 0xE7, 0x00, 0xFF, 0x00, 0xFF};
uchar table2[20] = {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。即可。
|
|