mikolajmki

mikro_lab7

Jun 7th, 2022 (edited)
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.07 KB | None | 0 0
  1. #ifndef F_CPU
  2. #define F_CPU 1000000UL
  3. #endif
  4. #include<avr/io.h>
  5. #define LCD_PORT PORTB
  6. #define RS (1<<PB2)
  7. #define E (1<<PB3)
  8. #include<util/delay.h>
  9.  
  10.  
  11. void wyslijPolBajta(char dane)
  12. {
  13.     LCD_PORT |= E; //włączam pin enable
  14.     _delay_us(1); //czas na propagację
  15.     LCD_PORT = (LCD_PORT & 0x0F) | (dane & 0xF0); //przekazujemy dane
  16.     _delay_us(1); //czas na propagację
  17.     LCD_PORT &= ~E; // wyłączam pin enable
  18.     _delay_ms(1); //czas na przetworzenie
  19. }
  20.  
  21. void wyslijKomende(char dane)
  22. {
  23.     LCD_PORT &= RS; // wyłączamy RS (wymagane, aby traktowane było jak komenda)
  24.     wyslijPolBajta(dane); //wysyłamy starsze 4 bity na wyświetlacz
  25.     wyslijPolBajta((dane<<4)); //wysyłamy młodsze 4 bity na wyświetlacz
  26.     _delay_ms(3); //czas na przetworzenie
  27. }
  28. void wyslijZnak(char dane)
  29. {
  30.     LCD_PORT |= RS; // włączamy RS (tryb wprowadzenia danych)
  31.     wyslijPolBajta(dane); //wysyłamy starsze 4 bity na wyświetlacz
  32.     wyslijPolBajta((dane<<4)); //wysyłamy młodsze 4 bity na wyświetlacz
  33.     _delay_ms(3); //czas na przetworzenie
  34. }
  35.  
  36. int main(void)
  37. {
  38.     _delay_ms(15); //opóźnienie, aby wyświetlacz na pewno był gotowy do inicjalizacji; //ustawienie PA4-7 na wyjście
  39.     DDRB |= 0xFF; //Ustawiene PB0-1 na wyjście
  40.    
  41.     wyslijPolBajta(0x30); //inicjalizacja wyświetlacza zgodnie z dokumentacją
  42.     _delay_ms(5);
  43.     wyslijPolBajta(0x30);
  44.     _delay_us(105);
  45.     wyslijKomende(0x32);
  46.     wyslijKomende(0x28); // Ustawiam tryb 2 linii i znaków 5x8
  47.     wyslijKomende(0x08); // zgodnie z dokumentacją (str. 46), musimy wyłączyć wyświetlacz
  48.     wyslijKomende(0x01); // zgodnie z dokumentacją, czyścimy wyświetlacz
  49.     wyslijKomende(0x07); // Ustawiam kierunek wyprowadzania tekstu i sposób wyprowadzania na wyświetlacz
  50.     wyslijKomende(0x0C); // Włączam wyświetlacz, kursor niewidoczny, znak nie miga
  51.     wyslijKomende(0x8F); // Ustawiam kursor na odpowiedniej pozycji (ostatnia w pierwszej linii)
  52.    
  53.     char* nazwisko = "Marcinkowski";
  54.    
  55.     while(*nazwisko)
  56.     {
  57.         wyslijZnak(*nazwisko++);
  58.     }
  59.    
  60. }
Add Comment
Please, Sign In to add comment