TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 1
ATmega128 트레이닝 보드ⅱ
Manual
WWW.LKEMBEDDED.CO.KR
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 2
목 차
1. 제품 사진 및 각 부분 설명 3
2. 예제소스/회로도 8
3. 동영상 52
4. Epilog 57
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 3
1. 제품사진 및 보드 설명
[그림. AVR 확장형 개발보드ⅱ 사진]
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 4
제품소개
ATMEL사의 8비트 프로세서인 ATmega128 MCU를 이용하여 학습/ 실습 및 개발을 핛 수 있는 AVR 트레
이닝 보드입니다. 확장성을 고려하여 PORTC를 10P 박스 커넥터로 연결 하여 LK 확장보드와 손쉽게 연
결이 가능합니다. AVR ISP와 JTAG을 이용하여 프로그램 다운로드 및 디버깅 가능하도록 설계 되었습
니다.
제품특징
1) ATmega128 MCU의 모듈화로 손쉽게 MCU 교체 가능
2) 10P 박스 커넥터를 이용핚 확장 포트(PORTC)
3) 브레드보드을 이용하여 확장 가능
4) AVR 트레이닝 보드를 통해서 LED, SWITCH, 7-SEGMENT, 시계IC를 이용핚 I2C, BUZZER, RS232
통싞, ADC(온도센서, 조도센서, 가변저항), TEXT LCD, 그래픽 LCD, 포터센서의 기능을 학습 및
실습 가능
5) 사용 전원 12V(12V와 5V 전원을 쉽게 사용 핛 수 있도록 커넥터화)
6) ISP, JTAG 사용 가능(JTAG 사용시 PORT4~7까지 사용 불가합니다)
기타 정보 및 관렦 제품
http://www.lkemnedded.co.kr, http://cafe.naver.com/lkembedded/에 접속하면 LK 확장보드,
다양핚 예제소스와 응용 제품을 확인 하실 수 있습니다.
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 5
외형 치수 및 핀맵
[그림. AVR 확장형 개발보드 ⅱ 외형 치수]
[그림. AVR 모듈]
AVR 모듈 핀맵
AVR ISP
AVR JTAG
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 6
AVR 모듈 핀맵
[표. AVR 모듈 핀맵(왼쪽)] [표. AVR 모듈 핀맵(오른쪽)]
※참고: PORTF 입출력 관렦 사항
-본사에서 최소 퓨즈비트 설정시 JTAG-ICE 사용가능 하도록 설정되어 PORTF4~7포트을 사용하실 수 없
습니다.
PORTF4~7포트를 사용하시려면 AVR ISP를 이용하여 퓨즈비트 재설정 또는 본사로 ATmega128 MCU 모듈
을 보내 주시면 됩니다.
NO 핀 이름(기능) NO 핀 이름(기능)
1 AVCC 2 GND
3 AREF 4 PF0(ADC0)
5 PF1(ADC1) 6 PF2(ADC2)
7 PF3(ADC3) 8 PF4(ADC4/TCK)
9 PF5(ADC5/TMS) 10 PF6(ADC6/TDO)
11 PF7(ADC7/TDI) 12 GND
13 VCC 14 PA0(AD0)
15 PA1(AD1) 16 PA2(AD2)
17 PA3(AD3) 18 PA4(AD4)
19 PA5(AD5) 20 PA6(AD6)
21 PA7(AD7) 22 PG2(ALE)
23 PC7(A15) 24 PC6(A14)
25 PC5(A13) 26 PC4(A12)
27 PC3(A11) 28 PC2(A10)
29 PC1(A9) 30 PC0(A8)
31 PG1(RD) 32 PG0(WR)
NO 핀 이름(기능) NO 핀 이름(기능)
1 PEN 2 PE0(RXD0/PDI)
3 PE1(TXD0/PD0) 4 PE2(XCK0/AIN0)
5 PE3(OC3A/AIN1) 6 PE4(OC3B/INT4)
7 PE5(OC3C/INT5) 8 PE6(T3/INT6)
9 PE7(ICP3/INT7) 10 PB0(SS)
11 PB1(SCK) 12 PB2(MOSI)
13 PB3(MISO) 14 PB4(OC0)
15 PB5(OC1A) 16 PB6(OC1B)
17 PB7(OC2/OC1C) 18 PG3(TOSC2)
19 PG4(TOSC1) 20 RESET
21 VCC 22 GND
23 XTAL2 24 XTAL1
25 PD0(SCL/INT0) 26 PD1(SDA/INT1)
27 PD2(RXD1/INT2) 28 PD3(TXD1/INT3)
29 PD4(ICP1) 30 PD5(XCK1)
31 PD6(T1) 32 PD7(T2)
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 7
AVR ISP 핀맵
[표. AVR ISP]
※참고: AVR ISP 연결 방법
-LK-USB AVR-ISP를 이용하여 프로그램 다운로드 가능합니다.
기타사항은 LK-USB AVR-ISP 메뉴얼을 참고하여 주시기 바랍니다.
AVR JTAG 핀맵
[표.AVR JTAG]
※참고: AVR JTAG ICE 연결 방법
-LK-AVR JTAG-ICE를 이용하여 프로그램 다운로드 및 디버깅 가능합니다.
기타사항은 LK-AVR JTAG-ICE 매뉴얼을 참고하여 주시기 바랍니다.
USB UART 핀맵 (UART0/1)
[표. USB UART]
PORT1 PORT2 PORT3 PORT4 PORT5 PORT6
VCC GND RESET SCK(PB1) MISO MOSI
PORT1 PORT2 PORT3 PORT4 PORT5
PF4(TCK) GND PF6(TDO) VCC PF5(TMS)
PORT6 PORT7 PORT8 PORT9 PORT10
RESET VCC X PF7(TDI) GND
PORT1 PORT2 PORT3 PORT4
GND TX RX 5V
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 8
2. 예제소스
1) I/O 입출력 예제소스
※참고 회로도(I/O 입출력)
-CodeVision AVR C컴파일러
LK ATmega128 트레이닝 보드 예제소스: I/O 입출력 제어
//예제소스 시작
#include <mega128.h>
#include <delay.h>
// Declare your global variables here
void main(void)
{
D11LEDD12LEDD13LEDD14LEDD15LEDD16LED
ARRAY3
COM
R1
R2
R3
R4
R5
R6
PE3
PE2
PE4
PE6
PE5
LED
PE7
VCC
PG1
SW6
12
R10
VCC
PG2
SW7
12
VCC
R11
PG3
R12
SW8
12
VCCSwitch
PG0
SW11
12
R13
VCC
LS2
BUZZER
1
2
R15
PD5
Buzzer
VCC
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 9
DDRE=0XFF;
PORTE=0X00;
DDRD=0X20;
PORTD=0X20;
while (1)
{
static unsigned int cnt=50;
cnt=cnt-0.5;
if(cnt==0)
{
cnt=100;
}
PORTE=0XFF;
PORTD=0X00;
delay_ms(cnt);
PORTE=0X00;
PORTD=0X20;
delay_ms(cnt);
}
}
//예제소스 끝
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 10
2) TIMER 인터럽트 예제소스
※참고 회로도(다이나믹 디스플레이)
-CodeVision AVR C컴파일러
LK ATmega128 트레이닝 보드 예제소스: TIMER 인터럽트를 이용한 FND 제어
//예제소스 시작
#include <mega128.h>
#include <delay.h>
#define Fnd1 6
#define Fnd2 7
#define Fnd1_on 0<<Fnd1
#define Fnd2_on 0<<Fnd2
#define Fnd1_off 1<<Fnd1
FND2 FND2
edc bb aa
cath
od
e
fg
dot
cath
od
eR41R42R43R44R45R46R47R48
PB1PB0
PB3PB2
PB6PB5PB4
PD7
PB7
Fnd
PD6
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 11
#define Fnd2_off 1<<Fnd2
char Number[11]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X27,0X7F,0X6F}; //FND 0~9 배열선얶
// Timer 0 overflow interrupt service routine
unsigned int cnt=0;
interrupt [TIM0_OVF] void timer0_ovf_isr(void) //1ms Tick Time
{
static int i=0;
i++;
if(i==100)
{
cnt++;
i=0;
if(cnt==99)
{
cnt=0;
}
}
TCNT0+=0X06;
}
void main(void)
{
DDRB=0XFF; // FND 초기화
DDRD.6=1; // FND EN0
DDRD.7=1; // FND EN1
TCCR0=0x04;//64Prescalel, Overflow Interrupt
TCNT0=0x06;// Timer Count initialization
TIMSK=0x01;// Timer(s)/Counter(s) Interrupt(s) initialization
SREG=0X80; //Global Interrupt Enable
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 12
while (1)
{
int i,j=0;
i=(cnt%100)/10; //10의 자리
j=cnt%10; //1의 자리
PORTD=(Fnd1_on|Fnd2_off);
PORTB=Number[i];
delay_ms(1);
PORTD=(Fnd1_off|Fnd2_on);
PORTB=Number[j];
delay_ms(1);
};
}
//예제소스 끝
3) 조도센서, 온도센서를 이용한 ADC 예제소스
※참고 회로도(온도센서, 조도센서)
써미스터
PF1
VCC
R2
t
RT2
THERMISTOR 2
12
VCC
PF0
R16
CDS2
CDS
VR2
100k
13
2 PF2
VCC
가변저항
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 13
-CodeVision AVR C컴파일러
LK ATmega128 확장형 개발보드 예제소스: 조도센서, 온도센서를 이용한 ADC 제어
//예제소스 시작
#include <mega128.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x40
unsigned int ad_buff[2][50];
char Number[]={'0','1','2','3','4','5','6','7','8','9'};
flash unsigned int ad_table[] = { //10bit, 155ea
982,979,977,974,971,968,965,962,959,956, //-40'C~-31'C
952,948,944,940,936,932,927,923,918,913, //-30'C~-21'C
907,902,896,891,885,878,872,866,859,852, //-20'C~-11'C
845,837,830,822,814,806,798,790,781,772, //-10'C~ -1'C
763,754,745,736,726,717,707,697,687,677, // 0'C~ 9'C
667,657,647,636,626,616,605,595,584,574, // 10'C~ 19'C
563,553,542,532,521,511,501,490,480,470, // 20'C~ 29'C
460,450,441,431,421,412,403,393,384,375, // 30'C~ 39'C
366,358,349,341,333,324,316,309,301,294, // 40'C~ 49'C
286,279,272,265,258,252,245,239,233,227, // 50'C~ 59'C
221,215,209,204,199,193,188,183,179,174, // 60'C~ 69'C
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 14
169,165,161,156,152,148,144,140,137,133, // 70'C~ 79'C
130,126,123,120,117,114,111,108,105,102, // 80'C~ 89'C
100, 97, 94, 92, 90, 87, 85, 83, 81, 79, // 90'C~ 99'C
77, 75, 73, 71, 69, 68, 66, 64, 63, 61, //100'C~109'C
60, 58, 57, 55, 54, 53, 51, 50, 49, 48, //110'C~119'C
47, 45, 44, 43, 42, 41 }; //120'C ~125'C
void IntDisplay(int i)// LCD 정수값으 표시
{
int j,k,l,m=0;
j =(i % 1000)/100;
k =(i % 100)/10;
l = i % 10 ;
//if((j == 0) && (k == 0)){ lcd_putchar(0x20); } //공백 표시는 생략 핚다.
lcd_putchar(Number[j]); //100의 자리
lcd_putchar(Number[k]); //10의 자리
lcd_putchar(Number[l]); //1의 자리
}
unsigned int read_adc(unsigned char adc_input)// Read the AD conversion result
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);// Delay needed for the stabilization of the
ADC input voltage
delay_us(10);// Start the AD conversion
ADCSRA|=0x40;// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 15
ADCSRA|=0x10;
return ADCW;
}
unsigned int ad_adding(char c) // 평균값으로 처리하는 함수
{
char i,j,k=0;
for(i=19; i>0; i--){
ad_buff[c][i] = ad_buff[c][i-1]; // 새로운 값 읽기전에 현재 메모리를 옮기는 작업
}
ad_buff[c][0]=read_adc(c);
ad_buff[c][20] = 0;
for(j=0; j<20; j++){
ad_buff[c][20] += ad_buff[c][j];
}
ad_buff[c][20] = ad_buff[c][20] / 20;
k = ad_buff[c][20];
return k;
}
unsigned int TemperatureCheck(int data) //온도 체크 함수
{
char i, tmp=0;
int temp=0;
if(data > 763) { //-40도 이상일때
tmp=0;
for(i=0; i<40; ++i) {
if(data >= ad_table[tmp]) goto end_run; //adc 데이터를 비교 0도 이상이면
goto문 실행
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 16
++tmp; //adc 데이터를 비교 0도 이하이면 배열증가
} goto end_run;
}
if(data > 366) { //0도 이상일때
tmp=40;
for(i=0; i<40; ++i) {
if(data >= ad_table[tmp]) goto end_run; //adc 데이터를 비교 40도 이상이면
goto문 실행
++tmp; //adc 데이터를 비교 40도 이하이면 배열증가
} goto end_run;
}
if(data > 130) { //40도 이상일때
tmp=80;
for(i=0; i<40; ++i) {
if(data >= ad_table[tmp]) goto end_run; //adc 데이터를 비교 80도 이상이면
goto문 실행
++tmp; //adc 데이터를 비교 80도 이하이면 배열증가
} goto end_run;
}
else {
tmp=120; //80도 이상일때
for(i=0; i<45; ++i) {
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 17
if(data >= ad_table[tmp]) goto end_run; //adc 데이터를 비교 120도 이상이면
goto문 실행
++tmp; //adc 데이터를 비교 120도 이하이면 배열증가
}
}
end_run:
if(tmp < 25) { temp=25-tmp; } //-
else { temp=tmp-25;} //''
return temp;
}
void main(void)
{
DDRF=0x00;
// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
// LCD module initialization
lcd_init(16);
while (1)
{
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 18
int i,j,temp=0;
i=read_adc(0); //read The CDS ADC Value
j=read_adc(1); //Thermistor
lcd_gotoxy(0,0);
lcd_putsf("CDS10K:");
IntDisplay(ad_adding(0)); //조도센서 평균값
lcd_gotoxy(0,1);
lcd_putsf("Thermistor:");
temp=TemperatureCheck(read_adc(1)); //read The Thermi ADC Value
IntDisplay(temp); //온도센서 출력값
lcd_putchar(0xdf);
lcd_putchar('C');
}
}
//예제소스 끝
4) RS232 통신 예제소스
-CodeVision AVR C컴파일러
LK ATmega128 트레이닝 보드 예제소스: RS232 통신 제어
//예제소스 시작
#include <mega128.h>
// Standard Input/Output functions
#include <stdio.h>
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 19
void main(void)
{
// USART0 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART0 Receiver: Off
// USART0 Transmitter: On
// USART0 Mode: Asynchronous
// USART0 Baud Rate: 9600
UCSR0A=0x00;
UCSR0B=0x08;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x67;
while (1)
{
printf("LK-ATmega128-C RS232 Com Test\r\n");
}
}
//예제소스 끝
5) RS485 통신 예제소스
-CodeVision AVR C컴파일러
LK ATmega128 트레이닝 보드 예제소스: RS485 통신 제어
//예제소스 시작
#include <stdio.h>
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 20
#include <mega128.h>
#include <delay.h>
#define _ALTERNATE_PUTCHAR_
#define _ALTERNATE_GETCHAR_
#define USART0 0
#define USART1 1
#define UDRE 5
#define RXC 7
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)
unsigned char poutput;
void putchar1(char c)
{
while ((UCSR1A & DATA_REGISTER_EMPTY)==0);
UDR1=c;
}
#pragma used-
void putchar(char c)
{
switch(poutput)
{
case USART0:
while((UCSR0A & DATA_REGISTER_EMPTY)==0);
UDR0=c;
break;
case USART1:
while((UCSR1A & DATA_REGISTER_EMPTY)==0);
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 21
UDR1=c;
};
}
unsigned char getchar(void)
{
switch(poutput)
{
case USART0:
while((UCSR0A & RX_COMPLETE)==0);
return UDR0;
break;
case USART1:
while((UCSR1A & RX_COMPLETE)==0);
return UDR1;
};
}
void main(void)
{
DDRF=0X80; //TX or RX Enable Pin
// USART1 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART1 Receiver: On
// USART1 Transmitter: On
// USART1 Mode: Asynchronous
// USART1 Baud Rate: 9600
UCSR1A=0x00;
UCSR1B=0x08;
UCSR1C=0x06;
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 22
UBRR1H=0x00;
UBRR1L=0x67;
poutput=USART1;
while (1)
{
PORTF=0X80; //RS485 송싞 Enable
delay_ms(5);
printf("ATmega128-A2 RS485 Communication TEST\r\n"); //송싞
delay_ms(5);
PORTF=0X00;
};
}
//예제소스 끝
7) 시계 IC를 이용한 I2C 통신 예제소스
※참고 회로도
시계 IC
SQW/OUT7
SDA5
X11
X22
SCL6
VCC8
GND4
VBAT3Y1
32.768Khz
VCC
PD1PD0
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 23
-CodeVision AVR C컴파일러
LK ATmega128 트레이닝 보드 예제소스: 시계IC를 이용한 I2C 통신 제어 및 문자 LCD 제어
//예제소스 시작
#include <mega128.h>
#define MAINCLK 16000000 //메인 크리스탈 클럭
#define TWI_CLK 100000 //100khz
#define TWBR_SET (MAINCLK-(16*TWI_CLK))/(4*2*TWI_CLK) //자동으로 TWBR을 구하기 위핚공식
char data[4]={0};
// Standard Input/Output functions
#include <stdio.h>
#include <delay.h>
#define TWIE 0
#define TWEN 2
#define TWWC 3
#define TWSTO 4
#define TWSTA 5
#define TWEA 6
#define TWINT 7
void EEPROM_write(char WordAdress,char data)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
/*
Send START condition
*/
while (!(TWCR & (1<<TWINT)));
/* Wait for TWINT flag set. This indicates that the
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 24
START condition has been transmitted
*/
TWDR = 0xd0;
/*Load 0xa0 into TWDR Register.Clear TWINT bit in
TWCR to start transmission of address
*/
TWCR = (1<<TWINT) |(1<<TWEN);
while (!(TWCR & (1<<TWINT)));
/* Wait for TWINT flag set. This indicates that the
0xa0 has been transmitted, and
ACK/NACK has been received.
*/
TWDR = WordAdress;
TWCR = (1<<TWINT) |(1<<TWEN);
/*
Load low into TWDR Register. Clear TWINT
bit in TWCR to start transmission of data
*/
while (!(TWCR & (1<<TWINT)));
/*
Wait for TWINT flag set. This indicates that the
low has been transmitted, and ACK/NACK
has been received.
*/
TWDR = data;
TWCR = (1<<TWINT) |(1<<TWEN);
/*
Load low into TWDR Register. Clear TWINT
bit in TWCR to start transmission of data
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 25
*/
while (!(TWCR & (1<<TWINT)));
/*
Wait for TWINT flag set. This indicates that the
low has been transmitted, and ACK/NACK
has been received.
*/
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
/*
Transmit STOP condition
*/
}
char EEPROM_read(char high)
{
char data=0;
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
/*
Send START condition
*/
while (!(TWCR & (1<<TWINT)));
/*
Wait for TWINT flag set. This indicates that the
low has been transmitted, and ACK/NACK
has been received.
*/
TWDR = 0xd0;
TWCR = (1<<TWINT) |(1<<TWEN);
/*
Load 0xa0 into TWDR Register. Clear TWINT
bit in TWCR to start transmission of data
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 26
*/
while (!(TWCR & (1<<TWINT)));
/*
Wait for TWINT flag set. This indicates that the
low has been transmitted, and ACK/NACK
has been received.
*/
TWDR = high;
TWCR = (1<<TWINT) |(1<<TWEN);
/*
Load high into TWDR Register. Clear TWINT
bit in TWCR to start transmission of data
*/
while (!(TWCR & (1<<TWINT)));
/*
Wait for TWINT flag set. This indicates that the
low has been transmitted, and ACK/NACK
has been received.
*/
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
/*
Send RESTART condition
*/
while (!(TWCR & (1<<TWINT)));
/*
Wait for TWINT flag set. This indicates that the
low has been transmitted, and ACK/NACK
has been received.
*/
TWDR = 0xd1;
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 27
TWCR = (1<<TWINT) |(1<<TWEN);
/*
Load 0xa0|1 into TWDR Register. Clear TWINT
bit in TWCR to start transmission of data
*/
while (!(TWCR & (1<<TWINT)));
/*
Wait for TWINT flag set. This indicates that the
low has been transmitted, and ACK/NACK
has been received.
*/
TWCR = (1<<TWINT) |(1<<TWEN);
while (!(TWCR & (1<<TWINT)));
/*
Wait for TWINT flag set. This indicates that the
low has been transmitted, and ACK/NACK
has been received.
*/
data=TWDR;
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
/*
Load TWDR into data. Clear TWINT
bit in TWCR to start transmission of data
*/
return data;
}
void main(void)
{
DDRD=0X00 ;
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 28
// USART0 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART0 Receiver: Off
// USART0 Transmitter: On
// USART0 Mode: Asynchronous
// USART0 Baud Rate: 9600
UCSR0A=0x00;
UCSR0B=0x08;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x67;
// TWI initialization
// TWI disabled
//TWBR = TWBR_SET;// 105 100kHz
TWBR = TWBR_SET;// 15 100kHz
TWSR=0;
TWCR=0X04;
EEPROM_write(00,0); //second
EEPROM_write(01,0x03); //minutes
EEPROM_write(02,6); //hour
EEPROM_write(07,0x03); //control
while (1)
{
static unsigned char data,data1,data2=0;
static unsigned char h,m,s=0;
data=EEPROM_read(0);
data1=(data&0x0f); // 1의 자리 초
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 29
data2=(data&0x70); // 10의 자리 초
data2=(data2>>4)*10;
s=(data2+data1); //초
data=EEPROM_read(1);
data1=(data&0x0f); // 1의 자리 초
data2=(data&0x70); // 10의 자리 초
data2=(data2>>4)*10;
m=(data2+data1); //분
data=EEPROM_read(2);
data1=(data&0x0f); // 1의 자리 초
data2=(data&0x30); // 10의 자리 초
data2=(data2>>4)*10;
h=(data2+data1); //시간
printf("hour: %d minute: %d second: %d\r\n",h,m,s);
}
}
//예제소스 끝
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 30
7) 문자 LCD 제어 예제소스
※참고 회로도
-CodeVision AVR C컴파일러
LK ATmega128 트레이닝 보드 예제소스: 문자 LCD 제어
//예제소스 시작
#include <mega128.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
#define MAINCLK 16000000 //메인 크리스탈 클럭
#define TWI_CLK 100000 //100khz
#define TWBR_SET (MAINCLK-(16*TWI_CLK))/(4*2*TWI_CLK) //자동으로 TWBR을 구하기 위핚공식
PA
1P
A0D2
SS14
1 2 PA
6
LCD 16P CON1
GN
D1
VC
C2
VD
3R
S4
RW
5E
N6
D0
71
82
93
10
411
512
613
714KA
PA
7
PA
2
PA
5
VCC
PA
4
VCC
VD
문자LCD
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 31
char data[4]={0};
// Standard Input/Output functions
#include <stdio.h>
#include <delay.h>
#define TWIE 0
#define TWEN 2
#define TWWC 3
#define TWSTO 4
#define TWSTA 5
#define TWEA 6
#define TWINT 7
char Number[]={'0','1','2','3','4','5','6','7','8','9'};
void int_display(int i)
{
int j, k, l=0;
j =(i % 100)/10;
k = i % 10 ;
//if((j == 0) && (k == 0)){ lcd_putchar(0x20); } //공백 표시는 생략 핚다.
lcd_putchar(Number[j]); //10의 자리
lcd_putchar(Number[k]); // 1의 자리
}
void EEPROM_write(unsigned char WordAdress,unsigned char data)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
/*
Send START condition
*/
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 32
while (!(TWCR & (1<<TWINT)));
/* Wait for TWINT flag set. This indicates that the
START condition has been transmitted
*/
TWDR = 0xd0;
/*Load 0xa0 into TWDR Register.Clear TWINT bit in
TWCR to start transmission of address
*/
TWCR = (1<<TWINT) |(1<<TWEN);
while (!(TWCR & (1<<TWINT)));
/* Wait for TWINT flag set. This indicates that the
0xa0 has been transmitted, and
ACK/NACK has been received.
*/
TWDR = WordAdress;
TWCR = (1<<TWINT) |(1<<TWEN);
/*
Load low into TWDR Register. Clear TWINT
bit in TWCR to start transmission of data
*/
while (!(TWCR & (1<<TWINT)));
/*
Wait for TWINT flag set. This indicates that the
low has been transmitted, and ACK/NACK
has been received.
*/
TWDR = data;
TWCR = (1<<TWINT) |(1<<TWEN);
/*
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 33
Load low into TWDR Register. Clear TWINT
bit in TWCR to start transmission of data
*/
while (!(TWCR & (1<<TWINT)));
/*
Wait for TWINT flag set. This indicates that the
low has been transmitted, and ACK/NACK
has been received.
*/
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
/*
Transmit STOP condition
*/
}
char EEPROM_read(char high)
{
char data=0;
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
/*
Send START condition
*/
while (!(TWCR & (1<<TWINT)));
/*
Wait for TWINT flag set. This indicates that the
low has been transmitted, and ACK/NACK
has been received.
*/
TWDR = 0xd0;
TWCR = (1<<TWINT) |(1<<TWEN);
/*
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 34
Load 0xa0 into TWDR Register. Clear TWINT
bit in TWCR to start transmission of data
*/
while (!(TWCR & (1<<TWINT)));
/*
Wait for TWINT flag set. This indicates that the
low has been transmitted, and ACK/NACK
has been received.
*/
TWDR = high;
TWCR = (1<<TWINT) |(1<<TWEN);
/*
Load high into TWDR Register. Clear TWINT
bit in TWCR to start transmission of data
*/
while (!(TWCR & (1<<TWINT)));
/*
Wait for TWINT flag set. This indicates that the
low has been transmitted, and ACK/NACK
has been received.
*/
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
/*
Send RESTART condition
*/
while (!(TWCR & (1<<TWINT)));
/*
Wait for TWINT flag set. This indicates that the
low has been transmitted, and ACK/NACK
has been received.
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 35
*/
TWDR = 0xd1;
TWCR = (1<<TWINT) |(1<<TWEN);
/*
Load 0xa0|1 into TWDR Register. Clear TWINT
bit in TWCR to start transmission of data
*/
while (!(TWCR & (1<<TWINT)));
/*
Wait for TWINT flag set. This indicates that the
low has been transmitted, and ACK/NACK
has been received.
*/
TWCR = (1<<TWINT) |(1<<TWEN);
while (!(TWCR & (1<<TWINT)));
/*
Wait for TWINT flag set. This indicates that the
low has been transmitted, and ACK/NACK
has been received.
*/
data=TWDR;
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
/*
Load TWDR into data. Clear TWINT
bit in TWCR to start transmission of data
*/
return data;
}
void Day(int i)
{
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 36
switch(i){
case 1: lcd_putsf("Mon-");break;
case 2: lcd_putsf("Tues-");break;
case 3: lcd_putsf("Wednes-");break;
case 4: lcd_putsf("Thurs-");break;
case 5: lcd_putsf("Fri-");break;
case 6: lcd_putsf("Satur-");break;
case 7: lcd_putsf("Sun-");break;
}
}
void Month(int i)
{
switch(i){
case 1: lcd_putsf("-January");break;
case 2: lcd_putsf("-February");break;
case 3: lcd_putsf("-March");break;
case 4: lcd_putsf("-April");break;
case 5: lcd_putsf("-May");break;
case 6: lcd_putsf("-June");break;
case 7: lcd_putsf("-July");break;
case 8: lcd_putsf("-August");break;
case 9: lcd_putsf("-September");break;
case 10: lcd_putsf("-October");break;
case 11: lcd_putsf("-November");break;
case 12: lcd_putsf("-December");break;
}
}
void AmPmSel(char i)
{
if(i>0&&i<12)
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 37
{
lcd_putsf("AM-");
}
if(i>12&&i<24)
{
lcd_putsf("PM-");
}
}
void DS1307ReadLcdDisplay()
{
static unsigned char data,data1,data2=0;
static unsigned char h,m,s,day,date,month,year=0;
data=EEPROM_read(0);
data1=(data&0x0f); // 1의 자리 초
data2=(data&0x70); // 10의 자리 초
data2=(data2>>4)*10;
s=(data2+data1); //초
data=EEPROM_read(1);
data1=(data&0x0f); // 1의 자리 초
data2=(data&0x70); // 10의 자리 초
data2=(data2>>4)*10;
m=(data2+data1); //분
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 38
data=EEPROM_read(2);
data1=(data&0x0f); // 1의 자리 초
data2=(data&0x30); // 10의 자리 초
data2=(data2>>4)*10;
h=(data2+data1); //시간
data=EEPROM_read(3);
data1=(data&0x0f); // 1의 자리 초
//data2=(data&0x30); // 10의 자리 초
/// data2=(data2>>4)*10;
day=data1; //Day
data=EEPROM_read(4);
data1=(data&0x0f); // 1의 자리 초
data2=(data&0x30); // 10의 자리 초
data2=(data2>>4)*10;
date=(data2+data1); //date
data=EEPROM_read(5);
data1=(data&0x0f); // 1의 자리 초
data2=(data&0x10); // 10의 자리 초
data2=(data2>>4)*10;
month=(data2+data1); //month
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 39
data=EEPROM_read(6);
data1=(data&0x0f); // 1의 자리 초
data2=(data&0xf0); // 10의 자리 초
data2=(data2>>4)*10;
year=(data2+data1); //month
//---------------------- TEXT LCD DIPLAY
lcd_gotoxy(1,0);
Day(day);
int_display(date);
Month(month);
lcd_gotoxy(2,1);
AmPmSel(h);
int_display(h-12);
lcd_putsf(":");
int_display(m);
lcd_putsf(":");
int_display(s);
//-----------------------
}
void main(void)
{
PORTA=0XFF;
DDRD=0X03 ;
// TWI initialization
// TWI disabled
//TWBR = TWBR_SET;// 105 100kHz
TWBR = TWBR_SET;// 15 100kHz
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 40
TWSR=0;
TWCR=0X04;
EEPROM_write(00,0); //second
EEPROM_write(01,0X54); //minutes
EEPROM_write(02,0x16); //hour
EEPROM_write(03,2); //tuesday
EEPROM_write(04,0x09); ///9day
EEPROM_write(05,0x08); //8Month
EEPROM_write(05,0x08); //11year
EEPROM_write(07,0x11); //control
lcd_init(16);
while (1)
{
DS1307ReadLcdDisplay();
}
}
//예제소스 끝
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 41
8) 그래픽 LCD 제어 예제소스
※참고 회로도
-CodeVision AVR C컴파일러
LK ATmega128 트레이닝 보드 예제소스: 그래픽 LCD 제어
//예제소스 시작
#include <mega128.h>
#include <delay.h>
unsigned char screen[8][128];
bit flg;
char bf;
struct {
char bf, x, y, ty;
} lcd;
bit lcd_pg, lcd_blk;
flash char han[30][24]={
0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //L 0
LCD 20P CON1
GN
D1
VC
C2
VD
3D
/I4
RW
5E
N6
D0
7D
18
D2
9D
310
D4
11
D5
12
D6
13
D7
14
CS
115
CS
216
RS
T17
VE
E18
A19
K20
PF
5P
F6
RS
T
PA
6P
A7
PA
3P
A4
PA
5
PA
0P
A1
PA
2
PF
4
PF
3
D1
SS14
1 2
VCC
그래픽LCD
VCC
VD
VE
E
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 42
0x00,0x0f,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,
0x00,0xfc,0x40,0xa0,0x10,0x08,0x04,0x00,0x00,0x00,0x00,0x00, //K 1
0x00,0x0f,0x00,0x00,0x01,0x02,0x04,0x08,0x00,0x00,0x00,0x00,
0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0xfc,0x00,0x00, //임 2
0x00,0x00,0x1e,0x12,0x12,0x12,0x12,0x12,0x12,0x1e,0x00,0x00,
0x00,0xfc,0x40,0x40,0xfc,0x40,0x40,0xfc,0x00,0xfc,0x00,0x00, //베 3
0x00,0x0f,0x08,0x08,0x0f,0x00,0x00,0x1f,0x00,0x1f,0x00,0x00,
0x00,0xfc,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0xfc,0x00,0x00, //디 4
0x00,0x0f,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x1f,0x00,0x00,
0x00,0x00,0xfc,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x00, //드 5
0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,
0x00,0x04,0x04,0xfc,0x04,0x44,0x40,0xfc,0x00,0xfc,0x00,0x00, //제 6
0x00,0x0c,0x03,0x00,0x03,0x0c,0x00,0x1f,0x00,0x1f,0x00,0x00,
0x00,0x80,0xa4,0xa4,0xbc,0xa4,0xa4,0xbc,0xa4,0xa4,0x80,0x00, //품 7
0x00,0x00,0x1e,0x12,0x12,0x12,0x13,0x12,0x12,0x1e,0x00,0x00,
0x00,0x04,0x04,0x04,0xfc,0x00,0xfc,0x80,0x80,0xfc,0x00,0x00, //개 8
0x00,0x08,0x04,0x03,0x00,0x00,0x1f,0x00,0x00,0x1f,0x00,0x00,
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 43
0x00,0x7c,0x48,0x48,0x48,0x48,0x7c,0x00,0x00,0x7c,0x10,0x10, //발 9
0x00,0x00,0x1d,0x15,0x15,0x15,0x15,0x15,0x15,0x17,0x00,0x00,
0x00,0xf8,0x04,0x04,0x04,0x04,0xf8,0x00,0x00,0xfc,0x00,0x00, //이 10
0x00,0x07,0x08,0x08,0x08,0x08,0x07,0x00,0x00,0x1f,0x00,0x00,
0x00,0x84,0x84,0x84,0x44,0x24,0x5c,0x48,0x48,0xfc,0x00,0x00, //경 11
0x00,0x00,0x0c,0x12,0x12,0x12,0x12,0x12,0x12,0x0c,0x00,0x00,
0x00,0x7c,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0xfc,0x10,0x10, //남 12
0x00,0x00,0x1e,0x12,0x12,0x12,0x12,0x12,0x12,0x1e,0x00,0x00,
0x00,0x00,0xc0,0x30,0x0c,0x30,0xc0,0x00,0x00,0x00,0x00,0x00, //A 13
0x00,0x0e,0x01,0x01,0x01,0x01,0x01,0x0e,0x00,0x00,0x00,0x00,
0x00,0x1c,0xe0,0x00,0x00,0x00,0xe0,0x1c,0x00,0x00,0x00,0x00, //V 14
0x00,0x00,0x00,0x03,0x0c,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xfc,0x44,0x44,0x44,0x44,0xb8,0x00,0x00,0x00,0x00,0x00, //R 15
0x00,0x0f,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,
0x00,0xfc,0x84,0x84,0x84,0x84,0x78,0x00,0x00,0x00,0x00,0x00, //P 16
0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //I 17
0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xf0,0x08,0x04,0x04,0x04,0x04,0x08,0x00,0x00,0x00,0x00, //C 18
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 44
0x00,0x03,0x04,0x08,0x08,0x08,0x08,0x04,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //, 19
0x00,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xfc,0x84,0x84,0x84,0x84,0x78,0x00,0x00,0x00,0x00,0x00, //P 20
0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xc0,0x30,0x0c,0x30,0xc0,0x00,0x00,0x00,0x00,0x00, //A 21
0x00,0x0e,0x01,0x01,0x01,0x01,0x01,0x0e,0x00,0x00,0x00,0x00,
0x00,0xfc,0x04,0x04,0x04,0x08,0xf0,0x00,0x00,0x00,0x00,0x00, //D 22
0x00,0x0f,0x08,0x08,0x08,0x04,0x03,0x00,0x00,0x00,0x00,0x00,
0x00,0x38,0x44,0x44,0x84,0x84,0x18,0x00,0x00,0x00,0x00,0x00, //S 23
0x00,0x06,0x08,0x08,0x08,0x08,0x07,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x04,0xc4,0x04,0x04,0xc4,0x04,0x04,0xfc,0x00,0x00, //교 24
0x00,0x08,0x08,0x0f,0x08,0x08,0x0f,0x08,0x0a,0x09,0x08,0x00,
0x00,0x80,0x98,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0x98,0x80,0x00, //육 25
0x00,0x00,0x02,0x03,0x02,0x02,0x02,0x02,0x03,0x1e,0x00,0x00,
0x00,0x04,0x84,0x64,0x1c,0x24,0x44,0x94,0x10,0xfc,0x00,0x00, //전 26
0x00,0x01,0x1c,0x10,0x10,0x10,0x10,0x10,0x10,0x13,0x00,0x00,
0x00,0x00,0x3c,0x24,0x24,0x24,0x24,0x24,0x24,0x3c,0x00,0x00, //문 27
0x00,0x01,0x1d,0x11,0x11,0x11,0x17,0x11,0x11,0x11,0x01,0x00,
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 45
0x00,0x84,0x84,0x84,0x44,0x24,0x1c,0x00,0x00,0xfc,0x20,0x20, //강 28
0x00,0x00,0x0c,0x12,0x12,0x12,0x12,0x12,0x12,0x0c,0x00,0x00,
0x00,0x00,0x00,0x80,0x7c,0x80,0x00,0x00,0x00,0xfc,0x80,0x80, //사 29
0x00,0x08,0x06,0x01,0x00,0x01,0x06,0x08,0x00,0x1f,0x00,0x00,
} ;
//----------------------------------------------------
char gbuf[128][8];
void dsp_str(char n)
{
delay_us(30);
PORTF|=0X08;// lcd_di=1;
PORTA=n; //data
PORTF|=0X10;//lcd_en=1;
#asm("nop");
PORTF&=~0X10;//lcd_en=0; //on->off
}
//----------------------------------------------------
void dsp_cmd(char n)
{
delay_us(30);
PORTF&=~0X08;//lcd_di=0;
PORTA=n; //data
PORTF|=0X10;//lcd_en=1;
#asm("nop");
PORTF&=~0X10;//lcd_en=0; //on->off
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 46
}
//----------------------------------------------------
void lcd_init()
{
PORTF|=0X20;//lcd_s1=1;
PORTF|=0X40;//lcd_s2=1; //page0,1
dsp_cmd(0x3f);
dsp_cmd(0xc0);
}
//----------------------------------------------------
void set_page0() { lcd.x=0x40; lcd_pg=0; }
void set_page1() { lcd.x=0x40; lcd_pg=1; }
void dsp_addr()
{
if(lcd_pg){ //page1?
PORTF&=~0x20;
PORTF|=0X40;
}
else{ //page0
PORTF|=0x20;
PORTF&=~0X40;
}
dsp_cmd(lcd.y);
dsp_cmd(lcd.x);
}
void dsp_nul(char n)
{
char i; dsp_addr();
for(i=0; i<n; ++i)///64개의 열을 클리어 시킨다.
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 47
dsp_str(0);
}
void dsp_nul2(char n)
{
char i;
dsp_addr(); //현재 좌표 출력
lcd.bf=0; //공백으로 채움
if(lcd_blk)
lcd.bf=~lcd.bf;
for(i=0; i<n; ++i) //n값만큼 증가하면 출력
dsp_str(lcd.bf);
++lcd.y;// x축좌표의 값 증가 2번째 열도 공백으로 출력
dsp_addr();
lcd.bf=0;
if(lcd_blk)
{ lcd.bf=~lcd.bf; lcd.bf&=~0x80; }
for(i=0; i<n; ++i)
dsp_str(lcd.bf);
lcd.x+=n; //y축은 n값 만큼 증가!
lcd.y=lcd.ty;
}
void lcd_clear()
{
char i;
lcd.x=0x40; lcd.y=0xb8;
for(i=0; i<8; ++i) {
lcd_pg=0;
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 48
dsp_nul(64);
lcd_pg=1;
dsp_nul(64);
++lcd.y;
}
}
void dsp_han(flash char *p, char n)
{
char i, bf1, bf2;
static int cnt=0;
static int cnt2=0;
static int cnt3=0;
bf1=n*12;//첫번째 문자열의 크기를 확인
dsp_addr();///현재 좌표 확인
for(i=0; i<bf1; ++i) { //문자열의 크기만큼 문자 출력
lcd.bf=p[i];
if(lcd_blk) lcd.bf=~lcd.bf; //반전 출력 여부
dsp_str(lcd.bf); //데이타 출력
}
bf2=bf1*2; //2번째 열의 크기 계산
++lcd.y; //lcd y adrees 0xb9 2번째 열 계산
dsp_addr(); ///현재 좌표 확인
for(i=bf1; i<bf2; ++i) {
lcd.bf=p[i];
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 49
if(lcd_blk)
{ lcd.bf=~lcd.bf; lcd.bf&=~0x80; }
dsp_str(lcd.bf);
}
lcd.x+=bf1; //lcd y address의 값을 0x4c로 바꿥 줌, 다음 문자의 시작좌표를 기억 함
lcd.y=lcd.ty; //lcd x좌표 0xb8을 저장
}
void main()
{
int i=0;
DDRA=0xff;
DDRF=0xFF; //out
bf=0x0f;
lcd_init();
lcd_clear();
while(1) {
set_page0();
lcd.ty=lcd.y=0xb8;///첫번째 라인
lcd_blk=1;
dsp_nul2(28);
dsp_han(han[0],1);
dsp_han(han[1],1);
dsp_han(han[2],1);
set_page1();
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 50
lcd.ty=lcd.y=0xb8;
lcd_blk=1;
dsp_han(han[3],1);
dsp_han(han[4],1);
dsp_han(han[5],1); dsp_nul2(27);
set_page0();
lcd.ty=lcd.y=0xba; //2번째 라인
lcd_blk=0;
dsp_nul2(10);
dsp_han(han[6],1);
dsp_han(han[7],1);
dsp_han(han[8],1);
dsp_han(han[9],1);
set_page1();
lcd.ty=lcd.y=0xba;
lcd_blk=0;
dsp_nul2(0 );
dsp_han(han[19],1);
dsp_han(han[24],1);
dsp_han(han[25],1);
dsp_han(han[26],1);
dsp_han(han[27],1);
set_page0();
lcd.ty=lcd.y=0xbc; //3번째 라인
lcd_blk=0;
dsp_nul2(12);
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 51
dsp_han(han[13],1);
dsp_han(han[14],1);
dsp_han(han[15],1);
dsp_han(han[16],1);
dsp_han(han[17],1);
set_page1();
lcd.ty=lcd.y=0xbc;
lcd_blk=0;
dsp_nul2(0);
dsp_han(han[18],1);
dsp_han(han[20],1);
dsp_han(han[21],1);
dsp_han(han[22],1);
dsp_han(han[23],1);
set_page0();
lcd.ty=lcd.y=0xbe; //4번째 라인
lcd_blk=1;
dsp_nul2(40);
dsp_han(han[10],1);
dsp_han(han[11],1);
set_page1();
lcd.ty=lcd.y=0xbe;
lcd_blk=1;
dsp_nul2(0);
dsp_han(han[12],1);
dsp_han(han[28],1);
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 52
dsp_han(han[29],1);
dsp_nul2(24);
}
}
//예제소스 끝
3. 동영상
1) I/O 입출력 동영상
[I/O 입출력 예제소스 및 동영상]
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 53
3) TIMER 인터럽트 동영상
[타이머/카운터 인터럽트(FND) 예제소스 및 동영상]
4) 조도센서, 온도센서를 이용한 ADC 동영상
[ADC(온도센서, 조도센서) 예제소스 및 동영상]
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 54
5) RS232 통신 동영상
[RS232 통신(UART) 예제소스 및 동영상]
6) RS485 통신 동영상
[RS485 통신 예제소스 및 동영상]
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 55
7) 시계 IC를 이용한 I2C 통신 동영상
[시계 IC(I2C) 예제소스 및 동영상]
8) 문자 LCD 동영상
[문자 LCD 예제소스 및 동영상]
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 56
9) 그래픽 LCD 동영상
[그래픽 LCD 예제소스 및 동영상]
TITLE: Education
LK-ATmega128-A2
Manual
LK Development Team
Status
Revision V0.1
Date 2011 /08/09
Doc LK임베디드
S/N
2011 LK EMBEDDED LK-ATmega128-A2 Manual version 1.0 페이지 57
4. Epilog
기술지원
-LK임베디드홈페이지문의: WWW.LKEMBEDDED.CO.KR상담문의코너이용
-LK임베디드 카페문의: http://cafe.naver.com/lkembedded 제품Q&A게시판 이용
-엔지니어 이메일 기술문의: [email protected]
-엔지니어 기술상담 전화문의: Tel. 02-968-8616~7
감사의글
LK임베디드 제품을 구입해 주셔서 감사합니다. 당사는AVR, PIC, ARM7을사용하시는
고객님의 편의를 증진시키기 위해서, 마이컴 교육 및 싞제품 연구개발을 위해서 항상
노력하고 있습니다. 앞으로도 끊임없는 도전정싞을 바탕으로 싞제품개발, 완벽핚
품질보증 체계확립, 대 고객 서비스를 통해 고객의 마음을 편하게 하는데 정진핛
것입니다.
본 제품을 활용하여 마이컴 학습 및 제품개발에 큰 도움 되시기를 바랍니다.