Категории
Самые читаемые
onlinekniga.com » Компьютеры и Интернет » Программирование » Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт

Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт

Читать онлайн Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 83 84 85 86 87 88 89 90 91 ... 150
Перейти на страницу:

/*----------------------------------------------------------------------*/

/*filename: debounced_swith.c                                           */

/*осуществляет опрос 8 переключателей с программной защитой от дребезга */

/*выполняет специальные действия для каждого нажатого переключателя     */

/*зажигает зеленый светодиод в разряде активизированного переключателя  */

/*----------------------------------------------------------------------*/

/*подключаемые файлы*/

#include <912b32.h>

/*используемые функции*/

int process_valid_input(unsigned char input_value); //управление

                                                    //процессом опроса в реальном времени

void initialize_ports(void); //инициализация портов

void timer_init(void); //инициализация таймера

//глобальные переменные

int keep_going=1; //переменная цикла

unsigned char old_PORTB= 0xff; //предыдущее значение порта PORTB

unsigned char new_PORTB; //новое значение порта PORTB

void main{void) {

 initialize_ports();

 timer_init();

 while(keep_going) {

  new_PORTB=PORTB; //читать порт PORTB

  if (new_PORTB != old_PORTB) {

   //выполнять, если значение порта изменилось

   swith(new_PORTB) {

   case 0xFE: //переключатель PB0

    if (process_valid_input(new_PORTB)) //процедура

                                        //антидребезга

    { //выполнять действия, связанные

     : //с нажатием клавиши PB0

     :

     PORTC = 0х01;//зажечь зеленый в разряде PB0

     keep_going = 1;

    }

    break;

   case 0xFD: // переключатель PB01

    if (process_valid_input(new_PORTB)) // процедура

                                        // антидребезга

    { //выполнять действия, связанные

     : //с нажатием клавиши PB1

     PORTC = 0х02; //зажечь зеленый в разряде PB1

     keep_going = 1;

    }

    break;

   case 0x7F: // переключатель PB7

    if (process_valid_input(new_PORTB)) // процедура

                                        //антидребезга

    { //выполнять действия, связанные

     : //с нажатием клавиши PB7

     PORTC = 0х80; //зажечь зеленый в разряде PB7

     keep_going = 1;

    }

    break;

   default:

    ; //аll other cases

   } //окончание распозвания, какая клавиша нажата (switch(new_PORTB))

  } //окончание обработки нажатой клавиши (if new_PORTB)

  old_PORTB = new_PORTB; //обновить PORTB

 } //окончание (while(keep_going))

} //окончание (main)

/*-----------------------------------------------------------------*/

/* Функция void initialize_ports устанавливает режим работы портов */

/*-----------------------------------------------------------------*/

void initialize_ports(void) {

 DDRC=0xff; //порт PORTC на вывод

 PORTC=0x00; //выходы порта PORTC в 0, зажгутся красные светодиоды

 DDRB=0x00; //порт PORTB на ввод

}

/*--------------------------------------------------------------------*/

/* process_valid_input: проверка стабильности PORTB в течение периода */

/* переполнения таймера                                               */

/*--------------------------------------------------------------------*/

int process_valid_input(unsigned char portx) {

 int valid_input; //флаг результата опроса порта

 int int_value; //время входа в процедуру

 valid_input = TRUE; //установить флаг

 int_value = TCNT; //читать текущий момент времени

 while (int_value != TCNT) //повторять пока значения времени снова не

                           //сравняются

 {

  if (portx==PORTB) //порт PORTB остается стабильным

   valid_input = TRUE;

  else //порт PORTB изменил состояние

   valid_input = FALSE;

  if (!valid_input) //если порт изменил состояние, то выйти

                    //из цикла

   break;

 }

 return valid_input;

}

/*------------------------------------------------------------------------*/

/* Функция timer_init инициализирует таймер. Частота системной шины равна */

/*8*МГц                                                                   */

/*------------------------------------------------------------------------*/

void timer_init(void) {

 TMSK1 = 0х00; //запретить прерывания

 TMSK2 = 0х02; //частота тактировании 2 МГц

 TSCR = 0х80; //разрешить работу модуля таймера

}

/*-------------------------------------------------------------------------*/

5.6. Жидкокристаллические индикаторы

В этом разделе мы подробно рассмотрим, как подключить жидкокристаллический индикатор к МК 68HC12. Мы начнем с краткого обзора принципа действия ЖК индикаторов. Далее изучим реальный однострочный символьный индикатор на 16 знакомест со встроенным контроллером управления. Рассмотрим, как выполнить аппаратное подключение этого индикатора к МК, а затем приведем пример программы управления.

5.6.1. Краткие сведения о жидкокристаллических индикаторах

Жидкокристаллический индикатор — почти идеальное устройство отображения информации. Этот тип индикаторов использует для своей работы те же напряжения, что и микроконтроллеры, но при этом потребляет энергию на несколько порядков меньшую, чем светодиодные индикаторы. Именно поэтому жидкокристаллические (далее ЖК) индикаторы нашли чрезвычайно широкое применение в переносных устройствах с автономным питанием. В электронных часах, калькуляторах и стационарных телефонах принято использовать монохромные ЖК индикаторы, в то время как современные мобильные телефоны, фотоаппараты и видеокамеры немыслимы без малогабаритного цветного ЖК-дисплея. По способу отображения информации ЖК индикаторы также подразделяются на цифро-буквенные и графические.

Для понимания технологических особенностей создания современных ЖК индикаторов и дисплеев следует коротко остановиться на основных свойствах жидких кристаллов. Жидкие кристаллы представляют собой почти прозрачные субстанции, проявляющие одновременно свойства кристалла и жидкости. Есть две главные особенности жидких кристаллов, благодаря которым возможно создание на их основе устройств отображения информации: способность молекул жидких кристаллов переориентироваться во внешнем электрическом поле и изменять поляризацию светового потока, проходящего через их слои.

Основой ЖК индикатора являются две параллельные стеклянные пластины с нанесенными на них поляризационными пленками. Различают верхний и нижний поляризаторы, сориентированные перпендикулярно друг другу. На стеклянные пластины в тех местах, где в дальнейшем будет формироваться изображение, наносится прозрачная металлическая окисная пленка, которая в дальнейшем служит электродами. На внутреннюю поверхность стекол и электроды наносятся полимерные выравнивающие слои, которые затем полируются, что способствует появлению на их поверхности, соприкасающейся с жидкими кристаллами, микроскопических продольных канавок. Пространство между выравнивающими слоями заполняют жидкокристаллическим веществом. В результате молекулы жидких кристаллов выстраиваются в направлении полировки полимерного слоя. Направления полировки верхнего и нижнего слоев полимера перпендикулярны (подобно ориентации поляризаторов). Это нужно для предварительного "скручивания" слоев молекул жидких кристаллов между стеклами на 90°. Когда напряжение на управляющие электроды не подано, поток света, пройдя через нижний поляризатор, двигается через слои жидких кристаллов, которые плавно меняют его поляризацию, поворачивая её на угол 90°. В результате поток света после выхода из ЖК материала беспрепятственно проходит через верхний поляризатор (сориентированный перпендикулярно нижнему) и попадает к наблюдателю. Никакого формирования изображения не происходит. При подаче напряжения на электроды между ними создается электрическое поле, что вызывает переориентацию молекул жидких кристаллов. Молекулы стремятся выстроиться вдоль силовых линий поля в направлении от одного электрода к другому. Вследствие этого пропадает эффект «скручивания» поляризованного света, под электродом возникает область тени, повторяющая его контуры. Создается изображение, формируемое светлой фоновой областью и темной областью под включенным электродом. Путем варьирования контуров площади, занимаемой электродом, можно формировать самые различные изображения: буквы, цифры, иконки и пр. Так создаются символьные ЖКИ. А при создании массива электродов (ортогональной матрицы) можно получить графический ЖКИ с разрешением, определяемым количеством задействованных электродов

1 ... 83 84 85 86 87 88 89 90 91 ... 150
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт.
Комментарии