Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МПТ 2013 ШПОРЫ.docx
Скачиваний:
296
Добавлен:
15.04.2015
Размер:
669.17 Кб
Скачать

20. Динамическое управление линейным дисплеем на семисегментных индикаторах в pic-микроконтроллерах.

Для отображения цифровой и буквенной информации в микроконтроллерных системах широко используются семисегментные индикаторы, которые бывают светодиодные, вакуумно-люминесцентные, жидкокристаллические, вакуумно-накаливаемые, газоразрядные. Наибольшее распространение получили семисегментные светодиодные индикаторы (ССДИ) ввиду большой яркости, малыми габаритами, способности работать в широком диапазоне температур, механической прочности. На рис. 1,а показано расположение и обозначение сегментов ССДИ. Семь отображающих элементов позволяют высвечивать десятичные и шестнадцатиричные цифры, некоторые буквы латинского и русского алфавитов, а также некоторые специальные знаки. При формировании, например, цифры 3 будут подсвечиваться сегменты a, b, c, d и g, а сегменты e и f останутся темными. При формировании буквы F будут подсвечиваться сегменты a, e, f и g, а темными останутся сегменты b, c и d.

По способу соединения отдельных светодиодов в ССДИ различают индикаторы с общими катодами (ОК) и с общими анодами (ОА). Их схемы внутренних соединений показаны на рис. 1,б, в. На рис. 1,г приведено условное графическое изображение ССДИ.

Рис. 1. Семисегментный светодиодный индикатор: а) - условное обозначение сегментов; б) индикатор с общими катодами (ОК); в) индикатор с общими анодами (ОА); г) условное графическое обозначение на схемах

При формировании символов в ССДИ требуются специальные семисегментные коды, которые отличаются от обычных позиционных двоичных кодов, используемых в МК. Для получения семисегментных кодов могут быть применены два метода:

  1. аппаратурный;

  2. программный.

Аппаратурный метод основан на использовании специальных микросхем преобразователей кодов, которые преобразуют двоичный позиционный код в семисегментный. В качестве таких преобразователей наиболее широко применяются микросхемы КР514ИД1 и КР514ИД2, которые обычно называют дешифраторами кода.

Микросхема КР514ИД1 используется для индикаторов с ОК, а КР514ИД2 – для индикаторов с ОА. Недостатком этих дешифраторов является то, что они позволяют получить только семисегментные коды десятичных цифр от 0 до 9. При этом на их входы должен подаваться двоично-десятичный код.

Программный метод получения семисегментного кода основан на том, что каждому сегменту индикатора поставлен в соответствие определенный бит D7, D6,…, D0 байта. Для индикаторов с ОК принято, что если этот бит равен 1, то сегмент светится. Определенные комбинации единичных значений битов формируют на индикаторе отображаемый символ, как это приведено в табл. 1.

Семисегментные коды для отображения символов от 0 до 9 для индикаторов с ОК

D7 h

D6 g

D5 f

D4 e

D3 d

D2 c

D1 b

D0

a

HEX

Сим-

Вол

0

0

0

0

0

1

1

0

1

1

0

0

1

0

1

1

1

1

1

1

1

1

0

1

3F

06

6F

0

1

9

Таблица семисегментных кодов обычно хранится в памяти программ.

Для отображения многосимвольной информации используются линейные (однострочные) дисплеи. Такие дисплеи представляют собой “линейку”, смонтированную из отдельных ССДИ. Число знакомест (позиций или разрядов) дисплея определяется в соответствии с требованиями к МКС.

Существует два способа организации МК с линейными дисплеями: статический и динамический (мультиплексный).

Первый требует наличие на входах каждого индикатора специальных буферных регистров для хранения кодов выводимых символов. Естественно, что с увеличением разрядности дисплея возрастает число дополнительных микросхем, а, следовательно, и стоимости МКС.

Второй способ (динамический) основан на том, что любой световой индикатор является инерционным прибором, а человеческому глазу отображаемая на дисплее информация, если ее обновлять с частотой не менее 20 раз в секунду, представляется неизменной. Динамический способ вывода информации на дисплей требует значительно меньших аппаратных затрат, но более сложного программного обеспечения.

rom near char table[ ] =

{

0x3F, 0x06, 0x5B,0x4F, 0x66, 0x6D,0x7D,0x07, 0x7F, 0x6F,

};

char count; // переменная-счетчик

void main(void)

{

char select; // код для выбора индикатора (его включения)

char a; // переменная-счетчик индикаторов дисплея

PORTB = 0xFF;

TRISB = 0; // настроить порт В на вывод

PORTC = 0;

TRISC = 0; // настроить порт С на вывод

count = 0;

while( 1 ) // бесконечный цикл вывода на дисплей

{

/* вывод цифр одновременно на все индикаторы дисплея */

POTRB = 0xFF; // гашение дисплея

PORTC = table[ count ]; // вывод на сегменты индикаторов

PORTB &= 0b11110000; // включение индикаторов дисплея

Delay10KTCYx(50); // задержка на 0,5 секунды

/* вывод цифр поочередно на индикаторы дисплея*/

select = 0b11111110; // код для выбора 1-го индикатора

for ( a = 0; a < 4; a++)

{

POTRB = 0xFF; // гашение дисплея

PORTC = table[ count ]; // вывод на сегменты индикаторов

PORTB = select; // включение индикатора

select = (select << 1) | 0b00000001; // сдвиг кода влево и вставка 1 в младший разряд

Delay10KTCYx(50); // задержка на 0,5 секунды

}

count++; // следующая цифра для вывода

if( count >= 10 )

count = 0;

} }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]