1111주차주차 …contents.kocw.net/kocw/document/2015/shinhan/leesangrok/... · 2016-09-09 ·...
TRANSCRIPT
1111주차주차문자문자 LCDLCD에에 다양한다양한 효과를효과를 적용한적용한 응용응용 실습실습
Next-Generation Networks Lab.
예제예제
예제 11.3 Function Set Options 설정예제 11.2와 동일하게 프로그램한다.
초기화 함수 뒤에 Function Set Options을 변경한다.
Option의 기능을 확인한다.
Options Value Function_Set_Options
Option1 0x20 4비트, 화면1행, 5x8 Font
Option2 0x24 4비트, 화면1행, 5x11 Font
Option3 0x28 4비트, 화면2행, 5x8 Font
Option4 0x2C 4비트, 화면2행, 5x11 Font
Option5 0x30 8비트, 화면1행, 5x8 Font
O i 6 0 3 8비 화면1행 11Option6 0x34 8비트, 화면1행, 5x11 Font
Option7 0x38 8비트, 화면2행, 5x8 Font
Option8 0x3C 8비트 화면2행 5x11 Font
39
Option8 0x3C 8비트, 화면2행, 5x11 Font
예제예제 1111--3 Function Set Option3 Function Set Option
#define F_CPU 1000000UL
#include <avr/io.h>
clcd_command(FUNCTION_SET_OPTION7);//clcd_command(FUNCTION_SET_OPTION1);//clcd command(FUNCTION SET OPTION5);include avr/io.h
#include <util/delay.h>#include "clcd_D8.h"
//clcd_command(FUNCTION_SET_OPTION5);
while(1){
int main (void){
char data1[ ] = “!! Hello !!";
{clcd_position(0,0);clcd_str(data1);_delay_ms(500);
char data2[ ] = “Shinhan University";
clcd_port_init( );
clcd_position(1,0);clcd_str(data2);_delay_ms(500);
clcd_init_8bit( ); clcd_clear( );_delay_ms(2000);
}t 0return 0;
}
40
예제예제
예제 11.4 Entry Mode Set Options 설정 CLCD를 포트 A와 포트 C로 연결한다.
Entry Mode Set Options을 변경한 후 문자열을 출력한다.
Option의 기능을 확인한다.
Options Value Entry_Mode_Set_Options
Option1 0x04 커서 좌측 이동, 화면이동 없음p 커서 좌측 이동, 화면이동 없음
Option2 0x05 커서 좌측 이동, 화면 이동
Option3 0x06 커서 우측 이동 화면이동 없음Option3 0x06 커서 우측 이동, 화면이동 없음
Option4 0x07 커서 우측 이동, 화면이동
41
예제예제 1111--4 4 Entry Mode Set Option Entry Mode Set Option ((표표 1111--4) 4)
#define F_CPU 1000000UL
#include <avr/io.h>
clcd_command(CMD_ENTRY_MODE_SET_OPTION1);clcd_position(0,7);clcd str(data1); delay ms(500);include avr/io.h
#include <util/delay.h>#include "clcd_D8.h"
clcd_str(data1); _delay_ms(500);clcd_position(1,7);clcd_str(data2); _delay_ms(500);clcd_clear( );
int main (void){
char data1[ ] = “12345";
_ ( );_delay_ms(2000);
clcd_command(CMD_ENTRY_MODE_SET_OPTION3);char data2[ ] = “67890";
clcd_port_init( );
clcd_position(0,7);clcd_str(data1); _delay_ms(500);clcd_position(1,7);
clcd_init_8bit( ); clcd_str(data2); _delay_ms(500);clcd_clear( );_delay_ms(2000);
return 0;}
42
예제예제
예제 11.5 Display Options 설정 CLCD를 포트 A와 포트 C로 연결한다.
문자열을 출력한 후 Display Options을 변경하여 적용한다.
Option의 기능을 확인한다.
Options Value Display_Options
Option1 0x08 화면 OFF, 커서 OFF, 커서 점멸 OFF
Option2 0x09 화면 OFF, 커서 OFF, 커서 점멸 ON
Option3 0x0A 화면 OFF, 커서 ON, 커서 점멸 OFF
Option4 0x0B 화면 OFF, 커서 ON, 커서 점멸 ON
Option5 0x0C 화면 ON, 커서 OFF, 커서 점멸 OFF
O i 6 0 0 화면 O 커서 O 커서 점멸 OOption6 0x0D 화면 ON, 커서 OFF, 커서 점멸 ON
Option7 0x0E 화면 ON, 커서 ON, 커서 점멸 OFF
Option8 0x0F 화면 ON 커서 ON 커서 점멸 ON
43
Option8 0x0F 화면 ON, 커서 ON, 커서 점멸 ON
예제예제 1111--5 5 Display Options Display Options ((표표 1111--5)5)
#define F_CPU 1000000UL
#include <avr/io.h>#include <util/delay h>
clcd_position(0,0); clcd_str(data1);clcd_position(1,0); clcd_str(data2);for(i=0; i<3; i++)#include <util/delay.h>
#include "clcd_D8.h"
int main (void){
{clcd_command(CMD_DISPLAY_OPTION1);_delay_ms(300);
{char data1[ ] = “!! Hello !!";char data2[ ] = “Sangrok Lee";char data3[ ] “Shinhan Univ ";
clcd_command(CMD_DISPLAY_OPTION8);_delay_ms(300);
}char data3[ ] = “Shinhan Univ.";char data4[ ] = “**************"; INT8 i;
clcd_position(0,0); clcd_str(data3);clcd_position(1,0); clcd_str(data4);for(i=0; i<3; i++)
clcd_port_init( );clcd_init_8bit( );
while(1)
{clcd_command(CMD_DISPLAY_OPTION7);_delay_ms(300);while(1)
{// 우측 프로그램 추가
}
clcd_command(CMD_DISPLAY_OPTION8);_delay_ms(300);
}}}
44
예제예제
예제 11.6 문자열에 효과 적용 CLCD를 포트 A와 포트 C로 연결한다.
문자열을 출력한 후 Cursor/Display Shift Options을 변경하여 적용한다.
Option의 기능을 확인한다.
Options Value Cusor_Display_Shift_Options
Option1 0x10 커서 선택, 커서 좌측 이동
Option2 0x14 커서 선택, 커서 우측 이동
Option3 0x18 화면 선택, 화면 좌측 이동Option3 0x18 화면 선택, 화면 좌측 이동
Option4 0x1C 화면 선택, 화면 우측 이동
45
예제예제 1111--6 6 문자열에문자열에 효과효과 적용적용 ((표표 1111--6) 6)
#define F_CPU 1000000UL
#include <avr/io.h>#include <util/delay h>
while(1){
for(i=0; i<26; i++)#include <util/delay.h>#include "clcd_D8.h"
int main (void)
{clcd_command(CMD_CURSOR_DISPLAY_SHIFT_OPTION3);
// clcd_command(CMD_CURSOR_DISPLAY_SHIFT_OPTION1);{
char data1[ ] = "abcdefghijklmnopqrst
ABCD
_delay_ms(300);}_delay_ms(2000);
uvwxyzABCDEFGHIJKLMN OPQRSTUVWXYZ";
INT8 i 0
for(i=0; i<26; i++){
clcd_command(CMD_CURSOR_DISPLAY_SHIFT_OPTION4);INT8 i=0;
clcd_port_init( );clcd_init_8bit( );
_delay_ms(300);}_delay_ms(2000);
}_ _ ( );
clcd_position(0,0);clcd_str(data1);delay ms(2000);
}return 0;
}_delay_ms(2000);
46
예제예제
예제 11.7 실수값 출력 CLCD를 포트 A와 포트 C로 연결한다.
CLCD에 실수값을 출력하기 위해 sprintf 함수의 기능을 이해한다.
sprintf 함수에서 실수값 출력을 지원하기 위해 컴파일러에서 “Linker”의설정 옵션을 이해한다설정 옵션을 이해한다.
47
예제예제 1111--7 7 실수값실수값 출력출력
#define F_CPU 1000000UL
#include <avr/io.h>
clcd_position(0,5);clcd_str("!! Hello !!");delay ms(2000);include avr/io.h
#include <stdio.h>#include <util/delay.h>#include "clcd_D8.h"
_delay_ms(2000);
while(1){_
#define SIZE 64 // Buffer size for string
{sprintf (buffer, "gen: %3d kHz", freq1);clcd_position(0,0);clcd_str(buffer);
int main (void){
INT8 freq1 = 45;sprintf(buffer, "cnt: %3.3f kHz", freq2);clcd_position(1,0);
float freq2 = 38.854;char buffer[SIZE];
l d t i it( )
clcd_str(buffer);}return 0;
}clcd_port_init( );clcd_init_8bit( );
}
48
Properties Toolchain
Properties Toolchain AVR/GNU Linker AVR/GNU Linker
General Use vprintf library
AVR/GNU Linker Miscellaneous “ -lprintf flt “ 추가
49
Use vprintf library lprintf_ flt 추가
예제예제
예제 11.8 CG-RAM을 활용하여 한글 출력 CLCD를 포트 A와 포트 C로 연결한다.
원하는 모양의 폰트를 생성하기 위한 과정을 이해한다.
CG-RAM에 원하는 데이터를 저장하기 위한 과정을 이해하고, 이를 함수로 구현한다로 구현한다.
CG-RAM에 저장된 데이터를 활용하여 CLCD 화면에 한글 이름을 출력한다.
50
CGCG--RAM RAM 활용활용
51
예제예제 1111--8 8 CGCG--RAMRAM을을 활용하여활용하여 한글한글 출력출력
typedef unsigned char INT8;typedef unsigned int INT16;
int main (void){
INT8 addr;#define F_CPU 1000000UL
#include <avr/io.h>
clcd_port_init( );clcd_init_8bit( );clcd position(0 0);
#include <util/delay.h>#include "clcd_D8.h"
clcd_position(0,0);clcd_str("!! Hello !!");_delay_ms(2000);
CGRAM Set(0 name1a);INT8 name1a[ ] = {0x00, 0x02, 0x02, 0x07, 0x07, 0x0D, 0x0D, 0x08};
INT8 name1b[ ] = {0x04, 0x04, 0x04,
CGRAM_Set(0, name1a);CGRAM_Set(1, name1b);CGRAM_Set(2, name2a);CGRAM Set(3 name2b);INT8 name1b[ ] {0x04, 0x04, 0x04,
0x04, 0x06, 0x16, 0x14, 0x14};
INT8 name2a[ ] = {0x00, 0x07, 0x07, 0 00 0 07 0 06 0 07 0 07}
CGRAM_Set(3, name2b);
for(addr=0; addr<4; addr++){
l d i i dd0x00, 0x07, 0x06, 0x07, 0x07};
INT8 name2b[ ] = {0x00, 0x1C, 0x1C, 0x0C, 0x1C, 0x00, 0x1C, 0x1C};
clcd_position(0, addr);clcd_data(addr);
}t 0
, , , , };return 0;
}52
예제예제 1111--8 8 CGCG--RAMRAM을을 활용하여활용하여 한글한글 출력출력
void CGRAM_Set(INT8 addr, INT8 *CG_char)
{
INT8 i;
clcd_command(0x40+addr*8);
for(i=0; i<8; i++)
{
clcd_data(CG_char[i]);
}
}
53
예제예제 1111--8 8 CGCG--RAMRAM을을 활용하여활용하여 한글한글 출력출력INT8 U0[ ] { 신 } CGRAM S t(0 U0) CGRAM S t(1 U1)INT8 name_U0[ ] = { 신 };INT8 name_U1[ ] = { 신 };INT8 name_D0[ ] = { 신 };INT8 name D1[ ] = { 신 };
CGRAM_Set(0, name_U0); CGRAM_Set(1, name_U1);CGRAM_Set(2, name_U2); CGRAM_Set(3, name_U3);CGRAM_Set(4, name_D0); CGRAM_Set(5, name_D1);CGRAM Set(6 name D2); CGRAM Set(7 name D3);INT8 name_D1[ ] = { 신 };
INT8 name_U2[ ] = { 한 };INT8 name_U3[ ] = { 한 };INT8 name D2[ ] = { 한 };
CGRAM_Set(6, name_D2); CGRAM_Set(7, name_D3);
clcd_position(0, 0);for(addr=0; addr<4; addr++) { clcd data(addr); }INT8 name_D2[ ] = { 한 };
INT8 name_D3[ ] = { 한 };INT8 name_U4[ ] = { 대 };INT8 name U5[ ] = { 대 };
for(addr=0; addr<4; addr++) { clcd_data(addr); }clcd_position(1, 0);for(addr=4; addr<8; addr++) { clcd_data(addr); }
CGRAM S t(0 U4) CGRAM S t(1 U5)INT8 name_U5[ ] { 대 };INT8 name_D4[ ] = { 대 };INT8 name_D5[ ] = { 대 };INT8 name U6[ ] = { 학 };
CGRAM_Set(0, name_U4); CGRAM_Set(1, name_U5);CGRAM_Set(2, name_U6); CGRAM_Set(3, name_U7); CGRAM_Set(4, name_D4); CGRAM_Set(5, name_D5);CGRAM Set(6 name D6); CGRAM Set(7 name D7)_ [ ] { 학 };
INT8 name_U7[ ] = { 학 };INT8 name_D6[ ] = { 학 };INT8 name_D7[ ] = { 학 };
CGRAM_Set(6, name_D6); CGRAM_Set(7, name_D7)
clcd_position(0, 4);for(addr=0; addr<4; addr++) { clcd data(addr); }for(addr=0; addr<4; addr++) { clcd_data(addr); }clcd_position(1, 4);for(addr=4; addr<8; addr++) { clcd_data(addr); };
54