谷雨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 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目