chap7. led, lcd와7-세그먼트 켜기및iic...

38
Chap7. LED, LCD와 7-세그먼트 켜기 IIC 통신 http://www.smartdisplay.co.kr

Upload: others

Post on 24-Oct-2019

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

Chap7. LED, LCD와 7-세그먼트켜기 및 IIC 통신

http://www.smartdisplay.co.kr

Page 2: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

LED를 켜기 위한 순서

1. 프로그램 코딩 및 빌드 (헥사파일 만들기)

2. 프로그램 메모리 라이팅

Page 3: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

M-IDE 빌드 해서 핵사 파일 만들기

Page 4: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

강의 계획

Chap1. 강의계획및 디지털 논리 이론Chap2. 펌웨어 작성을 위한 C언어 IChap3. 펌웨어 작성을 위한 C언어 IIChap4. AT89S52 메모리 구조Chap5. SD-52보드 구성과 코드 메모리 프로그래밍 방법Chap6. 어드레스 디코딩(매핑)과 어셈블리어 코딩 방법Chap7. LED, LCD와 7-세그먼트 켜기 및 IIC 통신Chap8. 인터럽트와 타이머Chap9. 직렬통신과 PS2 키보드 인터페이스Chap10. 리모콘 수신과 RTC 및 SpeakerChap11. AD컨버터와 DA컨버터Chap12. OSD (On-Screen Display)

Page 5: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

Keil-C 컴파일러 사용하기 (1/5)

Project New

Atmel AT89C52

확인

Page 6: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

Keil-C 컴파일러 사용하기 (2/5)

Target 1에서 마우스 오른쪽 버튼 후Option for target ‘target 1’

Page 7: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

Keil-C 컴파일러 사용하기 (3/5)

Page 8: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

Keil-C 컴파일러 사용하기 (4/5)

Source Group 1에서 마우스 오른쪽 버튼 후Add files to Group ‘ Source Group 1’

프로그램을 작성 하신후Project Build Target or F7

Page 9: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

Keil-C 컴파일러 사용하기 (5/5)

SD-52 Training Board에 있는 CD나 자료실의

AT89S52_HardwareSetting 부분을 다운 받아서 사

용해도 됩니다.

기본적인 구성이 프로그램 되어 있습니다 .

Page 10: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

Current (1/2)

소스원이 충분할 때 흐를 수 있는 전류는 도선의 넓이와 비례한다.

Page 11: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

Current (2/2)

저항의 의해 전류량을 조절 할 수 있다.

Page 12: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

DIODE

Symbol of Diode Characteristic of Diode

Operation of Diode

Page 13: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

LED (1/2)

+-

Ω==−

== 30001.03

1025

AV

mAVV

IVR

Page 14: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

LED (2/2)

Case 1 Case 2 Case 3

+-

+-

+-

Page 15: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

AT89S52_HardwareSettingMemorymapping.hBYTE xdata LED _at_ 0x0000;BYTE xdata SEG_SIGAL _at_ 0x0100;BYTE xdata SEG_DIGIT _at_ 0x0200;BYTE xdata LCD_WR_COMMAND _at_ 0x0300;BYTE xdata LCD_RD_STATE _at_ 0x0301;BYTE xdata LCD_WR_DATA _at_ 0x0302;BYTE xdata LCD_RD_DATA _at_ 0x0303;BYTE xdata DAC_VALUE _at_ 0x0400;BYTE xdata OUT_CONTROL _at_ 0x0500;

void main(void){

BYTE LedVar = 0;Initial_CPU();while(1){

LED = ~(LedVar++);LongDelay(500);

}}

Main.c

Page 16: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

7-Segment (1/4)

Common Anode Type Common cathode Type

Page 17: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

7-Segment (2/4)

7-Segment Driving Method

MCULatch Latch Latch Latch

Data

Latch Enable

Passive Method (Scanning Method) Active Method ( Data Latched Method)

Page 18: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

7-Segment (3/4)

문제점 : 점유율 높다.

Page 19: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

7-Segment (4/4)

unsigned char code FND[10] ={ ~(0x01|0x02|0x04|0x08|0x10|0x20), // 0~(0x02|0x04), // 1~(0x01|0x02|0x40|0x10|0x08),// 2~(0x01|0x02|0x40|0x04|0x08),// 3~(0x20|0x40|0x02|0x04), // 4~(0x01|0x20|0x40|0x04|0x08),// 5~(0x20|0x10|0x40|0x04|0x08),// 6~(0x20|0x01|0x02|0x04), // 7~(0x01|0x02|0x04|0x40|0x08|0x10|0x20), // 8~(0x20|0x01|0x02|0x40|0x04), // 9

};

7- Segment Code Table

Page 20: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

CLCD (1/9)

CLCD Interface Part

Page 21: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

CLCD (2/9)

- 4bit, 8bit interface

- 5X8 dots or 5X7 dots character font

- Display Data RAM (DDRAM), Character Generator ROM (CGROM) and CGRAM

- Display clear, cursor home, display on/off, cursor on/off, display character blink, cursor shift, display shift.

- instruction register (IR) and an data register (DR)

By RS and R/W input signals, these two registers can be selected. (if RS = 0 then IR, else DR)

Page 22: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

ASCII Table과 호환 : ex) A = 0x41 printf(“A”);

CLCD (3/9)

Page 23: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

CLCD (4/9)

Write Timing

Page 24: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

CLCD (5/9)

Read Timing

Page 25: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

CLCD (6/9)

Clear Display : 전체화면을 지우고 DDRAM 어드레스를 0으로 clear한 후 커서를 home 위치로 옮긴다. Return Home : 커서를 홈으로 위치시킨다. Entry Mode Set : I/D=1: Increment the DDRAM address, I/D=0, Decrement the DDRAM address

S = 1 : shifts the entire display, S=0, the display does not shift.Display on/off control : D = 1 : Displaly On, D = 0 : Display Off

C = 1 :Cursor On, C = 0 : Cursor OffB = 1 : Cursor Blink On, B = 0 : Cursor Blink Off

Page 26: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

CLCD (7/9)

Cursor or display shift: 00: Shifts the cursor position to the left, 01: Shifts the cursor position to the right: 10: Shifts the entire display to the left. 11: Shifts the entire display to the right.

Function set

DL:Sets the interface data length.1: Data are sent or received in 8-bit lengths (DB7 to DB0) 0: Data are sent or received in 4-bit lengths (DB7 to DB4) * 4-bit length is selected, data must be sent or received twice.

N:Sets the number of display lines.1 : 2행0 : 1행

F:Sets the character font.1 : 5 X 110 : 5 X 8

Read busy flag and address

Page 27: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

CLCD (8/9)

lcd_command_write(0x38);

lcd_command_write(0x08);

lcd_command_write(0x01);

lcd_command_write(0x06);

lcd_command_write(0x0C);

LCD Initial이 성공하면 LCD 위에 나타나는 바가 없어진다.

LCD 초기화

Page 28: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

CLCD (9/9)

1. command write와 display write 함수를 만들어라

2. 쉬운 접근을 위한 String 함수를 만들어라.

ex) LcdString(BYTE line, char *str)

LcdString(0x80, “Smartdisplay World”)void LcdString(BYTE line, char *str){

BYTE index;BYTE character; lcd_command_write(line); // LCD command : cursor position index = 0; character = str[index]; while(character != '\0') {

lcd_char_display(character); // LCD character displayindex++;character = str[index];

}}

Programming Method

Page 29: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

IIC Protocol(1/7)

Introduction to IIC(I2C)

Philips originally developed a simple bi-directional 2-wire, Serial Data

(SDA) and Serial Clock (SCL) bus for inter-IC control.

A complete system usually consists of at least one microcontroller

(Master) and other peripheral devices (Slave).

IIC Protocol is made up start condition, memory addressing bit data input, acknowledge bit, and stop condition.

Page 30: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

IIC Protocol(2/7)The IIC-BUS Concept

Micro Controller

Video Processor

AudioProcessor

Memory OSD LCD DRIVER

ADC

SDASCL

Example of IIC-Bus Application

Two wires, serial data (SDA) and serial clock (SCL), carry information betweendevices connected to the bus.

Each device has a its own address. (ex, Memory : 0xA0, Audio Processor: 0xA8)

It appears that Micro-controller is the master device, the others are slave devices.

Page 31: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

IIC Protocol(3/7)

SCLK1OUT

DATA1OUT

SCLKIN

DATAIN

SCLK1OUT

DATA1OUT

SCLKIN

DATAIN

SDA(Serial Data Line)SCL(Serial Clock Line)

Device 1 Device 2

Pull-UpResistors

VDD

Connection of device to the IIC-bus

Both SDA and SCL are bi-directional lines, connected to Pull-up resistors.

When the bus is free, both line is HIGH.

The output stage must have an open-drain or open-collector to perform to Wired-AND function

General Characteristics

Page 32: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

IIC Protocol(4/7)

Start and Stop Conditions

Start Condition : A HIGH to LOW transition on the SDA line while SCL line is HIGH.Stop Condition : A LOW to HIGH transition on the SDA line while SCL line is HIGH.

Data Validity

The data on the SDA line must be stable during the HIGH period of clock.

Page 33: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

IIC Protocol(5/7)Write Operation

Byte Write

Page Write

Page 34: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

IIC Protocol(6/7)

Read Operation

Current Address Read

Random Read

Page 35: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

IIC Protocol(7/7)Read Operation

Sequential Read

Page 36: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

Tip (1/2)

Page 37: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

Tip (2/2)

#define SetRtcSCLK (P1 |= 0x04)

#define SetSCL (OUT_CONTRL_REGISTER |= 0x20); OUT_CONTROL = OUT_CONTRL_REGISTER

P1 : Register 개념으로 비트 단위로 제어가 가능

OUT_CONTROL : 외부 번지로 비트 단위로 제어 불능 (저장기능 없음)따라서 비트 단위로 제어를 하기 위해서는 저장 기능을 갖는 레지스터를 만들어 줘야함

Page 38: Chap7. LED, LCD와7-세그먼트 켜기및IIC 통신cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzY5... · 2. 7-Segment 0~9999 까지카운팅하기 3. CLCD의첫번째열에자기이름쓰기

http://www.smartdisplay.co.kr

숙제

1. 지난 주에 어셈으로 작성하였던 LED 프로그램 C로 작성

2. 7-Segment 0~9999 까지 카운팅 하기

3. CLCD의 첫번째 열에 자기 이름쓰기

4. CLCD에 7-Segment와 같은 숫자 나오게 하기

5. EEPROM(24C04)을 가지고 Byte Write, Page Write,

Current Address Read, Random Read, Sequential Read 구현하기(24C04는 SD-52 보드에 실장 되어 있음)

회로도 보는 연습을 하자.

데이터쉬트 보는 연습을 하자.

다음 시간에는 인터럽트와 타이머를 학습합니다.