2016-07-27 14 views
1

LCD을 사용하려고 할 때 약간의 문제가 있습니다. 나는 LCDHD44780 2x16과 PIC18FMPLAB으로 사용하고 있습니다. 내 코드가 좋다고 생각하고 프로젝트를 컴파일 할 수 있지만 간단한 문자를 표시하려고 할 때 LCD에서 아무 일도 일어나지 않습니다. 다음 코드로 잘못 무엇 : 내 .H 파일에서PIC18이 작동하지 않는 LCDHD44780

#include "LCD_HD44780.h" 


void LCD_HD44780_reset(void) 
{ 
    TRIS_D7 = 0; 
    TRIS_D6 = 0; 
    TRIS_D5 = 0; 
    TRIS_D4 = 0; 
    DATA_D7 = 0; 
    DATA_D6 = 0; 
    DATA_D5 = 0; 
    DATA_D4 = 0; 

    RW_PIN = 0; // R/W pin made low 
    RS_PIN = 0; // Register select pin made low 
    E_PIN = 0; // Clock pin made low 
    TRIS_RW = 0; // All control signals made outputs 
    TRIS_RS = 0; 
    TRIS_E = 0; 

    __delay_ms(15); 

    LCD_HD44780_sendCmd8bit(0x30); 
    __delay_ms(10); 
    LCD_HD44780_sendCmd8bit(0x30); 
    __delay_ms(10); 
    LCD_HD44780_sendCmd8bit(0x30); 
    __delay_ms(10); 
} 

void LCD_HD44780_init(void) 
{ 
    LCD_HD44780_reset(); 

    // Enable 4 bit mode 
    LCD_HD44780_sendCmd8bit(0x20); 
    __delay_ms(10); 
    LCD_HD44780_sendCmd(0x28);   //Function set: 4 bit interface 
    LCD_HD44780_sendCmd(0x0f); //Display on/off: display on, cursor off,  blink off 
    LCD_HD44780_ClearScreen(); 
    LCD_HD44780_sendCmd(0x06); //Entry mode: increment, no shift 
} 

void LCD_HD44780_sendCmd8bit(BYTE c) 
{ 
    RW_PIN = 0; // Set the control signals 
    RS_PIN = 0; // for sending a command 

    LCD_HD44780_writeNibble((c & 0xF0) >> 4); //send only 4 msb 
} 

void LCD_HD44780_sendCmd(BYTE c) 
{ 
    RW_PIN = 0; // Set the control signals 
    RS_PIN = 0; // for sending a command 

    LCD_HD44780_writeNibble((c & 0xF0) >> 4); 
    LCD_HD44780_writeNibble(c & 0x0F); 
} 

void LCD_HD44780_sendData(BYTE d) 
{ 
    RW_PIN = 0; // Set the control signals 
    RS_PIN = 1; // for sending data 

    LCD_HD44780_writeNibble((d & 0xF0) >> 4); 
    LCD_HD44780_writeNibble(d & 0x0F); 
} 

void LCD_HD44780_sendStr(BYTE *str) 
{ 
    while(*str != 0) 
    { 
     LCD_HD44780_sendData(*str++); 
    } 
} 

void LCD_HD44780_setCursor(BYTE row, BYTE col) 
{ 
    BYTE command; 
    BYTE add = row*0x40 + col; 
    command = 0x80 | add; 
    LCD_HD44780_sendCmd(command); 
} 


void LCD_HD44780_writeNibble(BYTE nb) 
{ 
    BYTE a; 

    if(nb & 0x08) 
    { 
     DATA_D7 = 1; 
    } 
    else 
    { 
     DATA_D7 = 0; 
    } 

    if(nb & 0x04) 
    { 
     DATA_D6 = 1; 

    } 
    else 
    { 
     DATA_D6 = 0; 
    } 

    if(nb & 0x02) 
    { 
     DATA_D5 = 1; 
    } 
    else 
    { 
     DATA_D5 = 0; 
    } 

    if(nb & 0x01) 
    { 
     DATA_D4 = 1; 

    } 
    else 
    { 
     DATA_D4 = 0; 
    } 

    E_PIN = 1; 

    for(a = 0; a < 4; a++); 

    E_PIN = 0; 

    for(a = 0; a < 4; a++); 
} 

는 내가 가지고 :

#define _XTAL_FREQ 20000000 

#define RW_PIN LATCbits.LATC0  /* PORT for RW */ 
#define TRIS_RW TRISCbits.TRISC0  /* TRIS for */ 
#define RS_PIN LATCbits.LATC2  /* PORT for RS */ 
#define TRIS_RS TRISCbits.TRISC2  /* TRIS for RS */ 
#define E_PIN LATCbits.LATC1  /* PORT for E */ 
#define TRIS_E TRISCbits.TRISC1  /* TRIS for E */ 
#define DATA_D7 LATEbits.LATE7  // LAT for DISP 7 
#define DATA_D7_RD PORTEbits.RE7  // PORT for DISP 7 
#define TRIS_D7 TRISEbits.TRISE7  // TRIS for DISP 7 
#define DATA_D6 LATEbits.LATE6  // LAT for DISP 6 
#define DATA_D6_RD PORTEbits.RE6  // PORT for DISP 6 
#define TRIS_D6 TRISEbits.TRISE6  // TRIS for DISP 6 
#define DATA_D5 LATEbits.LATE5  // LAT for DISP 5 
#define DATA_D5_RD PORTEbits.RE5  // PORT for DISP 5 
#define TRIS_D5 TRISEbits.TRISE5  // TRIS for DISP 5 
#define DATA_D4 LATEbits.LATE4  // LAT for DISP 4 
#define DATA_D4_RD PORTEbits.RE4  // PORT for DISP 4 
#define TRIS_D4 TRISEbits.TRISE4  // TRIS for DISP 4 

#define LCD_HD44780_CursorHome() LCD_HD44780_sendCmd(0x02); 
#define LCD_HD44780_ScrollLeft() LCD_HD44780_sendCmd(0x18); 
#define LCD_HD44780_ScrollRight() LCD_HD44780_sendCmd(0x1E); 
#define LCD_HD44780_ClearScreen() LCD_HD44780_sendCmd(0x01); 
#define LCD_HD44780_CursorOff()  LCD_HD44780_sendCmd(0x0C); 
#define LCD_HD44780_ClearOn()  LCD_HD44780_sendCmd(0x0E); 

답변

0

브루노 : 여기 는 PIC18 시리즈와 같은 LCD에 대한 자습서를하고있다 MCU Click Here

또한 하드웨어를이 참조 디자인과 비교하는 것이 좋습니다. enter image description here

+0

안녕하세요! 도움을 주셔서 감사합니다,하지만 액정 작업을 만들기 위해 노력하고 시간을 잃은 후 나는 올바른 핀을 프로그래밍하지 못한다는 것을 깨달았습니다 ... 문제는 코드가 아니 었습니다. 어쨌든 도움과 튜토리얼을 보내 주셔서 감사합니다! –