"KS0108.h" lcd driver

Başlatan armsistem, 21 Nisan 2012, 14:02:43

armsistem

Arkadaşlar merhaba , aşağıda 128x64 glcd driver bulunmaktadır. Driver çalışmaktadır lakin benim yapmak istediğim data uçlarını değiştirmek ; örnekte data uçları aşağıdadır.

LCD  MCU
D0    P0.0
D1    P0.1
D2    P0.2
D3    P0.3
D4    P0.4
D5    P0.5
D6    P0.6
D7    P0.7


fakat benim istediğim aşağıdaki şekilde yapmak istiyorum (port numaraları salladım)

LCD  MCU
D0    P0.0
D1    P0.1
D2    P1.5
D3    P1.6
D4    P2.2
D5    P2.3
D6    P3.1
D7    P3.2



data yı nasıl bu şekilde parçalayabilirim işin mantığını öğrenmeye çalışıyorum o yüzden yardımcı olacak arkadaşlar direkt kodu yazmadan başka örneklerlede anlatabilirler. Şimdiden teşekkür ederim.




   #include <lpc213x.h>
   #include "KS0108.h"


#define KS0108_DATA_DIR		IODIR0
#define KS0108_DATA_PIN		IOPIN0
#define KS0108_DATA_SET		IOSET0
#define KS0108_DATA_CLR		IOCLR0
#define KS0108_D0			0
#define KS0108_CTRL_DIR		IO1DIR
#define KS0108_CTRL_SET		IO1SET
#define KS0108_CTRL_CLR		IO1CLR
#define KS0108_RS			(1 << 18)
#define KS0108_RW			(1 << 17)
#define KS0108_EN			(1 << 16)
#define KS0108_CS1			IO0DIR = (0x01 << 19)
#define KS0108_CS2			IO0DIR = (0x01 << 20)
#define DISPLAY_STATUS_BUSY	0x80
extern unsigned char screen_x;
extern unsigned char screen_y;


void GLCD_Delay(void)
{
__nop();
__nop();
}
//-------------------------------------------------------------------------------------------------
// Enalbe Controller (0-2)
//-------------------------------------------------------------------------------------------------
void GLCD_EnableController(unsigned char controller)
{
switch(controller){
	case 0 : IO0CLR = (0x01 << 19); break;
	case 1 : IO0CLR = (0x01 << 20); break;
//	case 2 : break;
	}
}
//-------------------------------------------------------------------------------------------------
// Disable Controller (0-2)
//-------------------------------------------------------------------------------------------------
void GLCD_DisableController(unsigned char controller)
{
switch(controller){
	case 0 : IO0SET = (0x01 << 19); break;
	case 1 : IO0SET = (0x01 << 20); break;
//	case 2 :  break;
	}
}
//-------------------------------------------------------------------------------------------------
// Read Status byte from specified controller (0-2)
//-------------------------------------------------------------------------------------------------
unsigned char GLCD_ReadStatus(unsigned char controller)
{
unsigned char status;
KS0108_DATA_DIR &= ~(0xFF << KS0108_D0);
KS0108_CTRL_SET = KS0108_RW;
KS0108_CTRL_CLR = KS0108_RS;
GLCD_EnableController(controller);
KS0108_CTRL_SET = KS0108_EN;
GLCD_Delay();
status = (KS0108_DATA_PIN >> KS0108_D0);
KS0108_CTRL_CLR = KS0108_EN;
GLCD_DisableController(controller);
return status;
}
//-------------------------------------------------------------------------------------------------
// Write command to specified controller
//-------------------------------------------------------------------------------------------------
void GLCD_WriteCommand(unsigned char commandToWrite, unsigned char controller)
{
while(GLCD_ReadStatus(controller)&DISPLAY_STATUS_BUSY);
KS0108_DATA_DIR |= (0xFF << KS0108_D0);
KS0108_CTRL_CLR = (KS0108_RW | KS0108_RS);
GLCD_EnableController(controller);

KS0108_DATA_SET = (commandToWrite << KS0108_D0);
commandToWrite ^= 0xFF;
KS0108_DATA_CLR = (commandToWrite << KS0108_D0);

KS0108_CTRL_SET = KS0108_EN;
GLCD_Delay();
KS0108_CTRL_CLR = KS0108_EN;
GLCD_DisableController(controller);
}
//-------------------------------------------------------------------------------------------------
// Read data from current position
//-------------------------------------------------------------------------------------------------
			  unsigned char GLCD_ReadData(void)
{
unsigned char data;
while(GLCD_ReadStatus(screen_x / 64)&DISPLAY_STATUS_BUSY);
KS0108_DATA_DIR &= ~(0xFF << KS0108_D0);
KS0108_CTRL_SET = (KS0108_RW | KS0108_RS);
GLCD_EnableController(screen_x / 64);
//GLCD_Delay();
KS0108_CTRL_SET = KS0108_EN;
GLCD_Delay();
data = (KS0108_DATA_PIN >>  KS0108_D0);
KS0108_CTRL_CLR = KS0108_EN;
GLCD_DisableController(screen_x / 64);
screen_x++;
return data;
}	  
//-------------------------------------------------------------------------------------------------
// Write data to current position
//-------------------------------------------------------------------------------------------------
void GLCD_WriteData(unsigned char dataToWrite)
{
while(GLCD_ReadStatus(screen_x / 64)&DISPLAY_STATUS_BUSY);
KS0108_DATA_DIR |= (0xFF << KS0108_D0);
KS0108_CTRL_CLR = KS0108_RW;
KS0108_CTRL_SET = KS0108_RS;

KS0108_DATA_SET = (dataToWrite << KS0108_D0);
dataToWrite ^= 0xFF;
KS0108_DATA_CLR = (dataToWrite << KS0108_D0);

GLCD_EnableController(screen_x / 64);
KS0108_CTRL_SET = KS0108_EN;
GLCD_Delay();
KS0108_CTRL_CLR = KS0108_EN;
GLCD_DisableController(screen_x / 64);
screen_x++;
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
	unsigned char GLCD_ReadByteFromROMMemory(char * ptr)
{
return *(ptr);
}








void GLCD_InitalizePorts (void)
{
IO0DIR = 0xFFFFFFFF;
 IO1DIR = 0xFFFFFFFF;
 


}







int main (void)

{

	

				 GLCD_Initalize();
GLCD_ClearScreen();	  



	GLCD_GoTo(1,1);
GLCD_WriteString("           armsistem");

		 GLCD_Rectangle(10,10,10,10);

GLCD_Circle(20,20,20);
GLCD_Line(15,15,15,15);
	
		while(1){		

}				 }

tmhzkhzhz

iyi gunler
konuyu fazla bilmiyorum sadece yardimci olmak icin yazdim program in ikinci satirinda   include "KS0108.h" yaziyor
port ayarlari diger fonksiyonlar o dosyanin icinde olmasi lazim dosyayi acip degistirebilirsiniz
anlayamazsaniz  "KS0108.h"   dosya icerigini foruma tekrar ekleyin bir inceleyim  KS0108.h dosyasi program klasorunuzun icinde veya
derleyicinin kuruldugu klasorun icinde olur arattirip bulun