lcd cursor kullanımı

Başlatan berkay_91, 02 Aralık 2014, 12:24:23

berkay_91

mrb, yazmış olduğum programda peters fluery kütüphanesi kullandım ve sayıları butonlara basarak 1'er 1'er arttırıyorum veya azaltıyorum, cursor kullanarak mesela ilk başlangıçta beliren 100 sayısının onlar basamağına gelip o'ı 5 yapsamda ekranda direk 150 belirse... bunun gibi şeyleri cursor'u kaydırarak nasıl yapabilirim? code üstünde değişiklik yapıp cevap verir misiniz?

/*
 * lcd_peters.c
 *
 * Created: 16.02.2014 17:10:50
 *  Author: BERKAY
 */ 

#define F_CPU 1000000 
#include <stdio.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "lcd.h"


FILE lcd_str = FDEV_SETUP_STREAM(lcd_putc, NULL, _FDEV_SETUP_WRITE);


int main(void){
	
	DDRB=0XFF;
	
	int x=100;
	
	lcd_init(LCD_DISP_ON); 

	stdout = stdin = &lcd_str;

    lcd_clrscr();
	
	lcd_gotoxy(3,0);
	fprintf_P(stdout,PSTR("LCD Test"));

	while(1){ 
		
		
		if(bit_is_set(PIND,0))
		x--;
		
		else if(bit_is_set(PIND,1))
		x++;
		
		    lcd_gotoxy(0,1);
			printf("%d ",x);
		
		
     }
return 0;
    }


Kabil ATICI

#1
Umarım ki programı yazmamı beklemiyorsundur;

Ekrana gönderdiğin sayıyı 100, 10,1 hanelerine ayırıp ayrı ayrı değişkenlere ata. array (dizi) de olur).
Sağ sol butonlarını kullanarak bu değişkenlerde kayabilirsin sorun değil. dizi olursa daha kolay.
Her rakam üzerine geldiğinde aşağı yukarı kaydır.

include satının altına ekle

int rakam=0;
uint8_t rakamlar[]={0,0,0};
...
uint8_t hane=0; // (yüzler hanesi)

void rakam_guncelle();
void rakam_parcala();




işlemin yapılacağı yerde
(serir programında main fonksiyonu içinde)
rakam_parcala();
//rakamları ekranda göster
hane=0;
rakam_guncelle();
hane++;
rakam_guncelle();
hane++;
rakam_guncelle();


-----------------------------------------
buton fonksiyonları...
(senin porgramında While fonksiyonu içinde)

sol buton basılmışsa
hane--;  //değerin sıfırn altına inmesini engelle
rakam_guncelle();


sağ buton basılmışsa
hane++;  //değerin 2'nin üstüne çıkmasını engelle
rakam_guncelle();


yukarı butonu basılmışsa
rakamlar[hane]++; //değerin 9'un üstüne çıkmasını engelle
rakam_guncelle();


aşağı butonu basılmışsa
rakamlar[hane]--; //değerin 0'ın altına inmesini engelle
rakam_guncelle();


LCD ekran üzerinde kursor gösterimini biliyor olman gerekir.

ekranda göstermek için ekran adresi komutunu göndermen gerekir.
birinci satır başlangıç adresi 0x80'dir
ekrandaki bir rakamı güncellemek  için

(en altte parantez dışında)
void rakam_guncelle()
{
komut_yaz(0x80+hane);
data_yaz(rakamlar[hane]+0x30);
komut_yaz(0x80+hane);
}

void rakam_parcala()
{
bu arada sayıyı nasıl parçalayacağın konusu seni ilgilendiriyor.
örneğin
rakamlar[0]= rakam/100;
rakamlar[1]=(rakam-rakamlar[0]*100)/10;
...
}




kursörünü yakıp sondürmek için
komut_yaz(0x0d);
kursüru normal hale (görünmez)
komut_yaz(0x0C);

kullan.

komut_yaz(...);   ve data_yaz(...) fonksiyonlarını kendi kütüphanene bakarak yazman gerekir... Farklı olabilir.
ambar7

berkay_91

bugüne kadar aldığım en ayrıntılı cevaplardan biriydi programı yazmış kadar oldunuz çok sağolun, hocam atmelle bayağ uğraşmışsınız belli daha öncedende bir kaç cevap yazmıştıız hatırlıyorum, ne işle meşgulsünüz nerde çalışıyosunuz