logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

atmega8 - Wyświetlanie polskich znaków na LCD w symulacji Proteus

kotek12321 11 Mar 2014 11:08 1677 2
  • #1 13392062
    kotek12321
    Poziom 12  
    Witam serdecznie,
    Piszę ponieważ mam problem, z którym nie mogę sobie poradzić już kilka dni. Niby wszystko jest ok, wyświetlacz się włącza, wypisuje tekst który podaje lecz w przypadku polskiego znaku pojawia się inny kształt. Całość symuluje w proteusie niestety nie mam możliwości złożenia układu. Poniżej wstawiam kod programu oraz biblioteki. Z góry dziękuje za pomoc.

    Kod programu:
    Spoiler:
    #include <avr/io.h>
    #define F_CPU 1000000UL
    #include <util/delay.h>
    #include "HD44780.h"



    int main(void)
    {


    LCD_Initalize();

    char litera_l[8] = {0x0C,0x04,0x06,0x04,0x0C,0x04,0x0E,0x00};

    LCD_WriteCommand (0x40);

    char adres=0;
    for(unsigned char i=0;i<=7;i++)
    {
    LCD_WriteCommand(0x40|(adres+i));
    LCD_WriteData(litera_l[i]); //wysylanie danych do lcd
    }

    LCD_WriteCommand (0x80);
    //_delay_ms(100);

    LCD_GoTo(0, 0);
    LCD_WriteText("bbbbbbbbb");
    LCD_GoTo(0, 1);
    LCD_WriteText("b");
    LCD_WriteText(0x00);
    LCD_WriteText("b");
    return(0);
    }


    Kod biblioteki:
    Spoiler:
    //-------------------------------------------------------------------------------------------------
    // Wyświetlacz alfanumeryczny ze sterownikiem HD44780
    // Sterowanie w trybie 4-bitowym bez odczytu flagi zajętości
    // z dowolnym przypisaniem sygnałów sterujących
    // Plik : HD44780.h
    // Mikrokontroler : Atmel AVR
    // Kompilator : avr-gcc
    // Autor : Radosław Kwiecień
    // Źródło : http://radzio.dxp.pl/hd44780/
    // Data : 24.03.2007
    //-------------------------------------------------------------------------------------------------

    #include <avr/io.h>
    #include <util/delay.h>

    //-------------------------------------------------------------------------------------------------
    //
    // Konfiguracja sygnałów sterujących wyświetlaczem.
    // Można zmienić stosownie do potrzeb.
    //
    //-------------------------------------------------------------------------------------------------
    #define LCD_RS_DIR DDRB
    #define LCD_RS_PORT PORTB
    #define LCD_RS_PIN PINB
    #define LCD_RS (1 << PB2)

    #define LCD_RW_DIR DDRB
    #define LCD_RW_PORT PORTB
    #define LCD_RW_PIN PINB
    #define LCD_RW (1 << PB1)

    #define LCD_E_DIR DDRB
    #define LCD_E_PORT PORTB
    #define LCD_E_PIN PINB
    #define LCD_E (1 << PB3)

    #define LCD_DB4_DIR DDRD
    #define LCD_DB4_PORT PORTD
    #define LCD_DB4_PIN PIND
    #define LCD_DB4 (1 << PD4)

    #define LCD_DB5_DIR DDRD
    #define LCD_DB5_PORT PORTD
    #define LCD_DB5_PIN PIND
    #define LCD_DB5 (1 << PD5)

    #define LCD_DB6_DIR DDRD
    #define LCD_DB6_PORT PORTD
    #define LCD_DB6_PIN PIND
    #define LCD_DB6 (1 << PD6)

    #define LCD_DB7_DIR DDRD
    #define LCD_DB7_PORT PORTD
    #define LCD_DB7_PIN PIND
    #define LCD_DB7 (1 << PD7)

    //-------------------------------------------------------------------------------------------------
    //
    // Instrukcje kontrolera Hitachi HD44780
    //
    //-------------------------------------------------------------------------------------------------

    #define HD44780_CLEAR 0x01

    #define HD44780_HOME 0x02

    #define HD44780_ENTRY_MODE 0x04
    #define HD44780_EM_SHIFT_CURSOR 0
    #define HD44780_EM_SHIFT_DISPLAY 1
    #define HD44780_EM_DECREMENT 0
    #define HD44780_EM_INCREMENT 2

    #define HD44780_DISPLAY_ONOFF 0x08
    #define HD44780_DISPLAY_OFF 0
    #define HD44780_DISPLAY_ON 4
    #define HD44780_CURSOR_OFF 0
    #define HD44780_CURSOR_ON 2
    #define HD44780_CURSOR_NOBLINK 0
    #define HD44780_CURSOR_BLINK 1

    #define HD44780_DISPLAY_CURSOR_SHIFT 0x10
    #define HD44780_SHIFT_CURSOR 0
    #define HD44780_SHIFT_DISPLAY 8
    #define HD44780_SHIFT_LEFT 0
    #define HD44780_SHIFT_RIGHT 4

    #define HD44780_FUNCTION_SET 0x20
    #define HD44780_FONT5x7 0
    #define HD44780_FONT5x10 4
    #define HD44780_ONE_LINE 0
    #define HD44780_TWO_LINE 8
    #define HD44780_4_BIT 0
    #define HD44780_8_BIT 16

    #define HD44780_CGRAM_SET 0x40

    #define HD44780_DDRAM_SET 0x80

    //-------------------------------------------------------------------------------------------------
    //
    // Deklaracje funkcji
    //
    //-------------------------------------------------------------------------------------------------

    void LCD_WriteCommand(unsigned char);
    unsigned char LCD_ReadStatus(void);
    void LCD_WriteData(unsigned char);
    unsigned char LCD_ReadData(void);
    void LCD_WriteText(char *);
    void LCD_GoTo(unsigned char, unsigned char);
    void LCD_Clear(void);
    void LCD_Home(void);
    void LCD_Initalize(void);

    //-------------------------------------------------------------------------------------------------
    //
    // Koniec pliku HD44780.h
    //
    //-------------------------------------------------------------------------------------------------
  • Pomocny post
    #2 13393144
    el2010tmp
    Poziom 25  
    Prawdopodobnie zamiast:
    LCD_WriteText(0x00);
    powinno być:
    LCD_WriteData(0x00);

    Trudno stwierdzić bez kodu biblioteki [HD44780.c].
  • #3 13393617
    kotek12321
    Poziom 12  
    Jezu jesteś genialny dziękuje bardzo :) Wszystko działa... ale banalny błąd :)
REKLAMA