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

[Atmega 32][C]KS0108B - Brak komunikacji

CRDReed 25 Wrz 2010 14:30 1389 3
REKLAMA
  • #1 8548816
    CRDReed
    Poziom 11  
    Chciałbym aby cokolwiek wyświetliło by się na wyświetlaczu GLCD. Niestety nie udaje mnie się zapalić nawet pojedynczego piksela. W programie stosuję bardzo długie opóźnienia _delay_ms(10); , ale to dlatego żebym widział jak przełączają się stany logiczne na magistralach. Proszę o pomoc w uruchomieniu wyświetlacza.


    Wyprowadzenia wyświetlacza GLCD
    [Atmega 32][C]KS0108B - Brak komunikacji

    Kod programu:
    
    #include<avr/io.h>
    #include<stdio.h>
    #include<util/delay.h>
    
    
    // port szyny danych
    #define LCD_DATA_PORT PORTD
    #define LCD_DATA_PIN PIND
    #define LCD_DATA_DDR DDRD
    
    // port sygnałów sterujących
    #define LCD_CTRL_PORT PORTB
    #define LCD_CTRL_PIN PINB
    #define LCD_CTRL_DDR DDRB
    
    // sygnały sterujące
    #define LCD_EN PB0
    #define LCD_RW PB1
    #define LCD_RS PB2
    #define LCD_CSA PB3
    #define LCD_CSB PB4
    #define LCD_RST PB5
    
    #define DISPLAY_SET_X 0x40
    #define DISPLAY_SET_Y 0xB8
    #define DISPLAY_START_LINE 0xC0
    #define ON 0x3F;
    
    
    // ustawienie stanu na linii CSA
    #define SET_CSA LCD_CTRL_PORT |= (1 << LCD_CSA)
    #define CLR_CSA LCD_CTRL_PORT &= ~(1 << LCD_CSA)
    // ustawienie stanu na linii CSB
    #define SET_CSB LCD_CTRL_PORT |= (1 << LCD_CSB)
    #define CLR_CSB LCD_CTRL_PORT &= ~(1 << LCD_CSB)
    // ustawienie stanu na linii EN
    #define SET_EN LCD_CTRL_PORT |= (1 << LCD_EN)
    #define CLR_EN LCD_CTRL_PORT &= ~(1 << LCD_EN)
    // ustawienie stanu na linii RW
    #define SET_RW LCD_CTRL_PORT |= (1 << LCD_RW)
    #define CLR_RW LCD_CTRL_PORT &= ~(1 << LCD_RW)
    // ustawienie stanu na linii RS
    #define SET_RS LCD_CTRL_PORT |= (1 << LCD_RS)
    #define CLR_RS LCD_CTRL_PORT &= ~(1 << LCD_RS)
    // ustawienie stanu na linii RST
    #define SET_RST LCD_CTRL_PORT |= (1 << LCD_RST)
    #define CLR_RST LCD_CTRL_PORT &= ~(1 << LCD_RST)
    
    
    int main(void)
    {
    int i;
    
    	DDRD=0xFF;
    	DDRB=0xFF;
    
    	LCD_CTRL_PORT=0x00;
    	LCD_DATA_PORT=0x00;
    	
    	SET_RST;
    	
    	CLR_CSA;
    	CLR_CSB;
    	
    	_delay_ms(10);
    	
    	CLR_EN;
    	CLR_RS;
    	CLR_RW;
    	
    	_delay_ms(10);
    	LCD_DATA_PORT = 0x3F;
    	SET_EN;
    	_delay_ms(10);
    	CLR_EN;
    	
    	CLR_EN;
    	CLR_RS;
    	CLR_RW;
    	
    	_delay_ms(10);
    	LCD_DATA_PORT = 0x40;
    	SET_EN;
    	_delay_ms(10);
    	CLR_EN;
    	
    	CLR_EN;
    	CLR_RS;
    	CLR_RW;
    	
    	_delay_ms(10);
    	LCD_DATA_PORT = 0xB8;
    	SET_EN;
    	_delay_ms(10);
    	CLR_EN;
    	
    	_delay_ms(10);
    	CLR_EN;
    	CLR_RS;
    	CLR_RW;
    	
    	_delay_ms(10);
    	LCD_DATA_PORT = 0xC0;
    	SET_EN;
    	_delay_ms(10);
    	CLR_EN;
    	
    
    
    for(i=0;i<255;i++)
    	{	
    	
    	
    	_delay_ms(10);
    	CLR_EN;
    	SET_RS;
    	CLR_RW;
    	
    	_delay_ms(10);
    	LCD_DATA_PORT = i;
    	SET_EN;
    	_delay_ms(10);
    	CLR_EN;
    	}
    	
    
    }
    
    
  • REKLAMA
  • REKLAMA
REKLAMA