4자리 표시 Arduino 연결. 7개 세그먼트 표시기. 분수 표시기, 부동 소수점 형식으로 출력

단순한 표시보다 객관적인 정보를 제공하는 것이 더 편리한 매개변수가 있습니다. 예를 들어 외부 기온이나 알람 시계의 시간 등이 있습니다. 예, 이 모든 것은 빛나는 전구나 LED를 사용하여 수행할 수 있습니다. 1도 – 하나의 불타는 LED 또는 전구 등 하지만이 반딧불을 세어 보면 – 글쎄요! 그러나 그들이 말했듯이 가장 간단한 솔루션- 가장 신뢰할 수 있습니다. 그래서 개발자들은 오랫동안 고민하지 않고 간단한 LED 스트립을 가져다가 올바른 순서로 배열했습니다.

20세기 초 도래와 함께 진공관최초의 가스 방전 표시기가 나타났습니다.

그러한 지표의 도움으로 추론이 가능했습니다. 디지털 정보아라비아 숫자로. 이전에는 장치 및 기타 장치에 대한 다양한 표시가 이러한 램프에 있었습니다. 전자 기기. 현재 가스 방전 요소는 어느 곳에서도 거의 사용되지 않습니다. 그러나 복고풍은 항상 유행하므로 많은 라디오 아마추어는 자신과 사랑하는 사람을 위해 가스 방전 표시기에 대한 멋진 시계를 수집합니다.


가스 방전 램프의 단점은 많은 전력을 소비한다는 것입니다. 내구성에 대해서는 논쟁이 있을 수 있습니다. 우리 대학에서는 여전히 실험실에서 주파수 카운터를 사용하고 있습니다. 가스 방전 표시기.

7개 세그먼트 표시기

LED의 출현으로 상황은 더 나은 방향으로 극적으로 변했습니다. LED 자체가 소비합니다. 작은 전류. 올바른 위치에 배치하면 모든 정보를 표시할 수 있습니다. 모든 아라비아 숫자를 강조하려면 7개의 발광 LED 스트립만으로 충분합니다. 세그먼트는 특정 방식으로 설정됩니다.

거의 모든 7세그먼트 표시기에는 8번째 세그먼트(점)도 추가되어 모든 매개변수의 정수 및 분수 값을 표시할 수 있습니다.

이론적으로는 8세그먼트 지표를 얻게 되지만 예전 방식으로는 7세그먼트 지표라고도 합니다.

결과는 무엇입니까? 7개 세그먼트 표시기의 각 스트립은 LED 또는 LED 그룹으로 조명됩니다. 결과적으로 특정 세그먼트를 강조 표시하여 문자 및 기호뿐만 아니라 0에서 9까지의 숫자를 표시할 수 있습니다.

다이어그램의 유형 및 지정

한 자리, 두 자리, 세 자리, 네 자리 7세그먼트 표시기가 있습니다. 나는 4개 이상의 카테고리를 본 적이 없습니다.

다이어그램에서 7개 세그먼트 표시기는 다음과 같습니다.

실제로 기본 단자 외에도 각 7세그먼트 표시기에는 공통 양극(OA) 또는 공통 음극(OC)이 있는 공통 단자도 있습니다.

공통 양극이 있는 7세그먼트 표시기의 내부 회로는 다음과 같습니다.


다음과 같은 공통 음극을 사용합니다.


공통 양극(OA)이 있는 7세그먼트 표시기가 있는 경우 회로에서 이 핀에 "플러스" 전원을 공급해야 하며, 공통 음극(OC)이 있는 경우 "마이너스" 또는 접지를 공급해야 합니다.

7세그먼트 표시기를 확인하는 방법

우리는 다음과 같은 지표를 가지고 있습니다:


최신 7세그먼트 표시기를 확인하려면 다이오드 테스트 기능이 있는 멀티미터만 있으면 됩니다. 우선, 우리는 일반적인 결론을 찾고 있습니다. OA이거나 OK일 수 있습니다. 여기서는 무작위로. 그런 다음 위 다이어그램에 따라 표시기의 나머지 세그먼트의 성능을 확인합니다.

아래 사진에서 볼 수 있듯이 테스트 중인 세그먼트에 불이 들어옵니다. 같은 방식으로 다른 세그먼트도 확인합니다. 모든 세그먼트가 켜져 있으면 해당 표시기가 그대로 유지되며 개발에 사용할 수 있습니다.


멀티미터의 전압이 세그먼트를 테스트하기에 충분하지 않은 경우도 있습니다. 따라서 전원 공급 장치를 가져와 5V로 설정합니다. 세그먼트를 통해 전류를 제한하기 위해 1-2 Kilo-Ohm 저항을 통해 확인합니다.


같은 방법으로 중국 수신기의 표시기를 확인합니다.


회로에서 7개의 세그먼트 표시기는 각 핀의 저항기에 연결됩니다.

우리의 현대 세계 7세그먼트 표시기가 모든 정보를 표시할 수 있는 액정 표시기로 대체되었습니다.

그러나 이를 사용하려면 해당 장치의 회로 설계에 대한 특정 기술이 필요합니다. 따라서 7세그먼트 지표는 저렴한 비용과 사용 용이성으로 인해 오늘날에도 여전히 사용되고 있습니다.

7세그먼트 LED 인디케이터는 디지털 값 표시 장치 중 가장 널리 사용되는 제품으로 전자레인지 전면 패널에 사용되며, 세탁기, 디지털 시계, 카운터, 타이머 등. LCD 표시기에 비해 LED 표시기 세그먼트는 밝게 빛나고 장거리 및 넓은 시야각에서 볼 수 있습니다. 7세그먼트 4비트 표시기를 마이크로 컨트롤러에 연결하려면 최소 12개의 I/O 라인이 필요합니다. 따라서 회사의 시리즈와 같이 핀 수가 적은 마이크로 컨트롤러에서 이러한 표시기를 사용하는 것은 거의 불가능합니다. 물론 당신은 사용할 수 있습니다 다양한 방법멀티플렉싱(웹사이트의 "구성표" 섹션에서 설명을 찾을 수 있음). 그러나 이 경우에도 각 방법에는 특정 제한이 있으며 복잡한 소프트웨어 알고리즘을 사용하는 경우가 많습니다.

마이크로컨트롤러의 I/O 라인 3개만 필요한 SPI 인터페이스를 통해 표시기를 연결하는 방법을 살펴보겠습니다. 동시에 모든 지표 세그먼트에 대한 통제권은 유지됩니다.

SPI 버스를 통해 4비트 표시기를 마이크로 컨트롤러에 연결하려면 회사에서 생산한 특수 드라이버 칩이 사용됩니다. 마이크로 회로는 공통 음극으로 8개의 7세그먼트 표시기를 구동할 수 있으며 BCD 디코더, 세그먼트 드라이버, 다중화 회로 및 숫자 값을 저장하기 위한 정적 RAM을 포함합니다.

표시 세그먼트를 통과하는 전류는 단 하나의 외부 저항기를 사용하여 설정됩니다. 또한 이 칩은 내장된 PWM을 사용하여 표시기 밝기(16개 밝기 레벨) 제어를 지원합니다.

기사에서 논의된 회로는 아마추어 무선 설계에 사용할 수 있는 SPI 인터페이스가 있는 디스플레이 모듈 회로입니다. 그리고 우리는 회로 자체가 아니라 SPI 인터페이스를 통한 마이크로 회로 작업에 더 관심이 있습니다. +5V 모듈 전원은 Vcc 핀에 공급되며, 신호선 MOSI, CLK 및 CS는 마스터 장치(마이크로컨트롤러)와 슬레이브 장치(MAX7219 칩) 간의 통신을 위해 설계되었습니다.

초소형 회로는 표준 연결에 사용되며 필요한 외부 구성 요소는 세그먼트를 통해 전류를 설정하는 저항기, 전원 공급 장치용 보호 다이오드 및 전원 공급 장치용 필터 커패시터뿐입니다.

데이터는 16비트 패킷(2바이트)으로 칩에 전송되며, 이 패킷은 CLK 신호의 각 상승 에지에서 내장된 16비트 시프트 레지스터에 배치됩니다. 16비트 패킷을 D0-D15로 표시합니다. 여기서 D0-D7 비트는 데이터를 포함하고 D8-D11은 레지스터 주소를 포함하며 D12-D15 비트는 의미가 없습니다. 비트 D15는 최상위 비트이며 수신된 첫 번째 비트입니다. 칩은 8개의 표시기를 제어할 수 있지만 우리는 4개만 사용하는 것을 고려할 것입니다. 이는 오른쪽에서 왼쪽으로 순서대로 위치한 출력 DIG0 - DIG3에 의해 제어되며 이에 해당하는 4비트 주소(D8-D11)는 0x01, 0x02, 0x03 및 0x04(16진수 형식)입니다. 숫자 레지스터는 8x8 조직의 온칩 RAM을 사용하여 구현되며 직접 주소 지정이 가능하므로 디스플레이의 각 개별 숫자를 언제든지 업데이트할 수 있습니다. 다음 표는 MAX7219 칩의 주소 지정 가능한 숫자와 제어 레지스터를 보여줍니다.

등록하다

주소

16진수 값

작동하지 않음

디코딩 모드

지표 수

일시 휴업

지표 테스트

제어 레지스터

MAX1792 칩에는 디코딩 모드(Decode-Mode), 표시기 밝기 제어(Intensity), 연결된 표시기 수 레지스터(Scan Limit), 온/오프 제어(Shutdown), 테스트 모드(Display Test) 등 5개의 제어 레지스터가 있습니다.

칩 켜기 및 끄기

칩에 전원이 공급되면 모든 레지스터가 재설정되고 종료 모드로 들어갑니다. 이 모드에서는 디스플레이가 꺼집니다. 일반 작동 모드로 전환하려면 Shutdown 레지스터(주소 0Сh)의 비트 D0을 설정해야 합니다. 이 비트는 언제든지 지워져 드라이버를 강제로 끄고 모든 레지스터의 내용은 변경되지 않은 채로 남겨둘 수 있습니다. 이 모드는 표시등을 깜박임으로써 에너지를 절약하거나 알람 모드에서 사용할 수 있습니다(차단 모드의 순차적 활성화 및 비활성화).

마이크로 회로는 주소(0Сh)와 데이터(00h)를 순차적으로 전송하고 0Ch(주소)와 01h(데이터)를 전송하여 Shutdown 모드로 전환됩니다.

디코딩 모드

디코딩 모드 선택 레지스터(주소 09h)를 사용하면 BCD 코드 B 디코딩(표시 문자 0-9, E, H, L, P, -)을 사용하거나 각 자리에 대해 디코딩하지 않고 사용할 수 있습니다. 레지스터의 각 비트는 한 자리에 해당하며 논리 1을 설정하는 것은 이 비트에 대한 디코더를 켜는 것에 해당하고 0을 설정하면 디코더가 비활성화됨을 의미합니다. BCD 디코더를 사용하는 경우 숫자 레지스터(D3-D0)의 가장 낮은 데이터 니블만 고려되고 비트 D4-D6은 무시되며 비트 D7은 BCD 디코더에 의존하지 않으며 켜는 역할을 합니다. D7 = 1인 경우 표시의 소수점. 예를 들어 바이트 02h와 05h가 순서대로 전송되면 DIG1 표시기(오른쪽에서 두 번째 숫자)에 숫자 5가 표시됩니다. 마찬가지로 01h와 89h를 전송하면 DIG0 표시기에 소수점이 포함된 숫자 9가 표시됩니다. . 아래 표는 다음과 같습니다. 전체 목록칩의 BCD 디코더를 사용할 때 표시되는 문자입니다.

상징

레지스터의 데이터

활성화된 세그먼트 = 1

비어 있는

*소수점은 비트 D7=1로 설정됩니다.

BCD 디코더가 작동에서 제외되면 데이터 비트 D7-D0은 표시기의 세그먼트 라인(A-G 및 DP)에 해당합니다.

표시기 밝기 조절

이 칩을 사용하면 내장된 PWM을 사용하여 표시기의 밝기를 프로그래밍 방식으로 제어할 수 있습니다. PWM 출력은 강도 레지스터(주소 0Ah)의 하위 니블(D3-D0)에 의해 제어되며, 이를 통해 16가지 밝기 레벨 중 하나를 설정할 수 있습니다. 니블의 모든 비트가 1로 설정되면 표시기의 최대 밝기가 선택됩니다.

연결된 표시기 수

Scan-Limit 레지스터(주소 0Bh)는 마이크로 회로(1 ... 8)에 의해 서비스되는 비트 수의 값을 설정합니다. 4비트 버전의 경우 03h 값이 레지스터에 기록되어야 합니다.

지표 테스트

이 모드를 담당하는 레지스터는 주소 0Fh에 있습니다. 레지스터에서 D0 비트를 설정하면 사용자는 모든 표시기 세그먼트를 켤 수 있지만 제어 및 데이터 레지스터의 내용은 변경되지 않습니다. 디스플레이 테스트 모드를 비활성화하려면 비트 D0이 0이어야 합니다.

마이크로컨트롤러와의 인터페이스

표시기 모듈은 3개의 빈 I/O 라인이 있는 모든 마이크로컨트롤러에 연결할 수 있습니다. 마이크로 컨트롤러에 내장형 SPI 하드웨어 모듈이 있는 경우 표시기 모듈을 버스의 슬레이브 장치로 연결할 수 있습니다. 이 경우 마이크로 컨트롤러의 SPI 신호 라인 SDO(직렬 데이터 출력), SCLK(직렬 클록) 및 SS(슬레이브 선택)는 MAX7219 칩(모듈)의 MOSI, CLK 및 CS 핀에 직접 연결될 수 있으며, CS 신호는 액티브 로우입니다.

마이크로 컨트롤러에 하드웨어 SPI가 없으면 인터페이스를 소프트웨어로 구성할 수 있습니다. MAX7219와의 통신은 CS 라인을 로우로 유지한 다음 CLK 신호의 상승 에지에서 MOSI 라인을 통해 16비트 데이터를 순차적으로(MSB 우선) 전송함으로써 시작됩니다. 전송이 완료되면 CS 라인은 다시 High가 됩니다.

다운로드 섹션에서 사용자는 테스트 프로그램의 소스 텍스트와 SPI 인터페이스가 있는 표시기 모듈에 값을 표시하는 기존 4비트 카운터를 구현하는 펌웨어의 HEX 파일을 다운로드할 수 있습니다. 사용된 마이크로 컨트롤러는 소프트웨어로 구현된 인터페이스이며 표시기 모듈의 신호 라인 CS, MOSI 및 CLK는 각각 포트 GP0, GP1 및 GP2에 연결됩니다. mikroC 컴파일러는 다음 용도로 사용됩니다. PIC 마이크로컨트롤러(마이크로일렉트로니카

사이트의 자료에 대한 의견을 듣고 수신하려면 전체 권한우리 포럼에 당신이 필요로 등록하다 .


한 자리 7세그먼트 표시기의 연결 다이어그램
여러 자리 7세그먼트 표시기의 연결 다이어그램

디지털 정보 표시 장치. 이는 아라비아 숫자를 표시할 수 있는 표시기의 가장 간단한 구현입니다. 보다 복잡한 다중 세그먼트 및 매트릭스 표시기를 사용하여 문자를 표시합니다.

이름에서 알 수 있듯이 개별적으로 켜지고 꺼지는 7개의 디스플레이 요소(세그먼트)로 구성됩니다. 이를 다양한 조합으로 포함시켜 아라비아 숫자의 단순화된 이미지를 만드는 데 사용할 수 있습니다.
세그먼트는 문자 A부터 G까지로 지정됩니다. 여덟 번째 세그먼트 - 소수점 (소수점, DP), 분수를 표시하도록 설계되었습니다.
때때로 7세그먼트 표시기에 문자가 표시됩니다.

색상은 다양하며 일반적으로 흰색, 빨간색, 녹색, 노란색, 파란색이 있습니다. 또한 크기가 다를 수 있습니다.

또한 LED 표시기는 한 자리(위 그림 참조) 또는 여러 자리일 수 있습니다. 기본적으로 1자리, 2자리, 3자리 및 4자리 LED 표시기가 실제로 사용됩니다.

10자리 숫자 외에 7세그먼트 표시기에 문자도 표시할 수 있습니다. 그러나 직관적인 7세그먼트 표현을 갖는 문자는 거의 없습니다.
라틴어: 대문자 A, B, C, E, F, G, H, I, J, L, N, O, P, S, U, Y, Z, 소문자 a, b, c, d, e, g , h, i, n, o, q, r, t, u.
키릴 문자: A, B, V, G, g, E, i, N, O, o, P, p, R, S, s, U, Ch, Y(2자리), b, E/Z.
따라서 7세그먼트 표시기는 간단한 메시지를 표시하는 데에만 사용됩니다.

전체적으로 7개 세그먼트 LED 표시기는 128개의 문자를 표시할 수 있습니다.

일반적인 LED 표시기에는 9개의 리드가 있습니다. 하나는 모든 세그먼트의 음극에 연결되고 다른 8개는 각 세그먼트의 양극에 연결됩니다. 이 계획은 "공통 음극 회로", 계획도 있습니다 공통 양극 포함(그러면 그 반대입니다). 종종 하나가 아닌 두 개의 공통 단자가 베이스의 다른 끝에 만들어지므로 치수를 늘리지 않고도 배선이 단순화됩니다. 소위 "보편적"인 것도 있지만 개인적으로 그런 것을 본 적이 없습니다. 또한 시프트 레지스터가 내장된 표시기가 있어 관련된 마이크로컨트롤러 포트 핀의 수를 크게 줄일 수 있지만 훨씬 더 비싸고 실제로는 거의 사용되지 않습니다. 그리고 그 거대함을 파악할 수 없기 때문에 지금은 그러한 지표를 고려하지 않을 것입니다 (그러나 훨씬 더 많은 수의 세그먼트, 매트릭스 지표를 가진 지표도 있습니다).

여러 자리 LED 표시기종종 동적 원리에 따라 작업합니다. 모든 숫자의 동일한 이름 세그먼트의 출력이 함께 연결됩니다. 이러한 표시기에 대한 정보를 표시하려면 제어 마이크로 회로는 모든 숫자의 공통 단자에 주기적으로 전류를 공급해야하며 주어진 세그먼트가 주어진 숫자에서 켜져 있는지 여부에 따라 세그먼트 단자에 전류가 공급됩니다.

한 자리 7세그먼트 표시기를 마이크로컨트롤러에 연결

아래 다이어그램은 방법을 보여줍니다. 한 자리 7세그먼트 표시기가 연결되어 있습니다.마이크로 컨트롤러에.
지표가 다음과 같은 경우를 고려해야합니다. 공통 음극, 공통 출력은 다음과 연결됩니다. "지구", 세그먼트는 공급에 의해 점화됩니다. 논리 유닛포트 출력에.
지표가 다음과 같은 경우 공통 양극, 그런 다음 공통 와이어에 공급됩니다. "을 더한"전압 및 세그먼트는 포트 출력을 상태로 전환하여 점화됩니다. 논리 0.

한 자리 LED 표시기의 표시는 해당 논리 레벨의 해당 숫자의 마이크로 컨트롤러 포트 핀에 이진 코드를 적용하여 수행됩니다 (OK-논리 1 표시기, OA-논리 0 표시기).

전류 제한 저항기다이어그램에 있을 수도 있고 없을 수도 있습니다. 그것은 모두 표시기에 공급되는 공급 전압에 따라 다르며 기술적 인 특성지표. 예를 들어, 세그먼트에 공급되는 전압이 5V이고 작동 전압 2V용으로 설계된 경우 전류 제한 저항기를 설치해야 합니다(공급 전압 증가를 위해 세그먼트를 통한 전류를 제한하고 화상을 입지 않도록). 표시기뿐만 아니라 마이크로컨트롤러 포트도 마찬가지입니다.
할아버지의 공식을 사용하여 전류 제한 저항의 값을 계산하는 것은 매우 쉽습니다. .
예를 들어 표시기의 특성은 다음과 같습니다(데이터시트에서 가져옴).
— 작동 전압 — 2V
— 작동 전류 — 10mA(=0.01A)
— 공급 전압 5V
계산 공식:
R= U/I(이 공식의 모든 값은 옴, 볼트, 암페어 단위여야 함)
R= (공급 전압 - 작동 전압)/작동 전류
R= (5-2)/0.01 = 300옴

여러 자리 7세그먼트 LED 표시기의 연결 다이어그램기본적으로 한 자리 표시기를 연결할 때와 동일합니다. 유일한 것은 표시기의 음극(양극)에 제어 트랜지스터가 추가된다는 것입니다.

다이어그램에는 표시되어 있지 않지만 트랜지스터베이스와 마이크로 컨트롤러 포트 핀 사이에 저항을 포함해야하며 저항은 트랜지스터 유형에 따라 다릅니다 (저항 값은 계산되지만 공칭 값이 5-10kOhm인 저항기를 사용해 볼 수도 있습니다.

방전 표시는 동적으로 수행됩니다.
— 해당 숫자의 바이너리 코드가 첫 번째 숫자에 대한 PB 포트의 출력에 설정된 다음 논리 레벨이 첫 번째 숫자의 제어 트랜지스터에 적용됩니다.
— 해당 숫자의 바이너리 코드가 두 번째 숫자의 PB 포트 출력에 설정된 다음 두 번째 숫자의 제어 트랜지스터에 논리 레벨이 적용됩니다.
— 해당 숫자의 바이너리 코드가 세 번째 숫자에 대한 PB 포트의 출력에 설정된 다음 세 번째 숫자의 제어 트랜지스터에 논리 레벨이 적용됩니다.
- 그래서 서클에서
이 경우 다음 사항을 고려해야 합니다.
— 다음과 같은 지표의 경우 좋아요제어 트랜지스터 구조가 사용됩니다. NPN(논리 유닛으로 제어)
- 표시기의 경우 OA- 구조 트랜지스터 PNP(논리 0으로 제어됨)

무선공학과 전자공학의 출현 이후 피드백전자 장치와 사람에게는 다양한 신호등, 버튼, 토글 스위치, 벨(전자레인지 준비 신호 - 딩!)이 동반되었습니다. 일부 전자 장치는 더 이상 필요하지 않기 때문에 최소한의 정보만 제공합니다. 예를 들어, 중국 휴대폰 충전기의 LED가 켜지면 충전기가 연결되어 있고 전원이 공급되고 있음을 나타냅니다. 그러나 객관적인 정보를 제공하는 것이 더 편리한 매개변수도 있습니다. 예를 들어 외부 기온이나 알람 시계의 시간 등이 있습니다. 예, 이 모든 것은 빛나는 전구나 LED를 사용하여 수행할 수도 있습니다. 1도 - 하나의 연소 다이오드 또는 전구. 학위가 몇 개인지, 표시기가 너무 많이 켜져 있습니다. 반딧불이의 수를 세는 것은 흔한 일이지만 다시 말하지만 10분의 1도의 정확도로 온도를 표시하려면 얼마나 많은 조명이 필요할까요? 그리고 일반적으로 이러한 LED와 전구는 전자 장치에서 어떤 영역을 차지합니까?

실용적인 7세그먼트 디스플레이 장치에는 외부 연결 단자가 8개 이상 있어야 합니다. 그 중 7개는 개별 태양광 발전 세그먼트에 대한 액세스를 제공하고, 8번째는 모든 세그먼트에 대한 공통 연결을 제공합니다. 첫 번째 경우 장치는 7세그먼트 공통 양극 디스플레이로 알려져 있습니다. 후자의 경우 장치는 7세그먼트 공통 음극 디스플레이로 알려져 있습니다.

공통 양극 디스플레이를 구동하려면 드라이버에 액티브 로우 출력이 있어야 합니다. 이 출력은 각 세그먼트 구동이 일반적으로 높지만 세그먼트를 켜기 위해 낮아지게 됩니다. 공통 음극 디스플레이를 구동하려면 드라이버에 활성 활성 출력이 있어야 합니다.

그리고 20세기 초 전자관의 출현과 함께 최초의 가스 방전 표시기가 나타났습니다.

이러한 표시기 덕분에 디지털 정보를 아라비아 숫자로 표시하는 것이 가능해졌습니다. 이전에는 기기 및 기타 전자 장치에 대한 다양한 표시를 만드는 데 사용된 것이 바로 이러한 램프였습니다. 현재 가스 방전 요소는 어느 곳에서도 거의 사용되지 않습니다. 그러나 복고풍은 항상 유행하기 때문에 많은 라디오 아마추어가 자신과 사랑하는 사람을 위해 멋진 가스 방전 시계를 수집합니다.

이에 대한 전체 설명은 다음과 같이 조금 더 복잡합니다. 전압이 0이면 세그먼트가 사실상 보이지 않습니다. 그러나 입력 전압이 상당히 양수 또는 음수이면 세그먼트가 효과적으로 표시되지만 구동 전압이 수백 밀리초 이상 유지되면 세그먼트가 영구적으로 표시되어 더 이상 의미가 없을 수 있습니다.

이러한 조건에서는 세그먼트가 비활성화됩니다. 따라서 해당 세그먼트는 이러한 조건에 포함됩니다. 이러한 형태의 구동은 일반적으로 전압 배가 "브리지 구동" 시스템으로 알려져 있습니다. 계획의 동작 순서는 다음과 같습니다. 앞서 설명한 단순 캐스케이드 시스템은 실제 계수 기간 동안 디스플레이가 흐려지고 각 계수가 완료되고 입력 게이트가 닫혀야 안정적으로 읽을 수 있다는 심각한 결함이 있습니다. 이러한 "흐릿하고 읽기 쉬운" 디스플레이 유형은 보기에 매우 짜증스럽습니다.

가스 방전 램프의 단점 - 많이 먹습니다. 내구성에 대해서는 논쟁이 있을 수 있습니다. 우리 대학에서는 여전히 실험실의 가스 방전기에 주파수 측정기를 사용합니다.

LED의 출현으로 상황은 극적으로 변했습니다. LED 자체는 소량의 전류를 소비합니다. 올바른 위치에 배치하면 모든 정보를 표시할 수 있습니다. 모든 아라비아 숫자를 강조하려면 뭔가 충분했습니다. 일곱 (그래서 이름이 7세그먼트 표시기) 특정 방식으로 배열된 빛나는 LED 스트립:

그림 13은 위의 ​​결함을 극복하기 위해 디스플레이 잠금을 사용하는 향상된 주파수 카운터 회로를 보여줍니다. 이 계획은 다음과 같이 작동합니다. 동시에 입력 게이트가 열리고 카운터가 입력 신호 펄스를 합산하기 시작합니다. 이 카운터는 정확히 1초 동안 지속되며, 이 기간 동안 4비트 래치는 카운터 출력이 디스플레이 드라이버에 도달하는 것을 방지합니다. 이 기간 동안 디스플레이는 안정적으로 유지됩니다.

몇 초 후에 카운터가 재부팅되고 1초 동안 입력 주파수 펄스를 계산하면서 시퀀스가 ​​다시 반복됩니다. 이 기간 동안 디스플레이는 이전 카운트에 대한 연속 판독값을 제공합니다.

거의 모든 7세그먼트 표시기는 8번째 세그먼트(점)를 추가하므로 모든 매개변수의 정수 및 분수 값을 표시할 수 있습니다.

따라서 그림 13의 회로는 초당 한 번씩 업데이트되는 안정적인 디스플레이를 생성합니다. 실제로, 이것의 실제 계산 기간과 그림 12의 다이어그램은 출력 디스플레이가 그에 따라 스케일링되는 경우 몇 초 또는 부분 초로 임의의 10년 단위로 만들 수 있습니다.

3자리 주파수 카운터는 1초 시간축을 사용할 때 999Hz, 100ms 시간축을 사용할 때 99kHz, 10ms 시간축을 사용할 때 9kHz, 999kHz의 최대 주파수를 나타낼 수 있습니다. 1ms 시간축.

이론상으로는 8세그먼트 지표로 나오지만, 옛날 방식으로는 7세그먼트라고도 부르는데, 그 점에는 틀림이 없습니다.

간단히 말해서, 7세그먼트 표시기는 특정 순서로 서로 상대적으로 배치되고 하나의 하우징에 포함된 LED입니다.

이 방법은 그림 14와 15를 통해 이해할 수 있습니다. 이러한 스위치는 함께 연결되어 실제 멀티플렉서 동작을 제공하며 위치 1, 2와 작동 순서를 통해 반복적으로 전환되는 고속 전자 스위치로 간주되어야 합니다. 회로는 다음과 같습니다. 먼저 스위치가 제자리에 있다고 가정해 보겠습니다.

잠시 후 스위치가 위치 3으로 이동하여 몇 분 후에 디스플레이 3에 숫자가 표시되고 전체 주기가 다시 반복되기 시작하여 무한대가 추가됩니다. 실제로 이러한 주기 중 약 50회가 매초 발생하므로 눈에는 디스플레이가 별도로 켜지고 꺼지는 것을 볼 수 없지만 숫자 327 또는 데이터 세그먼트에 의해 지시되는 다른 숫자를 표시하는 명백히 안정된 디스플레이로 인식됩니다.

단일 7개 세그먼트 지표의 다이어그램을 고려하면 다음과 같습니다.

보시다시피, 7개 세그먼트 표시기는 다음 중 하나일 수 있습니다. 공통 양극(CA), 그래서 공통 음극(OC). 대략적으로 말하면, 공통 양극(OA)이 있는 7개의 세그먼트가 있는 경우 회로에서 이 핀에 "플러스"를 걸어야 하고, 공통 음극(OC)이 있는 경우 "마이너스" 또는 접지를 걸어야 합니다. . 어느 핀에 전압을 가하면 이 LED가 켜집니다. 이 모든 것을 실제로 보여드리겠습니다.

실제 멀티플렉서에서는 충분한 디스플레이 밝기를 보장하기 위해 피크 디스플레이 전류가 상당히 높습니다. 그림에서. 그림 15는 3자리 주파수 카운터에 적용된 향상된 다중화 방법의 예를 보여줍니다. 이 방법에는 두 가지 주요 장점이 있습니다.

이러한 터미널이 활성 하이인 경우 다음과 같은 특성을 갖습니다. 무화과. 그림 18은 수량을 읽는 4자리 디스플레이에서 선행 제로 억제를 제공하는 데 사용되는 리플 억제 기술을 보여줍니다.

우리는 다음과 같은 LED 표시기를 보유하고 있습니다.

보시다시피, 7세그먼트 장치는 단일 및 다중 비트, 즉 한 경우에 2, 3, 4개의 7세그먼트 장치일 수 있습니다. 최신 7세그먼트 장치를 확인하려면 다이오드 테스트 기능이 있는 멀티미터만 있으면 됩니다. 우리는 일반적인 결론(OA 또는 OK일 수 있음)을 무작위로 찾고 지표의 모든 세그먼트의 성과를 살펴봅니다. 3비트 7세그먼트를 확인합니다.

그래서 디스플레이가 표시됩니다. 기본적으로 사용하기 쉽고, 전원을 켜고, 불이 켜집니다. 일종의 극성이 있기 때문에 성가실 수 있습니다. 즉, 올바르게 연결한 경우에만 작동합니다. 양극 및 음극 전압을 취소하면 전혀 켜지지 않습니다.

짜증나는 일이지만 꽤 유용하기도 합니다. 다른 전선은 음극입니다. 음극은 접지에 연결됩니다. 기본적으로는 그렇게 될 것입니다. 공통 음극의 경우 켜려는 핀에 전류를 가합니다. 멀티플렉싱. 소프트웨어 전환에 대해 걱정하고 싶지 않다면 이를 위한 디스플레이 컨트롤러도 있습니다.

이런, 한 세그먼트에 불이 붙었기 때문에 같은 방식으로 다른 세그먼트도 확인합니다.

때로는 만화의 전압이 표시기 세그먼트를 확인하기에 충분하지 않은 경우가 있습니다. 따라서 전원 공급 장치를 가져와 5V로 설정하고 전원 공급 장치의 한쪽 단자에 1-2kiloOhm 저항을 연결한 다음 7세그먼트 장치 점검을 ​​시작합니다.

7세그먼트 디스플레이 제어

따라서 4자리 다중화 7세그먼트 공통 양극이 있는 경우입니다. 먼저, 공통 음극과 공통 양극이라는 두 가지 형태가 가능하므로 우리가 가지고 있는 디스플레이 유형을 알아야 합니다. 이 튜토리얼에 필요한 것. 왼쪽: 내부 배선 및 핀 위치에 대한 일반적인 레이아웃을 보여주는 7세그먼트 디스플레이의 그래픽 보기입니다.

이 시점에서는 나중에 프로그램을 로드할 때 필요하므로 초기 출력에 주의하십시오. 디스플레이가 일반 음극이었다면 취소했을 것입니다. 기사 하단에는 내 프로토타입 보드에 있는 회로 사진이 있습니다. 또한 둘 이상의 디스플레이를 제어할 수 있는 라이브러리도 제공합니다.

왜 저항이 필요합니까? LED에 전압이 가해지면 켜질 때 전류가 급격히 소모되기 시작합니다. 따라서 현재로서는 소진될 수 있습니다. 전류를 제한하기 위해 저항이 LED와 직렬로 연결됩니다. 이 기사에서 자세한 내용을 읽을 수 있습니다.

하나의 7세그먼트 디스플레이에서 16진수 계산

단점은 리소스 집약적이라는 것입니다. 이 특정 디스플레이에는 4자리 숫자와 2개의 콜론 디스플레이가 있습니다. 그러나 장치는 또한 다음을 제공합니다. 디지털 제어내부 광대역 변조기를 통해 밝기를 표시합니다. 이러한 경우 여러 개의 7세그먼트 디스플레이에 출력할 수 있습니다.

이렇게 하면 하우징의 접점과 제어 접점이 저장됩니다. 따라서 공통 양극 또는 공통 음극 디스플레이를 지칭합니다. 세그먼트 또는 소수점에 해당하는 출력은 표시용 데이터 시트에서 가장 잘 추출됩니다. 일반적인 10-20mA 등급의 7세그먼트 디스플레이는 비록 희미하긴 하지만 여전히 불이 들어옵니다. 하지만 연락처를 할당할 필요는 없습니다. 이 세그먼트의 다음 분포는 다음을 기반으로 합니다.

같은 방식으로 중국 라디오에서 4자리 7세그먼트를 확인합니다.

여기에는 특별한 어려움이 없어야 한다고 생각합니다. 회로에서는 7개의 세그먼트 회로가 각 핀의 저항기에 연결됩니다. 이는 LED에 전압이 가해지면 전류를 미친 듯이 소모하여 소진되기 때문이기도 합니다.

다른 목적으로 사용하는 경우 원칙적으로는 가능하지만 프로그래밍 시 반드시 고려해야 합니다. 개별 숫자를 특정 출력 패턴으로 변환하는 것은 호출된 것을 사용하여 수행할 수 있습니다. 다른 모든 세그먼트는 어두워야 합니다. 모든 숫자에 대해 이 확인란을 선택하면 다음 표가 제공됩니다.

안에 테스트 프로그램 7세그먼트 디스플레이에 0부터 9까지의 숫자가 순차적으로 표시됩니다. 출력 번호는 레지스터 카운터에 저장되고 사이클 내에서 1씩 증가됩니다. 레지스터 값이 10에 도달하면 다시 0으로 재설정됩니다. 일단 올라가면 다음 릴리스에서 일정 시간이 경과했는지 확인하는 대기 루프가 발생합니다. 일반적으로 이렇게 긴 대기 주기를 수행하지는 않지만 이는 기다리는 것이 아니라 7세그먼트 디스플레이를 제어하는 ​​것입니다. 이를 위해 타이머를 사용하는 것은 너무 많은 노력입니다.

현대 사회에서는 7세그먼트 장치가 이미 완전히 다른 정보를 표시할 수 있는 LCD 표시기로 대체되고 있습니다.

그러나 이를 사용하려면 해당 장치의 회로 설계에 대한 특정 기술이 필요합니다. 지금까지 7세그먼트 LED 표시기보다 간단하거나 저렴한 것은 없습니다.

그러나 실제 문제, 즉 이 기사의 흥미로운 부분은 레이블 루프 바로 다음에 발생합니다. 카운터 값은 두 배가 되어야 합니다. 이는 플래시 메모리가 바이트 단위가 아닌 워드 단위라는 사실과 직접적인 관련이 있습니다. 이 페이지의 두 번째 예는 다르게 수행됩니다. 이는 다른 테이블 항목을 통해 어셈블러가 패딩 바이트 생성을 방지할 수 있는 방법을 보여줍니다. 계산에는 값 0이 포함된 레지스터가 필요하다는 점도 흥미롭습니다.

따라서 이 상수는 먼저 레지스터에 로드되어야 하며 그런 다음에만 이 레지스터를 사용하여 추가를 수행할 수 있습니다. 흥미로운 점은 이 사실이 많은 프로그램에서 발견되며, 대부분의 경우 상수는 상수 0이라는 것입니다. 따라서 많은 프로그래머는 이를 위해 처음부터 레지스터를 예약하고 이를 제로 레지스터라고 부릅니다.

이번 포스팅에서는 디지털 디스플레이에 대해 알아보겠습니다.
7세그먼트 LED 표시기는 0부터 9까지의 아라비아 숫자를 표시하도록 설계되었습니다(그림 1).

이러한 표시기는 하나의 숫자만 표시하는 한 자리 숫자이지만 하나의 하우징(다중 숫자)에 더 많은 7개 세그먼트 그룹이 결합될 수 있습니다. 이 경우 숫자는 소수점으로 구분됩니다(그림 2).

불행히도 디스플레이에는 8개의 포트가 필요하기 때문에 문제가 있습니다. 4개의 광고에는 32개의 포트가 필요합니다. 그러나 여러 가지 방법이 있습니다. 시프트 레지스터는 이미 다른 튜토리얼에서 설명했습니다. 이렇게 하면 단 3개의 핀으로 필요한 32개의 출력 라인을 더 쉽게 생성할 수 있습니다. 제어 원리는 단일 7세그먼트 디스플레이를 구동하는 것과 다르지 않습니다. 단지 "출력 핀"이 해당 값에 접근하는 방식만 다르며 시프트 레지스터를 사용하여 결정됩니다. ~에 이 순간그러나 다른 제어 옵션이 표시되어야 합니다.



그림 2.

표시된 기호가 7개의 개별 세그먼트로 구성되어 있기 때문에 이 표시기를 7세그먼트라고 합니다. 이러한 표시기의 하우징 내부에는 LED가 있으며 각 LED는 자체 세그먼트를 비춥니다.
이러한 표시기에 문자나 기타 기호를 표시하는 것은 문제가 있으므로 이러한 목적으로 16세그먼트 표시기를 사용합니다.

아래에서 다중화에 대해 다시 살펴보겠습니다. 멀티플렉싱은 4개의 디스플레이가 동시에 켜지지 않고 한 번에 하나씩만 켜지는 것을 의미합니다. 짧은 시간. 디스플레이 간의 변화가 인간이 인식할 수 있는 것보다 빠르게 발생하면 짧은 시간 동안 하나만 켜져 있어도 4개의 조명이 모두 동시에 작동하는 것처럼 보입니다. 이러한 방식으로 4개의 디스플레이가 개별 세그먼트 세그먼트를 공유할 수 있으며 필요한 것은 디스플레이가 활성화된 4개의 디스플레이에 대한 4개의 추가 제어 라인뿐입니다.

이러한 제어 유형의 한 가지 측면은 다중화 빈도, 즉 한 디스플레이에서 다른 디스플레이로의 전체 전환 주기입니다. 디스플레이가 깜박이는 것을 방지할 수 있을 만큼 충분히 높아야 합니다. 초당 24프레임의 영화관에서 인간의 눈은 느리고, TV는 안전한 편이고 정지 이미지도 조용하며, 각 세그먼트는 최소 100Hz로 제어되어야 하므로 최소 10ms마다 연결됩니다. 그러나 디스플레이가 빠르게 움직이거나 교류로 작동하는 인공 광원에 간섭이 발생하는 등 예외적인 경우에는 100Hz라도 계속 깜박일 수 있습니다.

LED 표시기는 두 가지 유형으로 제공됩니다.
첫 번째에는 모든 음극, 즉 모든 LED의 음극 단자가 함께 결합되고 해당 단자가 케이스에 할당됩니다.
표시기의 나머지 단자는 각 LED의 양극에 연결됩니다(그림 3, a). 이 회로를 "공통 음극 회로"라고 합니다.
공통 양극이 있는 회로에 따라 각 세그먼트의 LED가 연결된 표시기도 있습니다(그림 3, b).



그림 3.

각 세그먼트는 해당 문자로 지정됩니다. 그림 4는 해당 위치를 보여줍니다.

그림 4.

예를 들어, 두 자리 7세그먼트 표시기 GND-5622As-21 빨간색을 생각해 보세요. 그런데 모델에 따라 다른 색상도 있습니다.
3볼트 배터리를 사용하면 세그먼트를 켤 수 있고, 핀 그룹을 묶음으로 결합하고 전원을 공급하면 숫자도 표시할 수 있습니다. 하지만 이 방식은 불편하기 때문에 7세그먼트 인디케이터를 제어하기 위해 쉬프트 레지스터와 디코더를 사용한다. 또한 표시기 핀은 마이크로 컨트롤러 출력에 직접 연결되는 경우가 많지만 전류 소비가 낮은 표시기가 사용되는 경우에만 해당됩니다. 그림 5는 PIC16F876A를 사용한 회로의 일부를 보여줍니다.



그림 5.

7세그먼트 표시기를 제어하기 위해 K176ID2 디코더가 자주 사용됩니다.
이 칩은 0과 1로 구성된 이진 코드를 0부터 9까지의 십진수로 변환할 수 있습니다.

이 모든 것이 어떻게 작동하는지 이해하려면 간단한 회로를 조립해야 합니다(그림 6). K176ID2 디코더는 DIP16 패키지에 들어 있습니다. 여기에는 7개의 출력 핀(핀 9~15)이 있으며 각 핀은 특정 세그먼트 전용입니다. 여기서는 포인트 제어가 제공되지 않습니다. 또한 마이크로 회로에는 이진 코드를 제공하기 위한 4개의 입력(핀 2~5)이 있습니다. 16번 핀과 8번 핀에는 각각 플러스와 마이너스 전원이 공급됩니다. 나머지 세 가지 결론은 보조적이므로 나중에 이에 대해 이야기하겠습니다.



그림 6.

DD1 - K176ID2
R1 - R4(10 - 100kΩ)
HG1 - GND-5622As-21

회로에는 4개의 토글 스위치(모든 버튼 가능)가 있으며, 이를 누르면 전원 공급 장치 플러스의 디코더 입력에 논리 스위치가 제공됩니다. 그건 그렇고, 마이크로 회로 자체는 3 ~ 15V의 전압으로 전원이 공급됩니다. 이 예에서 전체 회로는 9V 전원 공급 장치로 전원이 공급됩니다.

회로에는 4개의 저항도 있습니다. 이것은 소위 풀업 저항기입니다. 신호가 없을 때 논리 입력이 낮은지 확인하는 데 필요합니다. 그렇지 않으면 표시기의 판독값이 올바르게 표시되지 않을 수 있습니다. 동일하게 사용하는 것이 좋습니다10kOhm ~ 100kOhm의 저항.

다이어그램에서 HG1 표시기의 핀 2와 7은 연결되지 않았습니다. DP 핀을 마이너스 전원에 연결하면 소수점이 켜집니다. Dig.2 출력에 마이너스를 적용하면 세그먼트의 두 번째 그룹도 켜집니다(동일한 기호가 표시됨).

디코더 입력은 표시기에 숫자 1, 2, 4, 8을 표시하기 위해 버튼 하나만 누르면 되도록 설계되었습니다(레이아웃에는 입력 D0, D1, D2 및 D3에 해당하는 토글 스위치가 있습니다). 신호가 없으면 숫자 0이 표시됩니다. 입력 D0에 신호가 인가되면 숫자 1이 표시됩니다. 다른 숫자를 표시하려면 토글 스위치 조합을 눌러야 합니다. 표 1은 우리가 눌러야 할 항목을 알려줍니다.


1 번 테이블.

숫자 "3"을 표시하려면 입력 D0 및 D1에 논리 1을 적용해야 합니다. D0, D2에 신호를 인가하면 숫자 “5”가 표시됩니다.(그림 6).



그림 6.

다음은 예상 수치뿐만 아니라 이 수치를 구성할 세그먼트(a - g)도 볼 수 있는 확장된 테이블입니다.



표 2.

마이크로 회로의 첫 번째, 여섯 번째 및 일곱 번째 핀은 보조 핀입니다(각각 S, M, K).

다이어그램 (그림 6)에서 6 번째 핀 "M"은 접지되어 있으며 (전원 공급 장치 마이너스) 공통 음극이 있는 표시기로 작동하기 위해 마이크로 회로 출력에 양의 전압이 있습니다. 공통 양극이 있는 표시기를 사용하는 경우 6번 핀에 적용해야 합니다.

7번 핀 "K"에 논리 1이 적용되면 표시 기호가 꺼지고 0이 표시를 허용합니다. 계획에서 이 결론접지(전원 공급 장치 마이너스).

디코더의 첫 번째 출력에는 논리 장치(전원 포함)가 공급되어 변환된 코드가 표시기에 표시될 수 있습니다. 그러나 이 핀(S)에 논리 0을 적용하면 입력이 신호 수신을 중단하고 현재 표시된 기호가 표시기에 고정됩니다.

한 가지 흥미로운 점은 토글 스위치 D0이 숫자 "1"을 켜고 토글 스위치 D1이 숫자 "2"를 켠다는 것을 알고 있다는 것입니다. 두 토글 스위치를 모두 누르면 숫자 3이 표시됩니다(1+2=3). 다른 경우에는 이 조합을 구성하는 숫자의 합계가 표시기에 표시됩니다. 우리는 디코더 입력이 신중하게 배열되어 있고 매우 논리적인 조합을 가지고 있다는 결론에 도달했습니다.

이 기사에 대한 비디오를 시청할 수도 있습니다.

7세그먼트 LED 표시기를 Arduino 보드에 연결하고 Led4Digits.h 라이브러리를 사용하여 제어하는 ​​방법을 배워보겠습니다.

이전 강의에서는 마이크로 컨트롤러에 대해 자세히 설명했습니다. 이러한 표시기를 Arduino 보드에 연결해 보겠습니다.

표시기를 Arduino 보드에 연결하는 다이어그램은 다음과 같습니다.

회로 기판에 조립했습니다.

표시기를 관리하기 위해 Led4Digits.h 라이브러리를 작성했습니다.

그리고 지불하십시오.

라이브러리를 사용하면 7개 세그먼트 표시기를 관리할 수 있습니다.

  • 최대 4자리 크기;
  • 제어 펄스 극성의 모든 변형(모두);
  • 병렬 프로세스로 작동합니다.
  • 표시기에 다음을 표시할 수 있습니다.
    • 각 카테고리의 세그먼트;
    • 각 숫자의 숫자;
    • 정수 0 ... 9999;
  • 정수를 출력하려면 자릿수를 지정할 수 있습니다.
  • 중요하지 않은 숫자를 억제하는 모드가 있습니다.

다음 링크에서 Led4Digits.h 라이브러리를 다운로드할 수 있습니다.

그리고 지불하십시오. 단지 40 문지름. 매달 모든 사이트 리소스에 액세스할 수 있습니다!

설치방법은 에 적혀있습니다.

원문은 제공하지 않겠습니다. 라이브러리 파일에서 찾아볼 수 있습니다. 언제나 그렇듯 댓글이 많이 달리네요. 라이브러리 사용법을 예시와 함께 자세히 설명하겠습니다.

Arduino Led4Digits용 LED 제어 라이브러리.

다음은 수업 설명입니다. 공개 메서드와 속성만 제공했습니다.

클래스 Led4Digits(
공공의:
바이트 숫자; // 비트 세그먼트 제어 코드
무효 재생(); // 재생성하려면 메서드를 정기적으로 호출해야 합니다.
void tetradToSegCod(byte dig, byte tetrad); // 테트라드를 세그먼트 코드로 변환
부울 인쇄(부호 없는 정수 값, 바이트 숫자, 공백 바이트); // 정수 출력



} ;

건설자.

Led4Digits(바이트 typeLed, 바이트 digitPin0, 바이트 digitPin1, 바이트 digitPin2, 바이트 digitPin3,
바이트 segPinA, 바이트 segPinB, 바이트 segPinC, 바이트 segPinD,
바이트 segPinE, 바이트 segPinF, 바이트 segPinG, 바이트 segPinH);

유형Led비트 및 세그먼트 선택 신호에 대한 제어 펄스 극성을 설정합니다. 모든 연결 방식을 지원합니다().

유형Led 카테고리 선택 세그먼트 선택 회로 종류
0 -_- -_- 방전 선택 키가 있는 공통 양극
1 _-_ -_- 공통 양극
2 -_- _-_ 공통 음극
3 _-_ _-_ 방전 선택 키가 있는 공통 음극

숫자핀0...숫자핀3– 숫자 선택을 위한 출력. digitPin = 255이면 숫자가 비활성화됩니다. 이를 통해 더 적은 자릿수로 표시기를 연결할 수 있습니다. digitPin0 – 낮은(오른쪽) 숫자.

세그핀A...세그핀H– 세그먼트 제어 출력.

예를 들어,

의미: 표시 유형 1; 방전 출력 5,4,3,2; 세그먼트 6,7,8,9,10,11,12,13의 출력.

무효 regen() 메소드

이 메서드는 병렬 프로세스에서 정기적으로 호출되어야 합니다. 표시기의 이미지를 재생성합니다. 재생성 주기 시간은 메서드 호출 주기에 비트 수를 곱한 것과 같습니다.

예를 들어,

// 인터럽트 핸들러 2ms
무효 타이머인터럽트() (
disp.regen(); // 지표 재생성
}

바이트 숫자 배열

세그먼트의 상태를 포함합니다. 숫자는 최하위 비트이고 숫자의 최하위 비트는 최하위 비트의 "A" 세그먼트입니다. 비트 상태 1은 세그먼트가 켜져 있음을 의미합니다.

예를 들어,

숫자 = B0000101;

는 두 번째 숫자에서 세그먼트 "A"와 "C"가 켜져 있음을 의미합니다.

각 숫자의 모든 세그먼트를 순차적으로 켜는 프로그램의 예입니다.

// 실행 중인 세그먼트
#포함하다
#포함하다

//
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

무효 설정() (
타이머 인터럽트 2ms
MsTimer2::start(); // 인터럽트 활성화
}

무효 루프() (
for (int i = 0; i< 32; i++) {
if (i == 0) disp.digit= 1;
else if (i == 8) disp.digit= 1;
else if (i == 16) disp.digit= 1;
else if (i == 24) disp.digit= 1;
또 다른(
disp.digit = disp.digit<< 1;
disp.digit = disp.digit<< 1;
disp.digit = disp.digit<< 1;
disp.digit = disp.digit<< 1;
}
지연(250);
}
}

//인터럽트 핸들러 2ms
무효 타이머인터럽트() (
disp.regen(); // 지표 재생성
}

숫자 배열에서는 1이 이동되고 표시기에 이를 표시합니다.

메소드 void tetradToSegCod(byte dig, byte tetrad)

이 방법을 사용하면 숫자와 16진수 코드 문자를 개별 숫자로 표시할 수 있습니다. 인수가 있습니다:

  • 발굴 – 숫자 0 ... 3;
  • tetrad – 십진수 문자 코드. 코드 0은 숫자 "0", 코드 1 - 숫자 "1", 코드 14 - 문자 "E"를 표시합니다.

예를 들어,

테트라드(2, 7);

세 번째 자리에는 숫자 "7"이 표시됩니다.

각 숫자의 문자를 차례로 변경하는 프로그램의 예입니다.

// 숫자를 하나씩
#포함하다
#포함하다

// 표시 유형 1; 방전 출력 5,4,3,2; 세그먼트 출력 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

무효 설정() (
MsTimer2::set(2,timerInterrupt); // 타이머 인터럽트 2ms
MsTimer2::start(); // 인터럽트 활성화
}

무효 루프() (
for (int i = 0; i< 64; i++) {
disp.tetradToSegCod(i>>4, i);
지연(250);
}
}

// 인터럽트 핸들러 2ms
무효 타이머인터럽트() (
disp.regen(); // 지표 재생성
}

메소드 부울 인쇄(부호 없는 int 값, 바이트 digitNum, 바이트 공백)

이 메서드는 표시기에 정수를 표시합니다. 각 숫자에 대해 이진수를 BCD로 변환합니다. 인수가 있습니다:

  • 값 - 표시기에 표시되는 숫자입니다.
  • digitNum – 숫자의 자릿수입니다. 이를 표시 자릿수와 혼동해서는 안 됩니다. 두 자리 숫자에 숫자를 표시하고 숫자를 사용하여 나머지 두 자리에 문자를 표시할 수 있습니다.
  • 공백 - 중요하지 않은 숫자를 억제하는 표시입니다. 공백=0은 숫자가 모두 0으로 표시되어야 함을 의미합니다. 숫자 "7"은 "0007"처럼 보입니다. 공백이 0이 아닌 경우 중요하지 않은 0은 표시되지 않습니다.

숫자 값이 선택한 자릿수(digitNum)에 허용되는 숫자를 초과하는 경우 함수는 표시기에 "---"를 표시하고 false를 반환합니다.

숫자 출력 프로그램의 예.

// 숫자 출력
#포함하다
#포함하다

// 표시 유형 1; 방전 출력 5,4,3,2; 세그먼트 출력 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

무효 설정() (
MsTimer2::set(2,timerInterrupt); // 타이머 인터럽트 2ms
MsTimer2::start(); // 인터럽트 활성화
}

무효 루프() (
for (int i = 0; i< 12000; i++) {
disp.print(i, 4, 1);
지연(50);
}
}

// 인터럽트 핸들러 2ms
무효 타이머인터럽트() (
disp.regen(); // 지표 재생성
}

마지막 두 가지 방법은 소수점인 "H" 세그먼트의 상태를 변경하지 않습니다. 포인트의 상태를 변경하려면 다음 명령을 사용할 수 있습니다.

숫자 |= 0x80; // 소수점을 밝히다
숫자 &= 0x7f; // 소수점을 없애다

음수 표시기(int)로 출력됩니다.

음수는 다음과 같이 출력될 수 있습니다:

  • 번호의 부호를 확인하세요.
  • 숫자가 음수이면 가장 중요한 숫자에 빼기 기호를 인쇄하고 print() 함수에서 숫자 기호를 양수로 변경합니다.
  • 숫자가 양수이면 부호 비트를 끄고 print() 함수를 사용하여 숫자를 인쇄합니다.

다음은 이 방법을 보여주는 프로그램입니다. -999부터 999까지의 숫자를 출력합니다.

// 음수를 출력하다
#포함하다
#포함하다

// 표시 유형 1; 방전 출력 5,4,3,2; 세그먼트 출력 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

무효 설정() (
MsTimer2::set(2,timerInterrupt); // 타이머 인터럽트 2ms
MsTimer2::start(); // 인터럽트 활성화
}

무효 루프() (

for (int i = -999; i< 1000; i++) {

만약 내가< 0) {
// 숫자가 음수입니다
disp.digit= B01000000; // 징후 -
disp.print(i * -1, 3, 1);
}
또 다른(
disp.digit= B00000000; // 기호 지우기
disp.print(i, 3, 1);
}

지연(50);
}
}

// 인터럽트 핸들러 2ms
무효 타이머인터럽트() (
disp.regen(); // 지표 재생성
}

분수 표시기, 부동 소수점 형식으로 출력합니다.

표준 C 언어 함수를 사용하여 부동 소수점 숫자(float)를 표시하는 방법에는 여러 가지가 있는데, 우선 sprint() 함수가 그것입니다. 매우 느리게 작동하고 문자 코드를 이진 십진 코드로 추가 변환해야 하며 문자열에서 점을 추출해야 합니다. 다른 기능에서도 동일한 문제가 발생합니다.

나는 인디케이터에 float 변수의 값을 표시하기 위해 다른 방법을 사용합니다. 이 방법은 간단하고 안정적이며 빠릅니다. 다음 작업으로 축소됩니다.

  • 부동 소수점 숫자에 필요한 소수 자릿수에 해당하는 거듭제곱에 10을 곱합니다. 표시기에 소수점 1자리를 표시하려면 10을 곱하고, 2이면 100을 곱하고, 소수점 3자리에 1000을 곱합니다.
  • 다음으로 부동 소수점 숫자는 명시적으로 정수(int)로 변환되고 print() 함수를 사용하여 표시기에 표시됩니다.
  • 필요한 숫자에 점이 표시됩니다.

예를 들어, 다음 줄은 7세그먼트 LED에 소수점 이하 두 자리의 부동 변수를 출력합니다.

부동 소수점 x = 2.12345;

disp.digit |= 0x80; //

숫자에 100을 곱하고 세 번째 숫자에 점을 찍어 결과를 100으로 나눕니다.

다음은 표시기에 0.00부터 99.99까지의 부동 소수점 숫자를 표시하는 프로그램입니다.

// 부동 소수점 출력
#포함하다
#포함하다

// 표시 유형 1; 방전 출력 5,4,3,2; 세그먼트 출력 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

무효 설정() (
MsTimer2::set(2,timerInterrupt); // 타이머 인터럽트 2ms
MsTimer2::start(); // 인터럽트 활성화
}

무효 루프() (
부동 x = 0;

for (int i = 0; i< 10000; i++) {
x += 0.01;

disp.print((int)(x * 100.), 4, 1);
disp.digit |= 0x80; // 세 번째 레벨 지점을 밝혀주세요

지연(50);
}
}

//인터럽트 핸들러 2ms
무효 타이머인터럽트() (
disp.regen(); // 지표 재생성
}

보시다시피 Led4Digits.h 라이브러리는 Arduino 보드에 연결된 7세그먼트 LED(발광 다이오드) 표시기 작업을 크게 단순화합니다. 나는 그러한 라이브러리와 유사한 것을 찾지 못했습니다.

시프트 레지스터를 통해 LED 디스플레이 작업을 위한 라이브러리가 있습니다. 누군가 Arduino 보드에 직접 연결된 LED 디스플레이와 작동하는 라이브러리를 찾았다고 나에게 편지를 보냈습니다. 하지만 사용시에는 표시 숫자가 고르지 않게 빛나고 윙크합니다.

유사한 것과 달리 Led4Digits.h 라이브러리는 다음과 같습니다.

  • 병렬 프로세스로 실행됩니다. 메인 루프에서 프로그램은 디스플레이에 자동으로 표시되는 특정 변수에 데이터를 로드합니다. 정보 출력 및 표시기 재생성은 기본 프로그램에 보이지 않는 타이머 인터럽트에서 발생합니다.
  • 디스플레이 숫자가 깜박이지 않고 고르게 빛납니다. 이 속성은 타이머 인터럽트에 의해 엄격하게 정의된 주기에서 재생이 발생한다는 사실로 보장됩니다.
  • 라이브러리에는 컴팩트한 코드가 있고 빠르게 실행되며 컨트롤러를 최소한으로 로드합니다.

다음 강의에서는 LED 표시기와 버튼 매트릭스를 Arduino 보드에 동시에 연결하겠습니다. 그러한 디자인을 위한 라이브러리를 작성해 봅시다.

범주: . 북마크할 수 있습니다.


맨 위