Keyboard Kütüphanesi / Denenmiştir

Başlatan FxDev, 17 Temmuz 2009, 21:58:01

FxDev

Geçenlerde sitede bir arkadaşımız klavye kodlarını soruyordu, düzelttiğinden bahsetti ama kodlarını yayınlamamıştı...
Bende ona yardım amaçlı yazdığım kodu bugün deneme şansım oldu...
Pic 16f628a ile PS2 bilgisayar klavyesi denemesini 2x16 LCD ile yaptım, ayrıca tuşların ikinci görevlerinin de kullanılmasını sağladım...
Çalışmaya ait video için şu linke basabilirsiniz:

http://rapidshare.com/files/256922454/Film.wmv.html

Çalışmaya ait ekran görüntüleri ise şunlardır:



Kütüphane ise şöyle:

keyboard.h
/*					www.FxDev.org
 * 				2x16 LCD Kullanım Klavuzu
 * Shift ve Capslock tuşu ile büyük, küçük ve tuşların ikinci görevleri kullanılabilir.
 * i=get_byte(); şeklinde klavyeden gelen byte'lık veriler okunur.
 * i=keyboard(); şeklinde klavyeden okunan kod direk ascii olarak gönderilir.
 *					www.FxDev.org 
*/

#define Clock RA0	//Pin tanımlamaları
#define Data  RA1

extern unsigned char get_byte(void);
extern unsigned char keyboard(void);


#include	<pic.h>
#include	"keyboard.h"

const unsigned char kucuk[67][2]={
		{0x0d,0x7e},{0x0e,'"'},{0x15,'q'},{0x16,'1'},
		{0x1a,'z'},{0x1b,'s'},{0x1c,'a'},{0x1d,'w'},
		{0x1e,'2'},{0x21,'c'},{0x22,'x'},{0x23,'d'},
		{0x24,'e'},{0x25,'4'},{0x26,'3'},{0x29,' '},
		{0x2a,'v'},{0x2b,'f'},{0x2c,'t'},{0x2d,'r'},
		{0x2e,'5'},{0x31,'n'},{0x32,'b'},{0x33,'h'},
		{0x34,'g'},{0x35,'y'},{0x36,'6'},{0x39,','},
		{0x3a,'m'},{0x3b,'j'},{0x3c,'u'},{0x3d,'7'},
		{0x3e,'8'},{0x41,0xef},{0x42,'k'},{0x43,3},
		{0x44,'o'},{0x45,'0'},{0x46,'9'},{0x49,7},
		{0x4a,'.'},{0x4b,'l'},{0x4c,2},{0x4d,'p'},
		{0x4e,'+'},{0x52,'i'},{0x54,5},{0x55,0x5f},
		{0x5a,0xa3},{0x5b,0xf5},{0x5d,','},{0x61,'<'},
		{0x69,'1'},{0x6b,'4'},{0x6c,'7'},{0x70,'0'},
		{0x71,','},{0x72,'2'},{0x73,'5'},{0x74,'6'},
		{0x75,'8'},{0x79,'+'},{0x7a,'3'},{0x7b,'-'},
		{0x7c,'*'},{0x7d,'9'},{0,0}
};

const unsigned char buyuk[67][2]={
		{0x0d,0x7e},{0x0e,'é'},{0x15,'Q'},{0x16,'!'},
		{0x1a,'Z'},{0x1b,'S'},{0x1c,'A'},{0x1d,'W'},
		{0x1e,'"'},{0x21,'C'},{0x22,'X'},{0x23,'D'},
		{0x24,'E'},{0x25,'+'},{0x26,'^'},{0x29,' '},
		{0x2a,'V'},{0x2b,'F'},{0x2c,'T'},{0x2d,'R'},
		{0x2e,'%'},{0x31,'N'},{0x32,'B'},{0x33,'H'},
		{0x34,'G'},{0x35,'Y'},{0x36,'&'},{0x39,'L'},
		{0x3a,'M'},{0x3b,'J'},{0x3c,'U'},{0x3d,'/'},
		{0x3e,'('},{0x41,0},{0x42,'K'},{0x43,'I'},
		{0x44,'O'},{0x45,'='},{0x46,')'},{0x49,7},
		{0x4a,':'},{0x4b,'L'},{0x4c,1},{0x4d,'P'},
		{0x4e,'?'},{0x52,6},{0x54,5},{0x55,0x2d},
		{0x5a,0xa3},{0x5b,4},{0x5d,';'},{0x61,'>'},
		{0x69,'1'},{0x6b,'4'},{0x6c,'7'},{0x70,'0'},
		{0x71,','},{0x72,'2'},{0x73,'5'},{0x74,'6'},
		{0x75,'8'},{0x79,'+'},{0x7a,'3'},{0x7b,'-'},
		{0x7c,'*'},{0x7d,'9'},{0,0}
};

unsigned char get_byte(void)
{
	char i;
	unsigned char veri=0;
	
	for(i=0;i<11;i++)				//11 bitlik veri gelecek
	{
		while(Clock);				//İlk önce Clock=1 olmalı
		if( (i<9) && (i>0))			//2->9 bitler
		{
			veri=veri>>1;
			if(Data==1)
				veri=veri | 0x80;
		}
		while(!Clock);				//Son olarak Clock=1 olmalı
	}
	return veri;					//Algılanan değer gönderiliyor
}

unsigned char keyboard(void)
{
	unsigned char data=0;
	unsigned char shift=0, i;
	for(;;)
	{
		data=get_byte();
		while(get_byte()==0xF0);

		if((data==0x12)||(data==0x59))	//Sağ ya da sol shifte mi basıldı
			shift=!shift;				//Capslock gibi çalışacak
		
		if(data==0x58)					//Capslock'a basıldıysa
			shift=!shift;
		
		for(i=0;kucuk[i][0]!=data && kucuk[i][0]; i++);		//Tuşun ascii karşılığı bulunuyor
		
		if(kucuk[i][0]==data)			//Data ascii tablolarımızda var mı bakılıyor
		{
			if(shift==0)				//Capslock açık değilse küçük harf, açıksa büyük harfin ascii değeri geri gönderiliyor
				return kucuk[i][1];
			else
				return buyuk[i][1];
		}
	}
}

ground

Bu gibi projeleri dergide de YA YIN LA YA LIM      
dergi de yazmaktan üşenmeyelim bu tip çalışmalar olsun orada..
⌒╮'╭⌒╮⌒╮.
╱◥██◣                  
| 田︱田田|              
╬╬╬╬╬╬╬╬╬

Picproje - Sözde değil özde paylaşım..

ground

basit olayı kişiye göre değişir hocam güzel bir çalışma yapmışsın. Bu çalışmayı biraz yazı ile süslendirerek çok rahat dergiye koyabiliriz.

1 Ağustosta çıkacak dergi herkezden birşeyler bekliyoruz.

@gevv e bu konu hakkında ulaşabilirsiniz arkadaşlar..
⌒╮'╭⌒╮⌒╮.
╱◥██◣                  
| 田︱田田|              
╬╬╬╬╬╬╬╬╬

Picproje - Sözde değil özde paylaşım..

SpeedyX

Diğer charset leri de destekleyen birşey yapabilir misin? Mesela Cyrillic (Windows-1251)...

bmutlu

Alıntı yapılan: "SpeedyX"Diğer charset leri de destekleyen birşey yapabilir misin? Mesela Cyrillic (Windows-1251)...

Winstar in WH1602D-TMI-ET# modelinin karakter tablosunu incele
aradiğini bu LCD de bulabi,lirsin sanirim..