Jag sitter och försöker få igång på en display, men det vill sig inte alls; det är bara svart.
Programmet körs på en PIC16F877A i 20MHz:
Kod: Markera allt
/*
Display i 4-bit läge
PORTD LCD
RD7 -> D7
RD6 -> D6
RD5 -> D5
RD4 -> D4
RD3 -> E
RD2 -> RS
WR på LCD är ansluten till GND.
*/
#define E PORTD.F3
#define RS PORTD.F2
#define LEDG PORTC.F7
void Lcd_Send4bit(char lcd_data) {
E = 0;
PORTD = (PORTD & 0x0F) | (lcd_data & 0xF0); // Send upper nibble
E = 1;
delay_us(40);
E = 0;
PORTD = (PORTD & 0x0F) | (lcd_data << 4); // Send lower nibble
E = 1;
delay_us(40);
}
void Lcd_Text(char ascii_) {
RS = 1; // Send to LCD-DDRAM (Data)
Lcd_Send4bit(ascii_);
}
void Init_Lcd() {
delay_ms(40); // Wait for LCD to power up
RS = 0; // Instructions
E = 0;
PORTD = 0b00110000; // 0x30
E = 1;
delay_ms(5);
E = 0;
PORTD = 0b00110000; // 0x30
E = 1;
delay_us(100);
E = 0;
PORTD = 0b00110000; // 0x30
E = 1;
delay_us(40);
E = 0;
PORTD = 0b00100000; // set 4-bit
E = 1;
delay_us(40);
Lcd_Send4bit(0b00101000); // 4-bit, 2 lines, 5x8
Lcd_Send4bit(0b00010100); // Cursor move right
Lcd_Send4bit(0b00001100); // LCD on, cursor/blink off
Lcd_Send4bit(0b00000110); // Entry mode set
Lcd_Send4bit(0b00000010); // Address=0 (return home)
delay_ms(2); // > 1.52 ms
Lcd_Send4bit(0b00000001); // Clear display
delay_ms(20);
}
void main () {
/* I/O Settings */
TRISA = 0b11111111;
TRISB = 0b11111111;
TRISC = 0b00010100;
TRISD = 0b00000001;
TRISE = 0b11111000;
PORTA = 0x00;
PORTB = 0x00;
PORTC = 0x00;
PORTD = 0x00;
PORTE = 0x00;
Init_Lcd();
Lcd_Text(0b01000011); // Print "C"
while (1) {
LEDG = 1; // Fastnade inte i init, således.
}
}
EDIT: Ändrade rubrik: LCD -> OLED.
/GH