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