2015-01-04 98 views
0

我有一个错误的代码在爱特梅尔工作室 错误是:expected ')' before numeric 这里是我的代码(我用这个作为atmega32a键盘码):AVR编程

#include <util/delay.h> 
#define c1 PINB 4 
#define c2 PINB 5 
#define c3 PINB 6 
#define c4 PINB 7 

unsigned char scan[4]={0XFE,0XFD,0XFB,0XF7}; 
unsigned char arrkey[16]={1,2,3,20,4,5,6,30,7,8,9,40,10,0,11,50}; 

unsigned char keypad() { 
    unsigned char r,c,k; 
    DDRB=0X0F; 
    PORTB=0XFF; 

    while(1) { 
     for (r=0; r<4; r++) { 
      c=4; 
      PORTB=scan[r]; 
      _delay_us(10); 
      if(c1 == 0) c=0; 
      if(c2 == 0) c=1; 
      if(c3 == 0) c=2; 
      if(c4 == 0) c=3; 

      if (!(c==4)) { 
       k=arrkey[(r*4)+c]; 
       while(c1==0); 
       while(c2==0); 
       while(c3==0); 
       while(c4==0); 
       _delay_ms(50); 
       return k; 
      } 
     } 
    } 
} 
+3

你能正确地缩进你的程序:

四个宏,以便可以如下定义? – ouah 2015-01-04 12:52:41

+0

在哪一行发生此错误? – ezaquarii 2015-01-04 14:07:01

+0

如果只有一条语句的代码 – 2015-01-04 14:49:38

回答

1

的问题是你的#define语句,因为宏扩展塑造你的代码是这样的:

if(PINB 4 == 0) c = 0; 

这是一个语法错误,如PINB被定义为M32定义文件寄存器。 也许你的意思是#define c1 PINB4

0

PINB是一个8位寄存器,可以通过位操作来处理。
您可以使用掩码测试PINB的某些位。
如果您想知道PINB的第4位是否为0,您可以使用0b00010000屏蔽PINB
我想你想通过#define c1 PINB 4做同样的事情。

#define c1 (PINB & 0b00010000) //4th bit 
#define c2 (PINB & 0b00100000) //5th bit 
#define c3 (PINB & 0b01000000) //6th bit 
#define c4 (PINB & 0b10000000) //7th bit