LM016L LCD 디스플레이를 인터페이스하기 위해 Atmega-16 마이크로 컨트롤러를 프로그래밍했습니다. 내가 깜박 커서를 만드는처럼 LCD에 명령을 보낼 때, 그것은 완벽하게 잘 작동LCD가 명령을 따르지만 문자를 표시하지 않습니다.
#include <avr/io.h>
#include <util/delay.h>
#define MrLCDsCrib PORTB
#define DataDir_MrLCDsCrib DDRB
#define MrLCDsControl PORTD
#define DataDir_MrLCDsControl DDRD
#define LightSwitch 5
#define ReadWrite 7
#define BiPolarMood 2
void Check_IF_MrLCD_isBusy(void);
void Peek_A_Boo(void);
void Send_A_Command(unsigned char command);
void Send_A_Character(unsigned char character);
int main(void) {
DataDir_MrLCDsControl |= 1 << LightSwitch | 1 << ReadWrite | 1 << BiPolarMood;
_delay_ms(15);
Send_A_Command(0x01); //Clear Screen
_delay_ms(20);
Send_A_Command(0x38); //8-bit mode
_delay_ms(20);
Send_A_Command(0b00001110); // cursor on
_delay_ms(20);
Send_A_Command(0x0F); // cursor blinking
_delay_ms(20);
Send_A_Character(0x4E); //N
_delay_ms(20);
Send_A_Character(0x65); //e
_delay_ms(20);
Send_A_Character(0x77); //w
_delay_ms(20);
while (1) {}
}
void Check_IF_MrLCD_isBusy() {
DataDir_MrLCDsCrib = 0;
MrLCDsControl |= 1 << ReadWrite;
MrLCDsControl &= ~1 << BiPolarMood;
while (MrLCDsCrib >= 0x80) {
Peek_A_Boo();
}
DataDir_MrLCDsCrib = 0xFF;
}
//Peek_A_Boo() writes the data to or from the LCD that are waiting to be written
void Peek_A_Boo() {
MrLCDsControl |= 1 << LightSwitch;
asm volatile("nop");
asm volatile("nop");
MrLCDsControl &= ~1 << LightSwitch;
}
void Send_A_Command(unsigned char command) {
Check_IF_MrLCD_isBusy();
MrLCDsCrib = command;
MrLCDsControl &= ~ ((1 << ReadWrite) | (1 << BiPolarMood));
Peek_A_Boo();
MrLCDsCrib = 0;
}
void Send_A_Character(unsigned char character) {
Check_IF_MrLCD_isBusy();
MrLCDsCrib = character;
MrLCDsControl &= ~ (1 << ReadWrite);
MrLCDsControl |= 1 << BiPolarMood;
Peek_A_Boo();
MrLCDsCrib = 0;
}
다음과 같이 프로그램입니다. 그러나 Send_A_Character() 함수가 호출되어 화면에 문자를 쓰면 작동하지 않습니다. LCD에 아무것도 표시하지 못합니다. 위의 코드에는 구문 오류가 없습니다. 만약 누군가 LCD가 화면에 아무 것도 표시하지 못하게하는 논리적 오류를 지적 할 수 있다면 좋을 것입니다. 심지어 2 초 각 지점에서 지연을 늘리려고했는데 그 작동하지 않았다.
당신은 PDF 회로도와 uc에와 LCD에 대한 데이터 시트에 대한 몇 가지 링크에 대한 링크를 게시 할 수 있습니까? – Nick
LCD 데이터 시트 링크 : [link] http://pdf1.alldatasheet.com/datasheet-pdf/view/146552/HITACHI/LM016L.html –
마이크로 컨트롤러 데이터 시트 링크 : [link] http://www.atmel.com /images/doc2466.pdf –