谷雨553 2022-08-01 17:13 采纳率: 100%
浏览 75
已结题

关于#51单片机#keil4报错的问题,如何解决?

用Keil4编写的51单片机矩阵键盘代码,始终是报错:
矩阵键盘.C(81): error C141: syntax error near 'u8'
矩阵键盘.C(81): error C202: 'cod1': undefined identifier
矩阵键盘.C(84): error C202: 'cod1': undefined identifier
矩阵键盘.C(85): error C202: 'numcode': undefined identifier
矩阵键盘.C(86): error C202: 'num_code': undefined identifier

附上图片:

img

img

img

附上全部代码:

#include<reg52.h>
#define seg P0          //数码管段选
#define bitt P2              //CC共阴极数码管 位选
#define keypad P1     //矩阵键盘的控制管脚
typedef  unsigned char u8;
typedef  unsigned int u16;
u8 code display_bit[]={0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c};
u8 code display_seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(u8 ms)
{
    u16 x,y;
    for(x=ms;x>0;x--)
        for(y=110;y>0;y--);
}

u8 keypad_cod()            //判断是否按键并编码
{
    u8 temp1,temp2,temp3;
    keypad = 0x0f;
    delay(1);
    temp1 = keypad;
    if(temp1 != 0x0f)
    {
        delay(5);
        temp1 = 0x0f;
        if(temp1 != 0x0f)
        {
            temp2 = temp1;
            keypad = 0xf0;
            delay(1);
            temp1 = keypad;
            temp3 = temp1|temp2;
            return (temp3);
        }
    }
}


u8 keypad_encode(u8 cod)      //解码并返回数字0-15
{
    u8 num;
    switch(cod)
    {
        case 0x77: num=0; break; 
        case 0x7b: num=1; break;
        case 0x7d: num=2; break;
        case 0x7e: num=3; break;
        case 0xb7: num=4; break;
        case 0xbb: num=5; break;
        case 0xbd: num=6; break;
        case 0xbe: num=7; break;
        case 0xd7: num=8; break;
        case 0xdb: num=9; break;
        case 0xdd: num=10; break;
        case 0xde: num=11; break;
        case 0xe7: num=12; break;
        case 0xeb: num=13; break;
        case 0xed: num=14; break;
        case 0xee: num=15; break;
        default:  break;
    }
    return (num);
}  


void led_display(u8 num_seg)            //通过数码管输出数字
{
    seg = display_seg[num_seg];
    bitt = display_bit[7];
    delay(1);
}


void main()
{
    seg = 0x00;
    u8 cod,num_code;
    while(1)
    {
        cod = keypad_cod();
        numcode = keypad_encode(cod);
        led_display(num_code);
    }    
} 

我感觉这很无厘头,有可能是keil4的问题,我把它复制到VS2010里面81-86行就没有错误。
大家帮忙看看有没有其它问题,谢谢了。

  • 写回答

3条回答 默认 最新

  • qllaoda 2022-08-01 17:54
    关注

    main函数里,
    seg = 0x00;
    u8 cod,num_code;
    这两行交换一下位置,c51用的是c89标准,所有变量的定义必须放在可执行语句之前。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月2日
  • 已采纳回答 8月1日
  • 创建了问题 8月1日

悬赏问题

  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示
  • ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作