Читайте также:
|
|
Для отображения цифровой и буквенной информации в микроконтроллерных системах широко используются семисегментные индикаторы, которые бывают светодиодные, вакуумно-люминесцентные, жидкокристаллические, вакуумно-накаливаемые, газоразрядные. Наибольшее распространение получили семисегментные светодиодные индикаторы (ССДИ) ввиду большой яркости, малыми габаритами, способности работать в широком диапазоне температур, механической прочности. На рис. 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 | Сим- Вол |
… | … | … | … | … | … | … | … | 3F … 6F | … |
Таблица семисегментных кодов обычно хранится в памяти программ.
Для отображения многосимвольной информации используются линейные (однострочные) дисплеи. Такие дисплеи представляют собой “линейку”, смонтированную из отдельных ССДИ. Число знакомест (позиций или разрядов) дисплея определяется в соответствии с требованиями к МКС.
Существует два способа организации МК с линейными дисплеями: статический и динамический (мультиплексный).
Первый требует наличие на входах каждого индикатора специальных буферных регистров для хранения кодов выводимых символов. Естественно, что с увеличением разрядности дисплея возрастает число дополнительных микросхем, а, следовательно, и стоимости МКС.
Второй способ (динамический) основан на том, что любой световой индикатор является инерционным прибором, а человеческому глазу отображаемая на дисплее информация, если ее обновлять с частотой не менее 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;
} }
Дата добавления: 2015-12-07; просмотров: 229 | Нарушение авторских прав