Easyflow Inc.
हिन्दी · विदेश · अमेरिकी डॉलर ($) में दिखाया जा रहा है। आप इसे ऊपर दिए ग्लोब आइकन से बदल सकते हैं।

FM8P तकनीकी दस्तावेज़

ATMEGA128 atmega2561 문자형 LCD 소스

AVR 소스코드 ATMEGA128 atmega2561 CLCD Library V10 2011-10-06
/*
///////////////////////////////////////////////////////////////////////////////

    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

2026 चुसोक अवकाश के दौरान कार्यालय बंद रहने की सूचना