1) 지식 창고는 본인이 작성한 콘텐츠(팁/노하우/리소스/강좌 등)을 무료 혹은 가상화폐인 납포인트를 통해 공유하는 공간입니다.
2) 본인이 작성한 콘텐츠에 대해서만 지식 창고에 등록할 수 있으며, 저작권에 위배되는 콘텐츠는 사전경고 없이 삭제될 수 있습니다.
3) 콘텐츠 구매 및 첨부파일 다운로드는 회원그룹 '연구원' 이상 가능하오니, 경험치를 쌓아 진급한 후에 이용 부탁드립니다.
4) 무료 콘텐츠의 본문은 구매절차 없이 즉시 이용할 수 있으며, 판매 납포인트가 있는 콘텐츠는 구매 후 이용할 수 있습니다.
5) 콘텐츠 판매에 따른 납포인트 수익은 지정한 비율(50%)에 따라 판매자에게 지급하며, 납포인트 수익을 통해 진급을 빨리할 수 있습니다.
6) 구매 후 평가를 하면 구매 납포인트의 20%를 돌려 드립니다.
판매자 | 심야땜쟁이 | 판매 납포인트 | 무료 | 평점 | 0점 / 총 0명 참여 |
---|
이번에 프로젝트 하나 하면서,. 이쁘장한 LCD 하나가 보여서, 사용해 봤습니다.
아래는 소스 코드 구요.
드라이버는 s6b0724a01 을 사용하네요. 어렵진 않으니 이 종류 드라이버 사용하는 LCD 사용하실떄 참고하셔요.
Compiler는 CodeVision AVR 2.04.4a 입니다.
#define LCD_COMMAND_DISPLAY_CONTROL 0xAE // 0 : Display Off 1 : Display On
#define LCD_COMMAND_REVERSE_DISPLAY_CONTROL 0xA6 // 0 : Normal Display 1 : Reverse Display
#define LCD_COMMAND_ENTIRE_DISPLAY_CONTROL 0xA4 // 0 : Normal Display 1 : Entire Display On
// ----------------------------------------------------------------
// Duty Ratio DUTY1 DUTY0 BIAS = 0 BIAS = 1
// ----------------------------------------------------------------
// 1/33 0 0 1/6 1/5
// ----------------------------------------------------------------
// 1/49 0 1 1/8 1/6
// ----------------------------------------------------------------
// 1/55 1 0 1/8 1/6
// ----------------------------------------------------------------
// 1/65 1 1 1/9 1/7
// ----------------------------------------------------------------
#define LCD_COMMAND_LCD_BIAS_SELECT 0xA2
// -----------------------------------------------------
// S1 S0 Status of static indicator output
// -----------------------------------------------------
// 0 0 OFF
// 0 1 ON ( about 1 second blinking )
// 1 0 ON ( about 0.5 second blinking )
// 1 1 ON ( always ON )
// -----------------------------------------------------
#define LCD_COMMAND_SET_STATIC_INDICATOR_MODE 0xAC // 0 : Static Indicator Off 1 : Static Indicator On
#define LCD_COMMAND_SET_STATIC_INDICATOR_REG 0x00
#define LCD_COMMAND_DISPLAY_H_DIR_SELECT 0xA0 // 0 : Normal Direction 1 : Reverse Direction
#define LCD_COMMAND_DISPLAY_V_DIR_SELECT 0xC0 // 0x00 : Normal Direction ( COM0 -> COM63 ) 0x08 : Reverse Direction ( COM63 -> COM0 )
#define LCD_COMMAND_SET_MODIFY_READ 0xEE
#define LCD_COMMAND_RESET 0xE2
#define LCD_COMMAND_SET_DISPLAY_START_LINE 0x40 // 0x00 ~ 0x3F
#define LCD_COMMAND_SET_PAGE_ADDRESS 0xB0 // 0x01 ~ 0x07
#define LCD_COMMAND_SET_COLUMN_ADDRESS_MSB 0x10 // 0x00 ~ 0x83
#define LCD_COMMAND_SET_COLUMN_ADDRESS_LSB 0x00
// ------------------------------------------------------------------
// VC VR VF Status of Internal Power supply circuits
// ------------------------------------------------------------------
// 0 Internal Voltage Converter circuit is OFF
// 1 Internal Voltage Converter circuit is ON
// ------------------------------------------------------------------
// 0 Interval Voltage regulator circuit is OFF
// 1 Interval Voltage regulator circuit is ON
// ------------------------------------------------------------------
// 0 Interval Voltage follower circuit is OFF
// 1 Interval Voltage follower circuit is ON
// ------------------------------------------------------------------
#define LCD_COMMAND_POWER_CONTROL 0x28
// -----------------------------------------------------
// R2 R1 R0 (1+Ra/Rb) Ratio
// -----------------------------------------------------
// 0 0 0 3.0
// -----------------------------------------------------
// 0 0 1 3.5
// -----------------------------------------------------
// 0 1 0 4.0
// -----------------------------------------------------
// 0 1 1 4.5
// -----------------------------------------------------
// 1 0 0 5.0 ( Default )
// -----------------------------------------------------
// 1 0 1 5.5
// -----------------------------------------------------
// 1 1 0 6.0
// -----------------------------------------------------
// 1 1 1 6.4
// -----------------------------------------------------
#define LCD_COMMAND_REG_RESISTOR_SELECT 0x20
// ------------------------------------------------------------------------
// SV5 ~ SV0 Reference Voltage Parameter V0 Contrast
// ------------------------------------------------------------------------
// 0x00 0 Minimum Low
// 0x01 1 . .
// . . . .
// . . . .
// 0x20 32 ( Default ) . .
// . . . .
// . . . .
// 0x3E 62 . .
// 0x3F 63 Maximum High
// ------------------------------------------------------------------------
#define LCD_COMMAND_SET_REF_VOLT_MODE 0x81
#define LCD_COMMAND_NOP 0xE3
// BIT 7 : BUSY - 0 : Chip is Active 1 : Chip is being busy
// BIT 6 : ADC - 0 : Reverse Direction ( SEG131 -> SEG0 ) 1 : Normal Direction ( SEG0 -> SEG131 )
// BIT 5 : ON/OFF - 0 : Display On 1 : Display Off
// BIT 4 : RESETB - 0 : Chip is Active 1 : Chip is being reset
#define LCD_COMMAND_READ_STATUS 0x00
#define LCD_COMMAND_WRITE_DISPLAY_DATA 0x00
#define LCD_COMMAND_READ_DISPLAY_DATA 0x00
flash byte UnmaskTable[] = { 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F };
byte LCD_ScreenBuffer[8][128];
void LCD_WriteCommand ( byte Command )
{
LM6029A_RS = 0;
LM6029A_DATA_OUT = Command;
LM6029A_CS = 0;
LM6029A_WR = 0;
#asm ("nop");
LM6029A_WR = 1;
LM6029A_CS = 1;
#asm ("nop");
}
void LCD_WriteData ( byte Data )
{
LM6029A_RS = 1;
LM6029A_DATA_OUT = Data;
LM6029A_CS = 0;
LM6029A_WR = 0;
#asm ("nop");
LM6029A_WR = 1;
LM6029A_CS = 1;
#asm ("nop");
}
byte LCD_ReadData ( void )
{ byte ReturnValue;
LM6029A_DATA_DIR = 0x00;
LM6029A_RS = 1;
LM6029A_CS = 0;
LM6029A_RD = 0;
#asm ("nop");
ReturnValue = LM6029A_DATA_IN;
LM6029A_RD = 1;
LM6029A_CS = 1;
#asm ("nop");
LM6029A_DATA_DIR = 0xFF;
return ReturnValue;
}
byte LCD_ReadStatus ( void )
{ byte ReturnValue;
LM6029A_DATA_DIR = 0x00;
LM6029A_RS = 0;
LM6029A_CS = 0;
LM6029A_RD = 0;
#asm ("nop");
ReturnValue = LM6029A_DATA_IN;
LM6029A_RD = 1;
LM6029A_CS = 1;
#asm ("nop");
LM6029A_DATA_DIR = 0xFF;
return ReturnValue;
}
void LCD_SetPage ( byte Page )
{ LCD_WriteCommand ( LCD_COMMAND_SET_PAGE_ADDRESS + Page );
}
byte LCD_SetAddressY ( byte AddressY )
{ byte Page;
byte BitCount;
Page = ( AddressY >> 0x03 ) & 0x07;
LCD_WriteCommand ( LCD_COMMAND_SET_PAGE_ADDRESS + Page );
BitCount = ( AddressY & 0x07 );
return BitCount;
}
void LCD_Initialize ( void )
{
LCD_WriteCommand ( LCD_COMMAND_LCD_BIAS_SELECT );
LCD_WriteCommand ( LCD_COMMAND_DISPLAY_H_DIR_SELECT );
LCD_WriteCommand ( LCD_COMMAND_DISPLAY_V_DIR_SELECT + 0x08 );
LCD_WriteCommand ( LCD_COMMAND_SET_DISPLAY_START_LINE + 0x00 );
LCD_WriteCommand ( LCD_COMMAND_POWER_CONTROL + 0x04 );
delay_ms (50);
LCD_WriteCommand ( LCD_COMMAND_POWER_CONTROL + 0x06 );
delay_ms (50);
LCD_WriteCommand ( LCD_COMMAND_POWER_CONTROL + 0x07 );
delay_ms (50);
LCD_WriteCommand ( LCD_COMMAND_REG_RESISTOR_SELECT + 0x06 );
LCD_WriteCommand ( LCD_COMMAND_SET_REF_VOLT_MODE );
LCD_WriteCommand ( 0x16 );
LCD_WriteCommand ( LCD_COMMAND_DISPLAY_CONTROL + 0x01 );
}
좋은 자료 감사합니다.