من دارم با GLCD با کنترلر KS0180 کار می کنم. یه برنامه دارم که فکر می کنم از همین جا دانلود شده (من از یکی از دوستنم گرفتم).
حالا که می خوام از توابع موجود در این کتابخانه ها (ی دست نوشته) استفاده کنم و تو proteus شبیه سازی کنم و از دستورات glcd_Printf و یا glcd_putchar استفاده کنم به جای کارکتر ها یک مربع سیاه چاپ می کنه و warning هم می ده که :
Non-existant pin [<INVERT>] specified by [INVERT]. LCD1_U1
Non-existant pin [<INVERT>] specified by [INVERT]. LCD1_U2
چی کار باید بکنم؟
اینم کتابخونه:
حالا که می خوام از توابع موجود در این کتابخانه ها (ی دست نوشته) استفاده کنم و تو proteus شبیه سازی کنم و از دستورات glcd_Printf و یا glcd_putchar استفاده کنم به جای کارکتر ها یک مربع سیاه چاپ می کنه و warning هم می ده که :
Non-existant pin [<INVERT>] specified by [INVERT]. LCD1_U1
Non-existant pin [<INVERT>] specified by [INVERT]. LCD1_U2
چی کار باید بکنم؟
اینم کتابخونه:
کد:
#include <delay.h>
#include <mega32.h>
//------------------------------------ Definitions ------------------------------------
// Default Port definition
#define RS PORTC.0
#define RW PORTC.1
#define EN PORTC.2
#define CS1 PORTC.3
#define CS2 PORTC.4
#define RST PORTC.5
#define DATA PORTD
//---------------------------------------------------------------------------------------
void glcd_Init(void);
void reset(void);
void glcd_Clear();
void glcd_WriteByte(unsigned char x, unsigned char y, unsigned char data);
void glcd_DrawF(eeprom unsigned char *Pat);
void glcd_Draw(unsigned char Pat[]);
void glcd_DrawBmpF(unsigned char Pat[], unsigned char x, unsigned char y, unsigned char h,unsigned char w);
void glcd_DrawBmp(unsigned char Pat[],
unsigned char x, unsigned char y,
unsigned char h,unsigned char w);
void glcd_Printf(unsigned char x, unsigned char y,char* str);
void glcd_Putchar(unsigned char x, unsigned char y,unsigned char ch);
void address_right(unsigned char x,unsigned char y);
void address_left(unsigned char x,unsigned char y);
void write_right(unsigned char x );
void write_left(unsigned char x);
//------------------------------------ Functions ------------------------------------
eeprom char FontLookup [91][6] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
{ 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00 }, // !
{ 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00 }, // "
{ 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00 }, // #
{ 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00 }, // $
{ 0x23, 0x13, 0x08, 0x64, 0x62, 0x00 }, // %
{ 0x36, 0x49, 0x55, 0x22, 0x50, 0x00 }, // &
{ 0x00, 0x05, 0x03, 0x00, 0x00, 0x00 }, // '
{ 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00 }, // (
{ 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00 }, // )
{ 0x08, 0x2A, 0x1C, 0x2A, 0x08, 0x00 }, // *
{ 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00 }, // +
{ 0x00, 0x50, 0x30, 0x00, 0x00, 0x00 }, // ,
{ 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 }, // -
{ 0x00, 0x30, 0x30, 0x00, 0x00, 0x00 }, // .
{ 0x20, 0x10, 0x08, 0x04, 0x02, 0x00 }, // /
{ 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00 }, // 0
{ 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00 }, // 1
{ 0x42, 0x61, 0x51, 0x49, 0x46, 0x00 }, // 2
{ 0x21, 0x41, 0x45, 0x4B, 0x31, 0x00 }, // 3
{ 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00 }, // 4
{ 0x27, 0x45, 0x45, 0x45, 0x39, 0x00 }, // 5
{ 0x3C, 0x4A, 0x49, 0x49, 0x30, 0x00 }, // 6
{ 0x01, 0x71, 0x09, 0x05, 0x03, 0x00 }, // 7
{ 0x36, 0x49, 0x49, 0x49, 0x36, 0x00 }, // 8
{ 0x06, 0x49, 0x49, 0x29, 0x1E, 0x00 }, // 9
{ 0x00, 0x36, 0x36, 0x00, 0x00, 0x00 }, // :
{ 0x00, 0x56, 0x36, 0x00, 0x00, 0x00 }, // ;
{ 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // <
{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x00 }, // =
{ 0x41, 0x22, 0x14, 0x08, 0x00, 0x00 }, // >
{ 0x02, 0x01, 0x51, 0x09, 0x06, 0x00 }, // ?
{ 0x32, 0x49, 0x79, 0x41, 0x3E, 0x00 }, // @
{ 0x7E, 0x11, 0x11, 0x11, 0x7E, 0x00 }, // A
{ 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00 }, // B
{ 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00 }, // C
{ 0x7F, 0x41, 0x41, 0x22, 0x1C, 0x00 }, // D
{ 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00 }, // E
{ 0x7F, 0x09, 0x09, 0x01, 0x01, 0x00 }, // F
{ 0x3E, 0x41, 0x41, 0x51, 0x32, 0x00 }, // G
{ 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00 }, // H
{ 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00 }, // I
{ 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00 }, // J
{ 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00 }, // K
{ 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00 }, // L
{ 0x7F, 0x02, 0x04, 0x02, 0x7F, 0x00 }, // M
{ 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00 }, // N
{ 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00 }, // O
{ 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00 }, // P
{ 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00 }, // Q
{ 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00 }, // R
{ 0x46, 0x49, 0x49, 0x49, 0x31, 0x00 }, // S
{ 0x01, 0x01, 0x7F, 0x01, 0x01, 0x00 }, // T
{ 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00 }, // U
{ 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00 }, // V
{ 0x7F, 0x20, 0x18, 0x20, 0x7F, 0x00 }, // W
{ 0x63, 0x14, 0x08, 0x14, 0x63, 0x00 }, // X
{ 0x03, 0x04, 0x78, 0x04, 0x03, 0x00 }, // Y
{ 0x61, 0x51, 0x49, 0x45, 0x43, 0x00 }, // Z
{ 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [
{ 0x02, 0x04, 0x08, 0x10, 0x20, 0x00 }, // 55
{ 0x41, 0x41, 0x7F, 0x00, 0x00, 0x00 }, // ]
{ 0x04, 0x02, 0x01, 0x02, 0x04, 0x00 }, // ^
{ 0x40, 0x40, 0x40, 0x40, 0x40, 0x00 }, // _
{ 0x00, 0x01, 0x02, 0x04, 0x00, 0x00 }, // '
{ 0x20, 0x54, 0x54, 0x54, 0x78, 0x00 }, // a
{ 0x7F, 0x48, 0x44, 0x44, 0x38, 0x00 }, // b
{ 0x38, 0x44, 0x44, 0x44, 0x20, 0x00 }, // c
{ 0x38, 0x44, 0x44, 0x48, 0x7F, 0x00 }, // d
{ 0x38, 0x54, 0x54, 0x54, 0x18, 0x00 }, // e
{ 0x08, 0x7E, 0x09, 0x01, 0x02, 0x00 }, // f
{ 0x08, 0x14, 0x54, 0x54, 0x3C, 0x00 }, // g
{ 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00 }, // h
{ 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00 }, // i
{ 0x20, 0x40, 0x44, 0x3D, 0x00, 0x00 }, // j
{ 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k
{ 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00 }, // l
{ 0x7C, 0x04, 0x18, 0x04, 0x78, 0x00 }, // m
{ 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00 }, // n
{ 0x38, 0x44, 0x44, 0x44, 0x38, 0x00 }, // o
{ 0x7C, 0x14, 0x14, 0x14, 0x08, 0x00 }, // p
{ 0x08, 0x14, 0x14, 0x18, 0x7C, 0x00 }, // q
{ 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00 }, // r
{ 0x48, 0x54, 0x54, 0x54, 0x20, 0x00 }, // s
{ 0x04, 0x3F, 0x44, 0x40, 0x20, 0x00 }, // t
{ 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00 }, // u
{ 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00 }, // v
{ 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00 }, // w
{ 0x44, 0x28, 0x10, 0x28, 0x44, 0x00 }, // x
{ 0x0C, 0x50, 0x50, 0x50, 0x3C, 0x00 }, // y
{ 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00 } // z
};
//------------------------------------ Functions ------------------------------------
//------------------------------------ Functions ------------------------------------
// Initialize Graphic LCD
void glcd_Init(void)
{
//0xc0 : Display start line = 0 feeprom 0~63
//0xb8 : Set address X = 0 feeprom 0~7
//0x40 : Set address Y = 0 feeprom 0~63
//0x3f : Display = ON
int i=0,com[4] = {0xc0,0xb8, 0x40, 0x3f};
PORTC=0;
DDRC=0b01111011;
PORTD=0;
DDRD=0xFF;
reset();
RS = 0;
while(i<4)
{
write_left(com[i]);
i++;
}
i=0;
while(i<4)
{
write_right(com[i]);
i++;
}
}
//RESET RAM
void reset(void)
{
RST=0;
delay_ms(10);
RST=1;
delay_ms(10);
}
// Clear Lcd screen
void glcd_Clear()
{
unsigned char page[8]={0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf };
int i=0,j=0,index=0;
while(index<1024)
{
address_left(page[i],0x40);
RS=1;
for(j=0;j<64;j++)
{
write_left(0);
index++;
}
address_right(page[i],0x40);
RS=1;
for(j=0;j<64;j++)
{
write_right(0);
index++;
}
i++;
}
}
// Write a byte in Row x{0..7} and Column y{0..127}
void glcd_WriteByte(unsigned char x, unsigned char y, unsigned char data)
{
//unsigned char j;
if(y<64) // Left
{
address_left(((x|0b10111000)&0b10111111),((y|0b01000000)&0b01111111));
RS = 1;
write_left(data);
}
else // Right
{
y -= 64;
address_right(((x|0b10111000)&0b10111111),((y|0b01000000)&0b01111111));
RS = 1;
write_right(data);
}
}
// Drawing a pattern that is stored in FLASH memory
void glcd_DrawF(eeprom unsigned char *Pat)
{
unsigned char i,j;
for( i= 0; i<8; i++)
for( j =0; j<128; j++)
glcd_WriteByte(i,j,Pat[i*128+j]);
}
// Drawing a pattern that is stored in SRAM memory
void glcd_Draw(unsigned char Pat[])
{
unsigned char i,j;
for( i= 0; i<8; i++)
for( j =0; j<128; j++)
glcd_WriteByte(i,j,Pat[i*128+j]);
}
// Drawing a pattern that is stored in FLASH memory feeprom dot[x,y] until width w and Height h
void glcd_DrawBmpF(unsigned char Pat[],
unsigned char x, unsigned char y,
unsigned char h,unsigned char w)
{
unsigned char i,j;
unsigned int k=0;
for( i= x ; i<x+h+1; i++)
for( j =y ; j<y+w+1; j++)
{
k = (unsigned int)(i-x)*(w+1)+(unsigned int)(j-y);
glcd_WriteByte(i,j,Pat[k]);
}
}
// Drawing a pattern that is stored in SRAM memory with start point[x,y] until width w and Height h
void glcd_DrawBmp(unsigned char Pat[],
unsigned char x, unsigned char y,
unsigned char h,unsigned char w)
{
unsigned char i,j;
unsigned int k=0;
for( i= x ; i<x+h; i++)
for( j =y ; j<y+w; j++)
{
k = (unsigned int)(i-x)*(w)+(unsigned int)(j-y);
glcd_WriteByte(i,j,Pat[k]);
}
}
// Put a string Text in LCD with start point[x,y]
void glcd_Printf(unsigned char x, unsigned char y,char* str)
{
while (*str )
{
glcd_Putchar(x,y,*str++ );
y+=6;
}
}
// Put a charachter in point[x,y]
void glcd_Putchar(unsigned char x, unsigned char y,unsigned char ch)
{
unsigned char i;
ch-=32;
for(i=0;i<6;i++)
{
glcd_WriteByte(x,y,FontLookup[ch][i]);
y++;
};
}
//---------------------------------------------------------------------------------------
//---------------------------------- LCD's methods ---------------------------------
///inline
void address_right(unsigned char x,unsigned char y)
{
RS = 0;
write_right(x);
write_right(y);
return ;
}
///inline
void address_left(unsigned char x,unsigned char y)
{
RS = 0;
write_left(x);
write_left(y);
return ;
}
///inline
void write_right(unsigned char x )
{
CS1 = 0;
CS2 = 1;
delay_us(100);
DATA = x;
EN = 1;
delay_us(100);
EN = 0;
CS1 = 0;
CS2 = 0;
return ;
}
///inline
void write_left(unsigned char x)
{
CS1 = 1;
CS2 = 0;
delay_us(100);
DATA = x;
EN = 1;
delay_us(100);
EN = 0;
CS1 = 0;
CS2 = 0;
return ;
}
//---------------------------------------------------------------------------------------



دیدگاه