/*
///////////////////////////////////////////////////////////////////////////////
ATMEGA 128, 2561 Character LCD Library V.1.0
1st v.1.0 : 2011년 9월 23일
제작자 : (주)이지플로우
///////////////////////////////////////////////////////////////////////////////
*/
#ifdef EF_CHARACTER_LCD
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// CHARACTER LCD포트를 정의합니다.
// Character LCD Module : YCG1602F,16x2 Chars.LED backlight
#define CLCD_DATA (PORTA)
#define CLCD_DATA_DIR (DDRA)
#define CLCD_CONTROL_DIR (DDRC)
#define CLCD_CONTROL_BIT ( (1<<0)|(1<<1)|(1<<2) )
#define CLCD_RW_1 SETBIT (PORTC, 1)
#define CLCD_RW_0 CLEARBIT(PORTC, 1)
#define CLCD_E_1 SETBIT (PORTC, 0)
#define CLCD_E_0 CLEARBIT(PORTC, 0)
#define CLCD_RS_1 SETBIT (PORTC, 2)
#define CLCD_RS_0 CLEARBIT(PORTC, 2)
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Character LCD 함수를 정의합니다.
// write a command(instruction) to Character LCD
// Character LCD Module 에 명령을 저장합니다.
void CLCD_Command(unsigned char command)
{
CLCD_RS_0; // Rs = 0
CLCD_E_0; // E = 0
CLCD_RW_0; // RW = 0;
CLCD_DATA_DIR= 0xFF; // LCD Data output
CLCD_DATA = command; // Output Data
CLCD_E_1; // E = 1
Delay_us(1); // 1us Delay
CLCD_E_0; // E = 0
Delay_us(50);
}
// write a Data to Character LCD
// Character LCD Module 에 데이터를 저장합니다.
void CLCD_Data(unsigned char data)
{
CLCD_RS_1; // Rs = 1
CLCD_E_0; // E = 0
CLCD_RW_0; // RW = 0;
CLCD_DATA_DIR= 0xFF; // LCD Data output
CLCD_DATA = data; // Output data
CLCD_E_1; // E = 1
Delay_us(1); // 1us Delay
CLCD_E_0; // E = 0
Delay_us(50);
}
// LCD 모듈을 초기화 합니다.
void CLCD_Initialize(void)
{
Delay_ms(50);
CLCD_Command(0x3c); // function set(8 bit, 2 line, 5x7 dot)
CLCD_Command(0x0C); // display control(display ON, cursor OFF)
CLCD_Command(0x01); // clear display
Delay_ms(2);
CLCD_Command(0x06); // entry mode set(increment, not shift)
}
// clear CLCD screen
// LCD Module 화면을 지웁니다.
void CLCD_clear(void)
{
unsigned char i;
CLCD_Command(0x80);
for(i = 0; i <= 40; i++) { CLCD_Data(' '); }
CLCD_Command(0x80+0x40);
for(i = 0; i <= 40; i++) { CLCD_Data(' '); }
}
// set English character position
// 영문 글자 위치를 설정합니다.
void CLCD_xy(unsigned char x,unsigned char y)
{
unsigned char i;
if (x == 0) { i = 0x80 + y + 0; }
else if (x == 1) { i = 0x80+0x40 + y + 0; }
else if (x == 2) { i = 0x80 + y + 20; }
else { i = 0x80+0x40 + y + 20; }
CLCD_Command(i);
}
// display a 8x16 Dot English(ASCII)
// 8*16 영문글자(ASCII)를 표시합니다.
//void CLCD_ASCII(unsigned char Ecode)
//{
// CLCD_Data(Ecode);
//}
// 방법을 바꿔봅니다.
#define CLCD_ASCII CLCD_Data
// display a string on Character LCD
// Character LCD Module 에 문자열을 표시합니다.
void CLCD_CommandString(unsigned char command, char *string)
{
// start position of string
CLCD_Command(command);
// 액정에 문자열을 표시합니다.
while(*string != '\0')
{
CLCD_Data(*string);
string++;
}
}
// display a string on Character LCD
// Character LCD Module 에 문자열을 표시합니다.
void CLCD_String(unsigned char x,unsigned char y,unsigned char *string)
{
CLCD_xy(x,y); // x = 0 - 3, y = 0 - 15
// 액정에 문자열을 표시합니다.
while(*string != '\0')
{
CLCD_ASCII(*string); // display English character
string++;
}
}
// Display floating-point number xx.x
// 00.0로 소수점을 표시합니다.
void CLCD_2Dot1Float(float number)
{
unsigned int i, j;
j = (int)(number*10. + 0.5);
i = j / 100; // 10^1
if(i == 0) { CLCD_ASCII(' '); }
else { CLCD_ASCII(i + '0'); }
j = j % 100; // 10^0
i = j / 10;
CLCD_ASCII(i + '0');
CLCD_ASCII('.');
i = j % 10; // 10^-1
CLCD_ASCII(i + '0');
}
// display 1-digit decimal number
// 1자리의 10진수 값을 표시합니다.
unsigned char CLCD_1DigitDecimal(unsigned char number, unsigned char flag)
{
number %= 10; // 10^0
if ((number == 0) && (flag == 0))
{
CLCD_ASCII(' ');
return 0;
}
CLCD_ASCII(number + '0');
return 1;
}
// display 2-digit decimal number
// 2자리의 10진수 값을 표시합니다.
void CLCD_2DigitDecimal(unsigned char number)
{
unsigned int i;
unsigned char flag;
flag = 0;
number = number % 100;
i = number/10;
flag = CLCD_1DigitDecimal(i, flag); // 10^1
i = number % 10;
CLCD_ASCII(i + '0'); // 10^0
}
// display 3-digit decimal number
// 3자리의 10진수 값을 표시합니다.
void CLCD_3DigitDecimal(unsigned int number)
{
unsigned int i;
unsigned char flag;
flag = 0;
number = number % 1000;
i = number/100;
flag = CLCD_1DigitDecimal(i, flag); // 10^2
number = number % 100;
i = number/10;
flag = CLCD_1DigitDecimal(i, flag); // 10^1
i = number % 10;
CLCD_ASCII(i + '0'); // 10^0
}
// display 4-digit decimal number
// 4자리의 10진수 값을 표시합니다.
void CLCD_4DigitDecimal(unsigned int number)
{
unsigned int i;
unsigned char flag;
flag = 0;
number = number % 10000;
i = number/1000;
flag = CLCD_1DigitDecimal(i, flag); // 10^3
number = number % 1000;
i = number/100;
flag = CLCD_1DigitDecimal(i, flag); // 10^2
number = number % 100;
i = number/10;
flag = CLCD_1DigitDecimal(i, flag); // 10^1
i = number % 10;
CLCD_ASCII(i + '0'); // 10^0
}
// display 1-digit hex number
// 1자리의 16진수 값을 표시합니다.
void CLCD_1DigitHex(unsigned char i)
{
i &= 0x0F; // 16^0
if(i <= 9) { CLCD_ASCII(i + '0'); }
else { CLCD_ASCII(i - 10 + 'A'); }
}
// display 2-digit hex number
// 2자리의 16진수 값을 표시합니다.
void CLCD_2DigitHex(unsigned char number)
{
CLCD_1DigitHex(number >> 4); // 16^1
CLCD_1DigitHex(number ); // 16^0
}
// display 4-digit hex number
// 4자리의 16진수 값을 표시합니다.
void CLCD_4DigitHex(unsigned int number)
{
CLCD_1DigitHex(number >> 12); // 16^3
CLCD_1DigitHex(number >> 8 ); // 16^2
CLCD_1DigitHex(number >> 4 ); // 16^1
CLCD_1DigitHex(number ); // 16^0
}
// display 8-bit binary number
// 8자리의 2진수 값을 표시합니다.
void CLCD_8BitBinary(unsigned char number)
{
CLCD_ASCII(((number >> 7) & 0x01) + '0'); // 2^7
CLCD_ASCII(((number >> 6) & 0x01) + '0'); // 2^6
CLCD_ASCII(((number >> 5) & 0x01) + '0'); // 2^5
CLCD_ASCII(((number >> 4) & 0x01) + '0'); // 2^4
CLCD_ASCII(((number >> 3) & 0x01) + '0'); // 2^3
CLCD_ASCII(((number >> 2) & 0x01) + '0'); // 2^2
CLCD_ASCII(((number >> 1) & 0x01) + '0'); // 2^1
CLCD_ASCII(((number ) & 0x01) + '0'); // 2^0
}
///////////////////////////////////////////////////////////////////////////////
#endif
|