Picproje Elektronik Sitesi

DERLEYİCİLER => Diğer Derleyiciler => KEIL => Konuyu başlatan: armsistem - 21 Nisan 2012, 14:02:43

Başlık: "KS0108.h" lcd driver
Gönderen: armsistem - 21 Nisan 2012, 14:02:43
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){

} }
Başlık: Ynt: "KS0108.h" lcd driver
Gönderen: tmhzkhzhz - 21 Nisan 2012, 14:42:53
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