1
LCD
을 사용하려고 할 때 약간의 문제가 있습니다. 나는 LCDHD44780
2x16과 PIC18F
을 MPLAB
으로 사용하고 있습니다. 내 코드가 좋다고 생각하고 프로젝트를 컴파일 할 수 있지만 간단한 문자를 표시하려고 할 때 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);
안녕하세요! 도움을 주셔서 감사합니다,하지만 액정 작업을 만들기 위해 노력하고 시간을 잃은 후 나는 올바른 핀을 프로그래밍하지 못한다는 것을 깨달았습니다 ... 문제는 코드가 아니 었습니다. 어쨌든 도움과 튜토리얼을 보내 주셔서 감사합니다! –