-
Data: 2010-07-19 13:13:18
Temat: Obsługa LCD na HD44780 w C (WinAVR)
Od: Jan Górski <g...@o...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Witam. Napisałem sterownik wyświetlacza wspomagając się jakąś
zagramaniczną książką w C, używając kombajnu WinAVR + AVR Studio.
Kompiluje się bez błędów. Natomiast nie działa jak powinno, w
symulacji wyświetla bzdury, w "realu" za to nic.
Obsługa jest 4 bitowa. Schemat wyprowadzeń w/g płytki testowej and-
tech (R/W zwarte do masy w tym schemacie, a pin0 - podświetlenie) :
http://www.and-tech.pl/EvB4.3/Instrukcja_EvB_4.3.pdf
Symulowałem w Hapsim z ustawieniem 4 bitowym (dobrym?):
Data : PORTA, HighNibble:4-7, LowNibble:4-7
EN : PORTA3
Read/Write : PORTA0
Select Pin: PORTA2
KOD : -----------------------------
#include <avr/io.h>
#include <util/delay.h>
// F_CPU zdefiniowane w opcjach projektu na 16MHz
#define LCD_DataPort PORTA
#define LCD_DataDR DDRA
#define LCD_DataPin PINA
#define LCD_RS 2
#define LCD_RW 0
#define LCD_EN 3
void delay_us(int d) {
_delay_us(d);
}
void delay_ms(int d) {
_delay_ms(d);
}
void lcdCommand(unsigned char cmnd) {
LCD_DataPort = (LCD_DataPort & 0x0F) | (cmnd & 0xF0);
LCD_DataPort &= ~ (1<<LCD_RS); // 0 -> command
LCD_DataPort &= ~ (1<<LCD_RW);
//
LCD_DataPort |= ~ (1<<LCD_EN);
delay_us(1);
LCD_DataPort &= ~ (1<<LCD_EN);
delay_us(20);
LCD_DataPort = (LCD_DataPort & 0x0F) | (cmnd << 4);
//
LCD_DataPort |= ~ (1<<LCD_EN);
delay_us(1);
LCD_DataPort &= ~ (1<<LCD_EN);
}
void lcdData(unsigned char data) {
LCD_DataPort = (LCD_DataPort & 0x0F) | (data & 0xF0);
LCD_DataPort |= (1<<LCD_RS); // 1 -> data
LCD_DataPort &= ~ (1<<LCD_RW); // 0 -> write
LCD_DataPort |= (1<<LCD_EN); // H to L pulse
delay_us(1);
LCD_DataPort &= ~ (1<<LCD_EN);
LCD_DataPort = (LCD_DataPort & 0x0F) | (data << 4);
LCD_DataPort |= (1<<LCD_EN); // H to L pulse
delay_us(1);
LCD_DataPort &= ~ (1<<LCD_EN);
}
void lcd_init() {
LCD_DataDR = 0xFF;
LCD_DataPort &= ~(1<<LCD_EN);
delay_us(2000);
lcdCommand(0x33);
delay_us(100);
lcdCommand(0x32);
delay_us(100);
lcdCommand(0x28);
delay_us(100);
lcdCommand(0x0e);
delay_us(100);
lcdCommand(0x01);
delay_us(2000);
lcdCommand(0x06);
delay_us(100);
}
void lcd_print( char *str) {
unsigned char i=0;
while(str[i]!=0) {
lcdData(str[i]);
i++;
}
}
int main(void) {
lcd_init();
while(1) {
lcd_print("a");
delay_ms(10);
}
return 0;
}
----------------------------------------
Co zrobiłem źle ? Co powinienem poprawić ? Dopiero zaczynam z tym
zabawę i przyjemniej się uczyć "z nauczycielem", niż bez, bo szybciej.
Patrzyłem na ten kod i sam chyba za łatwo nie znajdę błędu. Dzięki za
pomoc.
Następne wpisy z tego wątku
- 20.07.10 06:38 Jan Górski
Najnowsze wątki z tej grupy
- Odbiornik ADS-B i wzmacniacze
- Thunderbird i dysk...
- opornosc falowa
- Bateria 9V 6F22, alkaliczna v cynkowa, samorozładowanie, bateria wysokiej trwałości do miernika
- Tani zakup z ali?
- w czasach LED komary mają ciężko
- walizka z kodami
- Rejestrator temperatur - termopara, siec
- Router LTE z możliwością zmian MTU
- Fajny film widziałem...
- Jaka ładowarka sieciowa do Iphona?
- Taśma izolacyjna do prac elektrycznych
- Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
Najnowsze wątki
- 2025-07-27 Jest porozumienie w sprawie umowy handlowej UE-USA
- 2025-07-27 Dziwne... :)
- 2025-07-27 Czy to jeszcze dziala
- 2025-07-27 Fotele firmy RECARO Aircraft Seating ze Świebodzina dla nowych samolotów LOT
- 2025-07-27 Fotele firmy RECARO Aircraft Seating ze Świebodzina dla nowych samolotów LOT
- 2025-07-26 Elektrownia Siersza w kolejce do zaorania
- 2025-07-26 Odkryte w Polsce złoża ropy i gazu powodują nerwowość u Niemców
- 2025-07-26 Odbiornik ADS-B i wzmacniacze
- 2025-07-26 Next.Gazeta informuje, że od 2029 roku (lub 2030 roku) cyfrowe euro stanie się prawnym środkiem płatniczym w całej UE
- 2025-07-26 Warszawa => Head of Technology <=
- 2025-07-26 Warszawa => Strategic Account Manager <=
- 2025-07-26 Mołdawia. Demokratura zastępuje demokrację.
- 2025-07-26 Prawicowa influencerka Candace Owens zapowiada walkę do końca ,,dla całego świata" [z parą prezydencką Macron]
- 2025-07-26 Next.Gazeta informuje, że od 2029 roku (lub 2030 roku) cyfrowe euro stanie się prawnym środkiem płatniczym w całej UE
- 2025-07-26 Ukraińscy kibice [w trakcie meczu] wzywali do zabijania Serbów