2015-04-06 110 views
-1

为什么我得到的错误:标识符“LCD_E_PORT”在此代码是未定义错误:标识符“LCD_E_PORT”未定义

#include <msp430f5438a.h> 
#include "IO_functions.h" 
#define LCD_E_PORT PORT_6 
#define LCD_E  PIN_4 

#include "LCD1602.h" 

int main(void) 
{ 
WDTCTL = WDTPW + WDTHOLD;  // Stop watchdog timer 
P4DIR = 0x03; 
P4OUT = 0x00; 

output_bit(PORT_4, PIN_7, 1); 
output_bit(PORT_4, PIN_7, 0); 
lcd_send_nibble(0x0f); 

while(1) 
{ 
    P4OUT ^= BIT0; 
    __delay_cycles(500000); 
} 
} 

既然我已经在我的代码上我不定义LCD_E_PORT了解这个错误来自哪里。

这是LCD1602.c在我使用LCD_E_PORT:

#include <msp430f5438a.h> 
#include "LCD1602.h" 
#include "IO_functions.h" 


void lcd_send_nibble(unsigned char nibble) 
{ 
    output_bit(LCD_DB4_PORT, LCD_DB4, !!(nibble & 1)); 
    output_bit(LCD_DB5_PORT, LCD_DB5, !!(nibble & 2)); 
    output_bit(LCD_DB6_PORT, LCD_DB6, !!(nibble & 4)); 
    output_bit(LCD_DB7_PORT, LCD_DB7, !!(nibble & 8)); 
    __delay_cycles(8); 
    output_bit(LCD_E_PORT, LCD_E, 1); 
    __delay_cycles(16); 
    output_bit(LCD_E_PORT, LCD_E, 0); 
} 

void lcd_send_byte(unsigned char data_instr, unsigned char data) 
{ 
    output_bit(LCD_RS_PORT, LCD_RS, 0); 
    __delay_cycles(480); 
    if(data_instr == DATA) 
     output_bit(LCD_RS_PORT, LCD_RS, 1); 
    else 
     output_bit(LCD_RS_PORT, LCD_RS, 0); 
    __delay_cycles(8); 
    output_bit(LCD_E_PORT, LCD_E, 0); 
    lcd_send_nibble(data >> 4); 
    lcd_send_nibble(data & 0x0F); 
} 

void lcd_init(void) 
{ 
    unsigned char i; 
    output_bit(LCD_RS_PORT, LCD_RS, 0); 
    output_bit(LCD_E_PORT, LCD_E, 0); 
    __delay_cycles(120000); 
    for(i=0 ;i < 3; i++) 
    { 
     lcd_send_nibble(0x03); 
     __delay_cycles(25000); 
    } 
    lcd_send_nibble(0x02); 
    lcd_send_byte(INSTR, 0x28); 
    __delay_cycles(25000); 
    lcd_send_byte(INSTR, 0x0C); 
    __delay_cycles(25000); 
    lcd_send_byte(INSTR, 0x01); 
    __delay_cycles(25000); 
    lcd_send_byte(INSTR, 0x06); 
    __delay_cycles(25000); 
    } 
+0

有没有可能在''IO_functions.h''中使用'LCD_E_PORT'? – 2015-04-06 11:35:41

+0

不是。错误出现在'LCD1602.c' – 2015-04-06 11:42:20

+0

顺便说一句,你似乎没有在任何地方使用'LCD_E_PORT'。那么拥有它的目的是什么? – 2015-04-06 11:47:55

回答

0

按照更新的代码中,LCD_E_PORT定义从LCD1602.c文件是不可见的。

您可能希望在头文件(LCD1602.h或任何其他的,您选择的)中添加#define本身,它将包含在所有使用宏的源​​文件中。

+0

我已经评论过该行,因为我想从我的源代码中更改宏。 https://drive.google.com/file/d/0B5Y7MPFIDn9dXzJUNEZRWi1vSUk/view?usp=sharing – 2015-04-06 12:13:07

+0

@RadoslawKrasimirow再次,我看不到您的链接。但是,请理解,您无法在运行时更改宏值。它只能在编译时进行操作。如果你想使用'#ifdef'和'#undef'指令的更高版本,cosider也是如此。 – 2015-04-06 12:15:11

相关问题