You are on page 1of 4

제2부.

CodeVisionAVR C 컴파일러 RealSYS


제3장. <ATmega8535>예제5: 스위치 입력 LCD에 표시하기
www.realsys.co.kr

<ATmega8535>예제5 : 스위치 입력 LCD에 표시하기


학습 목표 : 스위치 입력 값을 LCD에 표시 해보자.
사용자 문자를 만들어 LCD에 표시 해보자

„ 설치 사진

연결: CN9(1~4):PCÍÎ CN31(1~4):LCD 제어신호 : 4 가닥 점퍼 선으로 연결.


CN9(5~8):PCÍÎ CN32(5~8):LCD 데이터(4비트) ; 4 가닥 점퍼 선으로 연결.
CN2(1~8):PDÍÎ CN30(1~8):KEY ; 8 가닥 점퍼 선으로 연결.

153
제2부. CodeVisionAVR C 컴파일러 RealSYS
제3장. <ATmega8535>예제5: 스위치 입력 LCD에 표시하기
www.realsys.co.kr

„ 연결 회로도
1
CN2
CN_PB VCC

8
7
6
5
4
3
2
1
U1 AT90S8535
VCC 1 40
2 PB0(T0) PA0(ADC0) 39 1
PB1(T1) PA1(ADC1) 2

1
AR1 3 38
4.7Kx4 4 PB2(AIN0) PA2(ADC2) 37 3
CN6 5 PB3(AIN1) PA3(ADC3) 36 4 CN3
MISO1 6 PB4(SS) PA4(ADC4) 35 5 CN_PA

2
3
4
5
1 VCC 7 PB5(MOSI) PA5(ADC5) 34 6
2 SCK1 8 PB6[MISO) PA6(ADC6) 33 7
3 MOSI1 9 PB7[SCK) PA7(ADC7) 32 8
4 /RESET1 10 RESET ARef 31
5 11 Vcc AGnd 30 CN9
6 X1 12 GND AVcc 29
ISP_40P 4MHz CN10 13 XTAL2 PC7(TOSC2) 28 8
14 XTAL1 PC6(TOSC1) 27 7
C3 1 15 PD0(RxD) PC5 26 6
C2 2 16 PD1(TxD) PC4 25 5
20pF 20pF 3 17 PD2(INT0) PC3 24 4 1
4 18 PD3(INT1) PC2 23 3
5 19 PD4(OC1B) PC1(SDA) 22 2
6 20 PD5(OC1A) PC0(SCL) 21 1 1
7 PD6(ICP) PD7(OC2) CN_PC
8
CN_PD

RXD
TXD

LCD Display

U8 LCD(16x2)
VCC
AR5
VCC
VSS

R/W
1

4.7Kx8
RS

D0
D1
D2
D3
D4
D5
D6
D7
VL

L+
L-
E

4핀
케이블
10
11
12
13
14
15
16
CN30
2
3
4
5
6
7
8
9

1
2
3
4
5
6
7
8
9

8
VCC 접속
7
3

6 VR1 2
5 5k
4 R24 VCC
3
1

2
1 1 20
CN_KEY SW1 SW2 SW3 SW4 SW5 SW6 SW7 SW8

CN31 CN32
1
2
3
4

1
2
3
4
5
6
7
8

CN_LCD4 CN_LCD8

1
1

„ 소스 프로그램
/*********************************************
file name: lcd_key.c
BY RealSYS KCO 2001.1.2

function: KEY in => LCD disp

AVR Chip: ATmega8535 (4MHz)


cable connection:
CN9(1~4):PC <==> CN31(1~4):LCD-con
CN9(5~8):PC <==> CN32(5~8):LCD-dat
CN2(1~8):PB <==> CN30(1~8):KEY
*********************************************/
#include <mega8535.h>
#include <stdio.h>

154
제2부. CodeVisionAVR C 컴파일러 RealSYS
제3장. <ATmega8535>예제5: 스위치 입력 LCD에 표시하기
www.realsys.co.kr
#include <delay.h>

typedef unsigned char byte;

void sw_process(void);

// Alphanumeric LCD Module functions


#asm
.equ __lcd_port=0x15 ; Port C
#endasm
#include <lcd.h>
char sbuf[20];

// Declare your global variables here


unsigned int m_cnt=0;

/* 사용자 정의 문자 테이블 */
flash byte char0[8]={
0b0000100,
0b0000100,
0b0000100,
0b0000100,
0b0011111,
0b0001110,
0b0000100,
0b0000000
};

/* function used to define user characters */


void define_char(byte flash *pc,byte char_code){
byte i,a;
a=(char_code<<3) | 0x40;
for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);
}

void main(void)
{
// Declare your local variables here
// Port B
DDRB=0x00;
PORTB=0xff;

// LCD module initialization


lcd_init(16);

/* define user character 0 */


define_char(char0,0);
while (1)
{
// Place your code here

155
제2부. CodeVisionAVR C 컴파일러 RealSYS
제3장. <ATmega8535>예제5: 스위치 입력 LCD에 표시하기
www.realsys.co.kr
m_cnt++;
lcd_gotoxy(0,0);
/* display used defined char 0 */
lcd_putchar(0);
sprintf(sbuf,"Press KEY: %04X",m_cnt);
lcd_puts(sbuf);
sw_process();
delay_ms(100);
};
}
void sw_process(void){
char tmp[17];
if(PINB == 0xff) sprintf(tmp," No Key Press ");
else if(PINB.0==0) sprintf(tmp,"SW8(PB.0) Press");
else if(PINB.1==0) sprintf(tmp,"SW7(PB.1) Press");
else if(PINB.2==0) sprintf(tmp,"SW6(PB.2) Press");
else if(PINB.3==0) sprintf(tmp,"SW5(PB.3) Press");
else if(PINB.4==0) sprintf(tmp,"SW4(PB.4) Press");
else if(PINB.5==0) sprintf(tmp,"SW3(PB.5) Press");
else if(PINB.6==0) sprintf(tmp,"SW2(PB.6) Press");
else if(PINB.7==0) sprintf(tmp,"SW1(PB.7) Press");
lcd_gotoxy(0,1);
lcd_puts(tmp);
}

„ 실행 화면
0.1초
사용자
간격으로 증가
문자

스위치를 누르면 스위치 이름이 LCD에 표시

156

You might also like