| Total 38 (31/38) | ºÎ·ÏÀ» Æ÷ÇÔÇÏ¿© ÃÑ 38°Á·Π±¸¼ºµÇ¾î ÀÖ½À´Ï´Ù. Ã¥À» ÀеíÀÌ ¾ÕÆä¿¡ÁöºÎÅÍ »ç¿ëÇϽʽÿä |
Á¦9Àå 8051 È°¿ë- 2°
4. LCD(liquid crystal display) µð½ºÇ÷¹ÀÌ Á¦¾î
LCD ´Â Çϵå¿þ¾î ÀåÄ¡¸¦ ÀÌ¿ëÇÏ¿© ÀÛ¾÷À» ¼öÇàÇÒ ¶§ ´«À¸·Î °¢ ÀåÄ¡ÀÇ »óź¯È¸¦ È®ÀÎÇϱâÀ§ÇØ
7-¼¼±×¸ÕÆ®¿Í ÇÔ²² »ê¾÷ü¿¡¼ °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â µð½ºÇ÷¹ÀÌ ÀåÄ¡ÀÌ´Ù.
ÃÖ±Ù¿¡´Â LCD ±â¼úÀÇ µµ¾àÀûÀÎ ¹ßÀüÀ¸·Î ÆÛ½º³Î ÄÄÇ»ÅÍÀÇ ¸ð´ÏÅÍ¿¡¼ °¡ÀüÁ¦Ç°ÀÎ TV, ³ÃÀå°í, ¿Àµð¿ÀµîÀ¸·Î
±× ÀÀ¿ëºÐ¾ß°¡ ±¤¹üÀ§ÇÏ°Ô È®´ëµÇ¾ú´Ù.
¿ì¸®°¡ ½ÇÇèÇÏ·Á´Â LCD ´Â µð½ºÇ÷¹ÀÌºÎ¿Í ÄÁÆ®·Ñ·¯ºÎ°¡ ÅëÇյǾî ÇϳªÀÇ ¸ðµâȵǾî ÀÖ´Â LCD ¸ðµâÀ» ÀÌ¿ëÇÏ¿©
±âº»ÀûÀÎ LCD Á¦¾î±â¼úÀ» ½ÀµæÇÏ°íÀÚ ÇÑ´Ù. º¸Åë ½ÃÁß¿¡¼ ¸¹ÀÌ ÆǸŵǴ È÷´ÙÂî(HITACH)ÀÇ 16¹®ÀÚ 2¶óÀÎ Çü½ÄÀÇ
HD4478U¸¦ ³»ÀåÇÏ°í ÀÖ´Â ¸ðµâ·Î ³»¿ëÀ» ±â¼úÇÒ °ÍÀÌ´Ù.

ÀνºÆ®·°¼Ç ·¹Áö½ºÅÍ(IR)CD ¸ðµâÀÇ È¯°æÀ» ¾î¶»°Ô »ç¿ëÇÒ °ÍÀΰ¡¸¦ Á¤ÀÇÇÏ°í µ¥ÀÌÅÍ ·¹Áö½ºÅÍ(DR)Àº
LCD ¸ðµâÀÇ ±ÛÀÚ¸¦ ³ªÅ¸³»±â À§ÇÑ µ¥ÀÌÅÍ °ªÀÌ µé¾î ÀÖ´Â ·¹Áö½ºÅÍ ÀÌ´Ù.
¡Ø HD4478U¸¦ ³»ÀåÇÏ°í ÀÖ´Â ¸ðµâÀÇ Æ¯Â¡¿ä¾à
- 4ºñÆ®, 8ºñÆ®ÀÇ ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼¿Í ÀÎÅÍÆäÀ̽º °¡´É
- 5 x 8, 5 x 10 µµÆ®ÀÇ µð½ºÇ÷¹ÀÌ °¡´É
- 80 x 8 ºñÆ®ÀÇ µð½ºÇ÷¹ÀÌ RAM(D.D RAM : ÃÖ´ë 80±ÛÀÚ)
- 240 ÆùÆ®¸¦ À§ÇÑ 9,920ºñÆ®ÀÇ ±ÛÀÚ ¹ß»ý±â ROM(C.G ROM)
- 64 x 8 ºñÆ® ±ÛÀÚ ¹ß»ý±â RAM(C.G RAM)
- + 5 volt ´ÜÀÏ Àü¿ø
4-1. LCD ÀÇ ÇÉ ±â´É
RS(Register Selcet ; No 4)
ÀԷ´ÜÀÚ·Î LCD ÀÇ Á¦¾î¸í·É/µ¥ÀÌÅÍ ÀÔ·Â Á¦¾î½ÅÈ£¸¦ ¼³Á¤
- ¡° 0 ¡±À̸é ÀνºÆ®·°¼Ç ÀÔ·Â ¼³Á¤ (IR ¼±ÅÃ)
- ¡° 1 ¡±ÀÌ¸é µ¥ÀÌÅÍ ÀÔ·Â ¼³Á¤(DR ¼±ÅÃ)
4-1-1. E(Enable ; No 6)
ÀԷ´ÜÀÚ·Î LCD¸¦ µ¿ÀÛÇÏ°Ô ÇÑ´Ù
- ¡° 0 ¡±À̸é LCD µ¿ÀÛÁ¤Áö
- ¡° 1 ¡±À̸é LCD µ¿ÀÛ
4-1-2. R/W(Read/Write ; No 5)
ÀԷ´ÜÀÚ·Î ¾×Á¤ Ç¥½Ã ¸ðµâ¿¡ µ¥ÀÌÅÍ È¤Àº ¸í·ÉÀ» Àбâ, ¾²±â ÇÒ ¶§ »ç¿ëÇÑ´Ù
- ¡° 0 ¡±ÀÌ¸é ¾²±âµ¿ÀÛ (CPU¿¡¼ LCD ·Î)
- ¡° 1 ¡±À̸é Àϱ⵿ÀÛ (LCD¿¡¼ CPI ·Î)
4-1-3. D0 ¢¦ D7(Data Bus ; No 7 ¢¦ No 14)
CPU ¿Í LCD »çÀÌÀÇ µ¥ÀÌÅ͸¦ ÁÖ°í ¹Þ±â À§ÇÑ ´ÜÀÚ
(¸¸¾à 4 BIT·Î¸¸ »ç¿ë½Ã¿¡´Â D4 ¢¦ D7 ¸¸À» ÀÌ¿ëÇÑ´Ù)
4-1-4. VDD(No 1)
LCD ÀÇ Àü¿øÀ» Àΰ¡ÇÏ´Â ´ÜÀÚ +5 volt ¿¬°á
4-1-5. VSS(No 2)
LCD ÀÇ Àü¿øÀ» Àΰ¡ÇÏ´Â ´ÜÀÚ 0 volt ¿¬°á
4-1-6. VL(No 3)
LCD ÀÇ ¹à±â¸¦ Á¶ÀýÇÏ´Â ´ÜÀÚ

4-2. LCD ¸ðµâÀÇ ³»ºÎ ±¸¼º
4-2-1. ·¹Áö½ºÅÍ(Register)
LCD ÄÁÆ®·Ñ·¯(HDD44780U)¿¡´Â IR °ú DR , Áï µÎ °³ÀÇ ·¹Áö½ºÅÍ°¡ Á¸ÀçÇϴµ¥ À̵éÀº LCD ¸ðµâÀÇ 4¹øÇÉÀÎ
RS(Register Select)½ÅÈ£´ÜÀÚ¿¡ ÀÇÇÏ¿© ¾î¶² ½ÅÈ£°¡ Àΰ¡µÇ´ÂÁö¿¡ µû¶ó ¼±ÅõȴÙ
4-2-1-1. IR(Instruction Register) : CPU ·ÎºÎÅÍ ½á ³Ö±â¸¸ °¡´É
- LCD ȸé Clear, Ä¿¼ ½¬ÇÁÆ®, ±ÛÀÚ ON\OFF Á¦¾îµî.,
- Ç¥½Ã µ¥ÀÌÅÍ RAM(D,D RAM)°ú ±ÛÀÚ Á¦³×·¹ÀÌÅÍ RAM(C.G. RAM)ÀÇ Ç¥½Ã¸¦ À§ÇÑ ¾îµå·¹½º Á¤º¸¸¦ ÀúÀå
4-2-1-2. DR(Data Register) :
- D,D RAM ¶Ç´Â C,G RAM ¿¡ ½á³Ö±â À§ÇÑ µ¥ÀÌÅ͸¦ ÀúÀåÇϰųª D,D RAM ȤÀº
C,G, RAM À¸·ÎºÎÅÍ ÀÐÇôÁø µ¥ÀÌÅÍ°¡ ÀϽÃÀûÀ¸·Î ÀúÀåµÇ´Â ·¹Áö½ºÅÍ
4-2-2. ºñÁö Ç÷¡±×(Busy Flag ; BF)
¿¬¼ÓÀûÀ¸·Î LCD ¸ðµâ¿¡ Á¦¾î¸í·ÉÀÌ ÀÔ·ÂµÉ ¶§ LCD ¸ðµâÀÌ Ã³¸®ÇÒ ¼ö Àִ°¡¸¦ ³ªÅ¸³»´Â »óÅÂÇ¥½Ã
- BF = 0 : ´ÙÀ½ ÀνºÆ®·°¼ÇÀ» ½á ³ÖÀ» ¼ö ÀÖ´Ù.
- BF = 1 : HD44780U ´Â ³»ºÎµ¿ÀÛ¸ðµåÀ̹ǷΠÁ¦¾î¸í·ÉÀº ¹Þ¾Æ Áú ¼ö ¾ø´Ù
4-2-3. ¾îµå·¹½º Ä«¿îÅÍ(Address Counter ; AC)
D,D RAM °ú C,G RAM ¿¡ ¾îµå·¹½º¸¦ ÇÒ´çÇÑ´Ù.

4-2-4. Ç¥½Ã µ¥ÀÌÅÍ ·¥(Display Data RAM ; D,D RAM)
8 bitÀÇ ¹®ÀÚÄڵ忡 ´ëÀÀµÇ´Â µð½ºÇ÷¹ÀÌ µ¥ÀÌÅ͸¦ ÀúÀåÇÑ´Ù. ¿ë·®Àº 80 x 8 bit ȤÀº 80¹®ÀÚÀÌ´Ù.

4-2-5. ¹®ÀÚ Á¦³Ê·¹ÀÌÅÍ ROM(Charactor Generator ROM ; C,G ROM)
8 bit ¹®ÀÚÄÚµå·ÎºÎÅÍ 208°³ÀÇ 5 x 8µµÆ® ȤÀº 32°³ÀÇ 5 x10µµÆ®ÀÇ ¹®ÀÚÆÐÆÝÀ» ¹ß»ýÇÑ´Ù.
4-2-6. ¹®ÀÚ Á¦³Ê·¹ÀÌÅÍ RAM(Charactor Generator RAM ; C,G RAM)
»ç¿ëÀÚ°¡ ÇÁ·Î±×·¥¿¡ ÀÇÇØ ¹®ÀÚÆÐÅÏÀ» ¸¸µé°æ¿ì¿¡ »ç¿ëµÇ´Â RAM ¿µ¿ªÀ¸·Î 5 x 8µµÆ®ÀÇ ¹®ÀÚÆÐÅÏÀ» ¸¸µé°æ¿ì´Â
ÃÖ´ë 8 Á¾·ùÀÇ ÆÐÅÍÀ» ¸¸µé ¼ö ÀÖ°í 5 x 10µµÆ®ÀÇ °æ¿ì´Â 4Á¾·ùÀÇ ¹®ÀÚÆÐÅÏÀ» ¸¸µé ¼ö ÀÖ´Ù.
4-3. LCD ÀνºÆ®·°¼Ç

-I/D : D,D RAM ÀÇ ¾îµå·¹½ºÀÇ ÀÎÅ©¸®¸ÕÆ®(Áõ°¡ :I/D=1)ȤÀº µðÅ©¸®¸ÕÆ®(°¨¼Ò :I/D=0)
- S : ±ÛÀÚ°¡ Ç¥±âµÈ Àüü µð½ºÇ÷¹À̸¦ ÁÂ, ¿ì·Î À̵¿½ÃÅ°±â À§ÇÑ º¯¼ö
- S = 1, I/D = 1 : ÁÂ_½¬ÇÁÆ®
- S = 1, I/D = 0 : ¿ì_½¬ÇÁÆ®
4-3-4. µð½ºÇ÷¹ÀÌ ON/OFF Á¦¾î(Display on/off control)
D3 ¹ø ºñÆ®°¡ 1ÀÎ °æ¿ì·Î Àüü µð½ºÇ÷¹ÀÌ(D)ÀÇ on/off Á¦¾î, Ä¿¼(C)ÀÇ on/off Á¦¾î, ±×¸®°í Ä¿¼À§Ä¡¿¡ ÀÖ´Â
¹®ÀÚ¸¦ ±ô¹Ú(B)ÀÌ°Ô ÇÏ´Â ±â´ÉÀ» ÇÑ´Ù. ½ÇÇà½Ã°£Àº 37¥ìs À̹ǷΠ½Ã°£Áö¿¬ÀÌ ÇÊ¿äÇÏ´Ù.

4-3-5. Ä¿¼ µð½ºÇ÷¹ÀÌ ½¬ÇÁÆ®(Cursor display shift)
D4 ¹ø ºñÆ®°¡ 1ÀÎ °æ¿ì·Î DD RAM ÀÇ ³»¿ëÀ» º¯ÈÇÏÁö ¾Ê´Â »óÅ¿¡¼ Ä¿¼¸¦ ¿òÁ÷ÀÌ°Ô ÇÏ°í
±ÛÀÚ°¡ Ç¥±âµÇ´Â µð½ºÇ÷¹ÀÌ ºÎºÐÀ» ½¬ÇÁÆ® Çϱâ À§ÇÑ ¸í·É¾î

4-3-6. ±â´É ¼³Á¤(Function Set)
D5 ¹ø ºñÆ®°¡ 1ÀÎ °æ¿ì·Î LCD¸¦ »ç¿ëÇϱâ Àü¿¡ ¿ì¼±µÇ¾î¾ß ÇÒ LCD ÀÇ 쵝ȸ¦ ¼³Á¤Çϱâ À§ÇÑ ¹æ¹ýÀ» ³ªÅ¸³½´Ù.



==================================================================
< LCD ÀÇ ¹ü¿ë ±¸µ¿ ÇÁ·Î±×·¥ >
/* LCD ÃʱâÈ(Initial) ÇÁ·Î±×·¥ */
void lcd_init()
{
write_XDATA(LCDIR,0x38); /* IR -> 0011 1000b */
ddelay(1000);
write_XDATA(LCDIR,0x38); /* IR -> 0011 1000b */
ddelay(1000);
write_XDATA(LCDIR,0x38); /* IR -> 0011 1000b */
ddelay(1000);
write_XDATA(LCDIR,0x0e); /* IR -> 0011 1110b */
ddelay(300);
write_XDATA(LCDIR,0x02); /* IR -> 0011 0010b : Home return */
ddelay(300);
write_XDATA(LCDIR,0x01); /* IR -> 0011 0001b : Clear */
ddelay(300);
}
/* ÇÑ ±ÛÀÚ¸¸À» Ç¥ÇöÇÏ´Â ÇÁ·Î±×·¥ */
void char_out(char s)
{
int i;
write_XDATA(LCDDR,s);
for(i=0;i<100;i++);
}
/* ¿©·¯±ÛÀÚ¸¦ Çѹø¿¡ Ç¥ÇöÇÏ´Â ÇÁ·Î±×·¥ */
void string_out(char *str)
{
int i=0;
do{
char_out(str[i]);
}while(str[++i]!=0);
}
/* ¿øÇÏ´Â ±ÛÀÚ¸¦ ÁÂÇ¥ÀÇ °³³äÀ¸·Î Position ÇÏ´Â ÇÁ·Î±×·¥ */
void x_y_position(char x,char y)
{
int i;
unsigned char position;
if(y>1)y=1; /* y°ªÀÌ Âü(y=1)À̸é x + 0xc0ÀÌ Æ÷Áö¼ÇÀ¸·Î */
if(x>15)x=15; /* y°ªÀÌ °ÅÁþÀ̸é(y=0)À̸é x + 0x80ÀÌ Æ÷Áö¼ÇÀ¸·Î */
position=y ? x+0xc0 : x + 0x80; /* a = b ? c ¿¬»êÀÚÀÇ ÀÌÇØ */
write_XDATA(LCDIR,position); /* À§Ä¡°áÁ¤ */
for(i=0;i<100;i++);
}

/* ±ÛÀÚÀÇ ÁÂÃø ¶Ç´Â ¿ìÃø À̵¿ ÇÁ·Î±×·¥ */
void display_shift(char p)
{
int i;
if(p==RIGHT) write_XDATA(LCDIR,0x1c); /* 0001 1100b */
else if(p==LEFT) write_XDATA(LCDIR,0x18); /* 0001 1000b */
for(i=0;i<100;i++);
}
/* Ä¿¼¸¸ ÁÂÃø ¶Ç´Â ¿ìÃø À̵¿ ÇÁ·Î±×·¥ */
void cursor_shift(char p)
{
int i;
if(p==RIGHT) write_XDATA(LCDIR,0x14); /* 0001 0100b */
else if(p==LEFT) write_XDATA(LCDIR,0x10); /* 0001 0000b */
for(i=0;i<100;i++);
}
/* µð½ºÇ÷¹ÀÌ, Ä¿¼, Ä¿¼±ôºýÀÓÀÇ ±â´É ÇÁ·Î±×·¥ */
void on_off_display(a,b,c)
unsigned char a,b,c;
{
int i;
unsigned char standard=0x08; /* standard °ª -> 0000 1000b */
if(a==ON) a=0x04; /* a°ªÀÌ on À̸é a°ªÀº 0000 0100b */
else a=0x00;
if(b==ON) b=0x02; /* b°ªÀÌ on À̸é b°ªÀº 0000 0010b */
else b=0x00;
if(c==ON) c=0x01; /* c°ªÀÌ on À̸é c°ªÀº 0000 0001b */
else c=0x00;
/* standard, a, b, c °ªÀ» or ÇÏ¸é¼ ¼³Á¤µÈ ¿ÜºÎÀåÄ¡ÀÇ ¹øÁö(LCD ÂÊÀ¸·Î)·Î µ¥ÀÌÅÍ°¡ µ¥ÀÌÅÍ ¶óÀÎÀ¸·Î Àü¼Û */
write_XDATA(LCDIR,standard|a|b|c);
for(i=0;i<100;i++);
}
/* ¸ðµç ±ÛÀÚ´Â ¿øÀ§Ä¡Çϸé¼, Ä¿¼¿Í µð½ºÇ÷¹ÀÌ ºÎºÐ¸¸ óÀ½À§Ä¡·Î Àü¼ÛÇÏ´Â ÇÁ·Î±×·¥ */
void cursor_home()
{
int i;
write_XDATA(LCDIR,0x02); /* 0000 0010b */
for(i=0;i<100;i++);
}
/* µð½ºÇ÷¹ÀÌ ºÎºÐ¿¡ Ç¥ÇöµÈ ±ÛÀÚ¸¦ Áö¿ì´Â ÇÁ·Î±×·¥ */
void lcd_clear()
{
int i;
write_XDATA(LCDIR,0x01);
for(i=0;i<100;i++);
}

/***********************************************************************/
/* 8051À» ÀÌ¿ëÇÑ LCD Display */
/***********************************************************************/
/* ¾Ë°í¸®Áò : 8051ÀÇ Data bus¸¦ ÀÌ¿ëÇÏ¿© LCD ¸¦ ±¸µ¿ÇÔ */
#include
#define read_CODE(address) (((char *)0x020000)[address])
#define read_XDATA(address) (((char *)0x010000)[address])
#define write_xdata(address,value) (((char *)0x010000)[address]=value)
#define LCDIR 0x7600 /* IR Address ÇÒ´ç */
#define LCDDR 0x7601 /* DR Address ÇÒ´ç */
#define RIGHT 1
#define LEFT 2
#define ON 1
#define OFF 2
void ddelay(int p) /* ½Ã°£Áö¿¬ ÇÔ¼ö(_Á¤¹Ð) */
{
int i;
for(i=0;i
void delay(int p) /* ½Ã°£Áö¿¬ ÇÔ¼ö(_ÀϹÝ) */
{
int i,j;
for(j=0;j
for(i=0;i<20000;i++); }
void lcd_init()
{
write_XDATA(LCDIR,0x38); ddelay(1000);
write_XDATA(LCDIR,0x38); ddelay(1000);
write_XDATA(LCDIR,0x38); ddelay(1000);
write_XDATA(LCDIR,0x0e); ddelay(300);
write_XDATA(LCDIR,0x02); ddelay(300);
write_XDATA(LCDIR,0x01); ddelay(300); }
void char_out(char s)
{
int i;
write_XDATA(LCDDR,s);
for(i=0;i<100;i++); }
void string_out(char *str)
{
int i=0;
do{
char_out(str[i]);
}while(str[++i]!=0);
}
void x_y_position(char x,char y)
{
int i;
unsigned char position;
if(y>1)y=1;
if(x>15)x=15;
position=y ? x+0xc0 : x + 0x80;
write_XDATA(LCDIR,position);
for(i=0;i<100;i++); }
void display_shift(char p)
{
int i;
if(p==RIGHT) write_XDATA(LCDIR,0x1c);
else if(p==LEFT) write_XDATA(LCDIR,0x18);
for(i=0;i<100;i++); }
void cursor_shift(char p)
{
int i;
if(p==RIGHT) write_XDATA(LCDIR,0x14);
else if(p==LEFT) write_XDATA(LCDIR,0x10);
for(i=0;i<100;i++); }
void on_off_display(a,b,c)
unsigned char a,b,c;
{
int i;
unsigned char standard=0x08;
if(a==ON) a=0x04;
else a=0x00;
if(b==ON) b=0x02;
else b=0x00;
if(c==ON) c=0x01;
else c=0x00;
write_XDATA(LCDIR,standard|a|b|c);
for(i=0;i<100;i++); }
void cursor_home()
{
int i;
write_XDATA(LCDIR,0x02);
for(i=0;i<100;i++);
}
void lcd_clear()
{
int i;
write_XDATA(LCDIR,0x01);
for(i=0;i<100;i++);
}
void main(void)
{
int i;
while(1)
{
lcd_init();
x_y_position(0,0);
string_out("Hi ! (¿µ¹®À̸§)");
x_y_position(0,1);
string_out("ROBOT");
delay(10);
for(i=0;i<15;i++)
{
display_shift(RIGHT);
ddelay(2);
if(i>9)display_shift(LEFT);
ddelay(2);
}
lcd_clear(); x_y_position(0,0);
string_out("I LOVE ROBOT !");
on_off_display(OFF,ON,ON);
ddelay(5); on_off_display(ON,ON,ON); ddelay(5);
cursor_home();
}
}
|
|
 |
|