128x64 GLCD de menü

Başlatan berkay_91, 08 Haziran 2015, 17:53:40

berkay_91

merhaba, atmega 8 kullanarak KS0108 kütüphanesiyle basit bir menü yapmaya çalıştım ama bazı sorunlar çıktı, alt satırlara inip çıkarken  "menü 4" yazısının gidip gelmesi gibi bendeki proteus 8.0 simülasyonda arıza verdiği için simülasyonda daha fazla sorun çıkıyo ve kapanıyo ama devreyi çizdim proteus dosyasını ve atmel studio 6.0 derleyicisinde programı ekledim yardımcı olursanız sevinirim

http://www.dosya.tc/server/usgwmk/GLCD_2.rar.html

/*
 * GLCD_2.c
 *
 * Created: 22.12.2014 11:02:39
 *  Author: BERKAY
 */ 

#define F_CPU 1000000UL
#include <inttypes.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#include "ks0108.h"
#include "times_new_romen_10_B.h"
#include "arial_10.h"

void menu_isimleri_init();

volatile int satir=11,j=0;

struct menuler{
	
	char *menu_isimi;
	
} menu[5];

void menu_isimleri_init(){

	menu[0].menu_isimi="Menu 1";
	menu[1].menu_isimi="Menu 2";
	menu[2].menu_isimi="Menu 3";
	menu[3].menu_isimi="Menu 4";
	menu[4].menu_isimi="Menu 5";
	
}


int main(void) {
	
	int y=12;
	
	_delay_ms(10);
	
	ks0108Init(0);
	
	menu_isimleri_init();
	
	ks0108ClearScreen();
	
	ks0108SelectFont(times_new_romen_10_B, ks0108ReadFontData, BLACK); // Select a font
	
	ks0108GotoXY(38,0);
	ks0108Puts("AYARLAR");
	
	ks0108SelectFont(arial_10, ks0108ReadFontData, BLACK); // Select a font
	
	for(int i=0; i<5; i++){
		
		ks0108GotoXY(1,y);
		ks0108Puts(menu[i].menu_isimi);  
		
		y+=10;
		
	}
	
	//ks0108InvertRect(0,satir,127,8);
	
	while(1){
	
	if(bit_is_set(PINB,1)){ // aşağı inme
		
		if(satir<=41){
	
	    ks0108FillRect(0, satir, 127, 8, WHITE); // seçilen satırı silmek için
		
		ks0108GotoXY(1,satir+1);
		ks0108Puts(menu[j].menu_isimi);
	
	    satir+=10;
		j++;
		
	    ks0108InvertRect(0,satir,127,8);
		
		}		
	}	
	
	 else if(bit_is_set(PINB,0)){ // yukarı çıkma
	
	     if(satir>=21){
		
		  ks0108FillRect(0, satir, 127, 8, WHITE); // seçilen satırı silmek için
		  
		  ks0108GotoXY(1,satir+1);
		  ks0108Puts(menu[j].menu_isimi);
		
		  satir-=10;
		  j--;
		  
		  ks0108InvertRect(0,satir,127,8);
		
	      }
	
    }	
	    
		
	}
	
	return 0;		
	
}

Kabil ATICI

bana kalırsa sıkıntın butona bastığın zaman sen butonu bırakana kadar birkaç kez menünün tur atması.
Gerçek devrede bunu dana kolay görebilirsin.
ambar7

berkay_91

delay koymadım farkındayım ama gerçek devrede böyle bi şey olmadı GLCD lerde pixel leri basması biraz daha uzun sürüyor

muhittin_kaplan