hamed_TT
12-03-2014, 02:38
با سلام خدمت اساتید عزیز
من هر چقدر سعی کردم و با انواع درایور های KS0108 ور رفتم نتونستم برای LPC1343 پورتش کنم ، لطفا کمک کنید راش بندازم
7331
اینم فایلهای کتابخوانه که تغییر دادم ولی کار نمی کند.
ks0108.c
//-------------------------------------------------------------------------------------------------
// Universal KS0108 driver library
// (c) Rados³aw Kwiecieٌ, radek@dxp.pl
//-------------------------------------------------------------------------------------------------
#include "lpc13xx.h"
#include "gpio_lpc13xx.h"
#include "KS0108.h"
#include "font5x8.h"
#include "graphic.c"
char color_var=0;
//-------------------------------------------------------------------------------------------------
extern void GLCD_InitalizePorts(void);
//-------------------------------------------------------------------------------------------------
unsigned char screen_x = 0, screen_y = 0;
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
// Delay function
//-------------------------------------------------------------------------------------------------
void GLCD_Delay(void)
{
int i;
for(i=0;i<100;i++);
}
//-------------------------------------------------------------------------------------------------
// Enalbe Controller (0-2)
//-------------------------------------------------------------------------------------------------
void GLCD_EnableController(unsigned char controller)
{
switch(controller){
case 0 : CS2_Clear; break;
case 1 : CS1_Clear; break;
}
}
//-------------------------------------------------------------------------------------------------
// Disable Controller (0-2)
//-------------------------------------------------------------------------------------------------
void GLCD_DisableController(unsigned char controller)
{
switch(controller){
case 0 : CS2_Set; break;
case 1 : CS1_Set; break;
}
}
//-------------------------------------------------------------------------------------------------
// Read Status from specified controller (0-2)
//-------------------------------------------------------------------------------------------------
unsigned char GLCD_ReadStatus(unsigned char controller)
{
unsigned char status;
LPC_GPIO[DATA_PORT]->DIR &= ~(0xff<<DATA_BYTE_NUM);
RW_Set;
RS_Clear;
GLCD_EnableController(controller);
EN_Set;
GLCD_Delay();
status = (LPC_GPIO[DATA_PORT]->DATA >> DATA_BYTE_NUM);
EN_Clear;
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);
LPC_GPIO[DATA_PORT]->DIR |= (0xff<<DATA_BYTE_NUM);
RS_Clear;
RW_Clear;
GLCD_EnableController(controller);
LPC_GPIO[DATA_PORT]->DATA &= ~(0xff<<DATA_BYTE_NUM);
LPC_GPIO[DATA_PORT]->DATA |= (commandToWrite<<DATA_BYTE_NUM);
EN_Set;
GLCD_Delay();
EN_Clear;
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);
LPC_GPIO[DATA_PORT]->DIR &= ~(0xff<<DATA_BYTE_NUM);
RS_Set;
RW_Set;
GLCD_EnableController(screen_x / 64);
//GLCD_Delay();
EN_Set;
GLCD_Delay();
data=(LPC_GPIO[DATA_PORT]->DATA >> DATA_BYTE_NUM);
EN_Clear;
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);
LPC_GPIO[DATA_PORT]->DIR |= (0xff<<DATA_BYTE_NUM);
RW_Clear;
RS_Set;
LPC_GPIO[DATA_PORT]->DATA &= ~(0xff<<DATA_BYTE_NUM);
if(color_var==0) LPC_GPIO[DATA_PORT]->DATA |= (dataToWrite<<DATA_BYTE_NUM);
else LPC_GPIO[DATA_PORT]->DATA |= (~dataToWrite<<DATA_BYTE_NUM);
GLCD_EnableController(screen_x / 64);
EN_Set;
GLCD_Delay();
EN_Clear;
GLCD_DisableController(screen_x / 64);
screen_x++;
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
void GLCD_InitalizePorts(void)
{
GPIOSetDir(CTRL_PORT,RS_PIN,1);
GPIOSetDir(CTRL_PORT,EN_PIN,1);
GPIOSetDir(CTRL_PORT,RW_PIN,1);
GPIOSetDir(CTRL_PORT,CS1_PIN,1);
GPIOSetDir(CTRL_PORT,CS2_PIN,1);
CS1_Set;
CS2_Set;
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
unsigned char GLCD_ReadByteFromROMMemory(char * ptr)
{
return *(ptr);
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
void GLCD_Initalize(void)
{
unsigned char i;
GLCD_InitalizePorts();
for(i = 0; i < 3; i++)
GLCD_WriteCommand((DISPLAY_ON_CMD | ON), i);
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
void GLCD_GoTo(unsigned char x, unsigned char y)
{
unsigned char i;
screen_x = x;
screen_y = y;
for(i = 0; i < KS0108_SCREEN_WIDTH/64; i++)
{
GLCD_WriteCommand(DISPLAY_SET_Y | 0,i);
GLCD_WriteCommand(DISPLAY_SET_X | y,i);
GLCD_WriteCommand(DISPLAY_START_LINE | 0,i);
}
GLCD_WriteCommand(DISPLAY_SET_Y | (x % 64), (x / 64));
GLCD_WriteCommand(DISPLAY_SET_X | y, (x / 64));
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
void GLCD_ClearScreen(void)
{
unsigned char i, j;
for(j = 0; j < KS0108_SCREEN_HEIGHT/8; j++)
{
GLCD_GoTo(0,j);
for(i = 0; i < KS0108_SCREEN_WIDTH; i++)
GLCD_WriteData(0x00);
}
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
void GLCD_WriteChar(char charToWrite)
{
int i;
charToWrite -= 32;
for(i = 0; i < 5; i++)
GLCD_WriteData(GLCD_ReadByteFromROMMemory((char *)((int)font5x8 + (5 * charToWrite) + i)));
GLCD_WriteData(0x00);
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
void GLCD_WriteString(char * stringToWrite,char color)
{
if(color==1)color_var=1;
while(*stringToWrite)
GLCD_WriteChar(*stringToWrite++);
color_var=0;
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
void GLCD_SetPixel(unsigned char x, unsigned char y, unsigned char color)
{
unsigned char tmp;
GLCD_GoTo(x, (y / 8));
tmp = GLCD_ReadData();
GLCD_GoTo(x, (y / 8));
tmp = GLCD_ReadData();
GLCD_GoTo(x, (y / 8));
tmp |= (1 << (y % 8));
GLCD_WriteData(tmp);
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
void GLCD_Bitmap(char * bmp, unsigned char x, unsigned char y, unsigned char dx, unsigned char dy)
{
unsigned char i, j;
for(j = 0; j < dy / 8; j++)
{
GLCD_GoTo(x,y + j);
for(i = 0; i < dx; i++)
GLCD_WriteData(GLCD_ReadByteFromROMMemory(bmp++));
}
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
ks0108.h
#define CTRL_PORT 1 // Select Controler PORT Nunmber#define RS_PIN 6 // RS Pin Number
#define RW_PIN 7 // RW Pin Number
#define EN_PIN 8 // EN Pin Number
#define CS1_PIN 9 // CS1 Pin Number
#define CS2_PIN 10 // CS2 Pin Number
#define DATA_PORT 2 // Select data PORT Number
#define DATA_BYTE_NUM 0 // Select Byte Number of data port
//---------------------------------------------------
#define KS0108_SCREEN_WIDTH 128
#define KS0108_SCREEN_HEIGHT 64
#define DISPLAY_SET_Y 0x40
#define DISPLAY_SET_X 0xB8
#define DISPLAY_START_LINE 0xC0
#define DISPLAY_ON_CMD 0x3E
#define ON 0x01
#define OFF 0x00
#define DISPLAY_STATUS_BUSY 0x80
#define RS_Clear GPIOSetValue(CTRL_PORT,RS_PIN,0)
#define RS_Set GPIOSetValue(CTRL_PORT,RS_PIN,1)
#define RW_Clear GPIOSetValue(CTRL_PORT,RW_PIN,0)
#define RW_Set GPIOSetValue(CTRL_PORT,RW_PIN,1)
#define EN_Clear GPIOSetValue(CTRL_PORT,EN_PIN,0)
#define EN_Set GPIOSetValue(CTRL_PORT,EN_PIN,1)
#define CS1_Clear GPIOSetValue(CTRL_PORT,CS1_PIN,0)
#define CS1_Set GPIOSetValue(CTRL_PORT,CS1_PIN,1)
#define CS2_Clear GPIOSetValue(CTRL_PORT,CS2_PIN,0)
#define CS2_Set GPIOSetValue(CTRL_PORT,CS2_PIN,1)
extern unsigned char screen_x;
extern unsigned char screen_y;
#define DISPLAY_STATUS_BUSY 0x80
void GLCD_Initalize(void);
void GLCD_WriteData(unsigned char);
void GLCD_WriteCommand(unsigned char, unsigned char);
void GLCD_ClearScreen(void);
void GLCD_GoTo(unsigned char, unsigned char);
void GLCD_WriteString(char *,char color);
unsigned char GLCD_ReadByteFromROMMemory(char *);
unsigned char GLCD_ReadData(void);
void GLCD_Bitmap(char *, unsigned char, unsigned char, unsigned char, unsigned char);
من هر چقدر سعی کردم و با انواع درایور های KS0108 ور رفتم نتونستم برای LPC1343 پورتش کنم ، لطفا کمک کنید راش بندازم
7331
اینم فایلهای کتابخوانه که تغییر دادم ولی کار نمی کند.
ks0108.c
//-------------------------------------------------------------------------------------------------
// Universal KS0108 driver library
// (c) Rados³aw Kwiecieٌ, radek@dxp.pl
//-------------------------------------------------------------------------------------------------
#include "lpc13xx.h"
#include "gpio_lpc13xx.h"
#include "KS0108.h"
#include "font5x8.h"
#include "graphic.c"
char color_var=0;
//-------------------------------------------------------------------------------------------------
extern void GLCD_InitalizePorts(void);
//-------------------------------------------------------------------------------------------------
unsigned char screen_x = 0, screen_y = 0;
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
// Delay function
//-------------------------------------------------------------------------------------------------
void GLCD_Delay(void)
{
int i;
for(i=0;i<100;i++);
}
//-------------------------------------------------------------------------------------------------
// Enalbe Controller (0-2)
//-------------------------------------------------------------------------------------------------
void GLCD_EnableController(unsigned char controller)
{
switch(controller){
case 0 : CS2_Clear; break;
case 1 : CS1_Clear; break;
}
}
//-------------------------------------------------------------------------------------------------
// Disable Controller (0-2)
//-------------------------------------------------------------------------------------------------
void GLCD_DisableController(unsigned char controller)
{
switch(controller){
case 0 : CS2_Set; break;
case 1 : CS1_Set; break;
}
}
//-------------------------------------------------------------------------------------------------
// Read Status from specified controller (0-2)
//-------------------------------------------------------------------------------------------------
unsigned char GLCD_ReadStatus(unsigned char controller)
{
unsigned char status;
LPC_GPIO[DATA_PORT]->DIR &= ~(0xff<<DATA_BYTE_NUM);
RW_Set;
RS_Clear;
GLCD_EnableController(controller);
EN_Set;
GLCD_Delay();
status = (LPC_GPIO[DATA_PORT]->DATA >> DATA_BYTE_NUM);
EN_Clear;
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);
LPC_GPIO[DATA_PORT]->DIR |= (0xff<<DATA_BYTE_NUM);
RS_Clear;
RW_Clear;
GLCD_EnableController(controller);
LPC_GPIO[DATA_PORT]->DATA &= ~(0xff<<DATA_BYTE_NUM);
LPC_GPIO[DATA_PORT]->DATA |= (commandToWrite<<DATA_BYTE_NUM);
EN_Set;
GLCD_Delay();
EN_Clear;
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);
LPC_GPIO[DATA_PORT]->DIR &= ~(0xff<<DATA_BYTE_NUM);
RS_Set;
RW_Set;
GLCD_EnableController(screen_x / 64);
//GLCD_Delay();
EN_Set;
GLCD_Delay();
data=(LPC_GPIO[DATA_PORT]->DATA >> DATA_BYTE_NUM);
EN_Clear;
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);
LPC_GPIO[DATA_PORT]->DIR |= (0xff<<DATA_BYTE_NUM);
RW_Clear;
RS_Set;
LPC_GPIO[DATA_PORT]->DATA &= ~(0xff<<DATA_BYTE_NUM);
if(color_var==0) LPC_GPIO[DATA_PORT]->DATA |= (dataToWrite<<DATA_BYTE_NUM);
else LPC_GPIO[DATA_PORT]->DATA |= (~dataToWrite<<DATA_BYTE_NUM);
GLCD_EnableController(screen_x / 64);
EN_Set;
GLCD_Delay();
EN_Clear;
GLCD_DisableController(screen_x / 64);
screen_x++;
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
void GLCD_InitalizePorts(void)
{
GPIOSetDir(CTRL_PORT,RS_PIN,1);
GPIOSetDir(CTRL_PORT,EN_PIN,1);
GPIOSetDir(CTRL_PORT,RW_PIN,1);
GPIOSetDir(CTRL_PORT,CS1_PIN,1);
GPIOSetDir(CTRL_PORT,CS2_PIN,1);
CS1_Set;
CS2_Set;
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
unsigned char GLCD_ReadByteFromROMMemory(char * ptr)
{
return *(ptr);
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
void GLCD_Initalize(void)
{
unsigned char i;
GLCD_InitalizePorts();
for(i = 0; i < 3; i++)
GLCD_WriteCommand((DISPLAY_ON_CMD | ON), i);
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
void GLCD_GoTo(unsigned char x, unsigned char y)
{
unsigned char i;
screen_x = x;
screen_y = y;
for(i = 0; i < KS0108_SCREEN_WIDTH/64; i++)
{
GLCD_WriteCommand(DISPLAY_SET_Y | 0,i);
GLCD_WriteCommand(DISPLAY_SET_X | y,i);
GLCD_WriteCommand(DISPLAY_START_LINE | 0,i);
}
GLCD_WriteCommand(DISPLAY_SET_Y | (x % 64), (x / 64));
GLCD_WriteCommand(DISPLAY_SET_X | y, (x / 64));
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
void GLCD_ClearScreen(void)
{
unsigned char i, j;
for(j = 0; j < KS0108_SCREEN_HEIGHT/8; j++)
{
GLCD_GoTo(0,j);
for(i = 0; i < KS0108_SCREEN_WIDTH; i++)
GLCD_WriteData(0x00);
}
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
void GLCD_WriteChar(char charToWrite)
{
int i;
charToWrite -= 32;
for(i = 0; i < 5; i++)
GLCD_WriteData(GLCD_ReadByteFromROMMemory((char *)((int)font5x8 + (5 * charToWrite) + i)));
GLCD_WriteData(0x00);
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
void GLCD_WriteString(char * stringToWrite,char color)
{
if(color==1)color_var=1;
while(*stringToWrite)
GLCD_WriteChar(*stringToWrite++);
color_var=0;
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
void GLCD_SetPixel(unsigned char x, unsigned char y, unsigned char color)
{
unsigned char tmp;
GLCD_GoTo(x, (y / 8));
tmp = GLCD_ReadData();
GLCD_GoTo(x, (y / 8));
tmp = GLCD_ReadData();
GLCD_GoTo(x, (y / 8));
tmp |= (1 << (y % 8));
GLCD_WriteData(tmp);
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
void GLCD_Bitmap(char * bmp, unsigned char x, unsigned char y, unsigned char dx, unsigned char dy)
{
unsigned char i, j;
for(j = 0; j < dy / 8; j++)
{
GLCD_GoTo(x,y + j);
for(i = 0; i < dx; i++)
GLCD_WriteData(GLCD_ReadByteFromROMMemory(bmp++));
}
}
//-------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------
ks0108.h
#define CTRL_PORT 1 // Select Controler PORT Nunmber#define RS_PIN 6 // RS Pin Number
#define RW_PIN 7 // RW Pin Number
#define EN_PIN 8 // EN Pin Number
#define CS1_PIN 9 // CS1 Pin Number
#define CS2_PIN 10 // CS2 Pin Number
#define DATA_PORT 2 // Select data PORT Number
#define DATA_BYTE_NUM 0 // Select Byte Number of data port
//---------------------------------------------------
#define KS0108_SCREEN_WIDTH 128
#define KS0108_SCREEN_HEIGHT 64
#define DISPLAY_SET_Y 0x40
#define DISPLAY_SET_X 0xB8
#define DISPLAY_START_LINE 0xC0
#define DISPLAY_ON_CMD 0x3E
#define ON 0x01
#define OFF 0x00
#define DISPLAY_STATUS_BUSY 0x80
#define RS_Clear GPIOSetValue(CTRL_PORT,RS_PIN,0)
#define RS_Set GPIOSetValue(CTRL_PORT,RS_PIN,1)
#define RW_Clear GPIOSetValue(CTRL_PORT,RW_PIN,0)
#define RW_Set GPIOSetValue(CTRL_PORT,RW_PIN,1)
#define EN_Clear GPIOSetValue(CTRL_PORT,EN_PIN,0)
#define EN_Set GPIOSetValue(CTRL_PORT,EN_PIN,1)
#define CS1_Clear GPIOSetValue(CTRL_PORT,CS1_PIN,0)
#define CS1_Set GPIOSetValue(CTRL_PORT,CS1_PIN,1)
#define CS2_Clear GPIOSetValue(CTRL_PORT,CS2_PIN,0)
#define CS2_Set GPIOSetValue(CTRL_PORT,CS2_PIN,1)
extern unsigned char screen_x;
extern unsigned char screen_y;
#define DISPLAY_STATUS_BUSY 0x80
void GLCD_Initalize(void);
void GLCD_WriteData(unsigned char);
void GLCD_WriteCommand(unsigned char, unsigned char);
void GLCD_ClearScreen(void);
void GLCD_GoTo(unsigned char, unsigned char);
void GLCD_WriteString(char *,char color);
unsigned char GLCD_ReadByteFromROMMemory(char *);
unsigned char GLCD_ReadData(void);
void GLCD_Bitmap(char *, unsigned char, unsigned char, unsigned char, unsigned char);