Для отображения символьной информации (буквенно-цифровой) часто используются знакосинтезирующие индикаторы – светодиодные или жидкокристаллические. Семисегментный индикатор, как говорит его название, состоит из семи элементов индикации (сегментов), включающихся и выключающихся по отдельности. Включая их в разных комбинациях, из них можно составить упрощённые изображения арабских цифр. На 7-сегментном индикаторе отображают также некоторые буквы. Основные сегменты индикатора обозначаются буквами от A до G; восьмой сегмент — десятичная точка (decimal point, DP), предназначенная для отображения дробных чисел – буквой H. Для подключения индикаторов используют передачу данных в последовательном коде.
Прием последовательной информации от порта микроконтроллера и преобразование ее в параллельный двоичный код обычно осуществляется с помощью регистра сдвига. Регистр сдвига – регистр, обеспечивающий помимо хранения информации, сдвиг влево или вправо всех разрядов одновременно на одинаковое число позиций.
Задание на лабораторную:
1. Написать, отладить и протестировать программу приема одного символа из последовательного порта. Для каждого принятого символа записывать в последовательный порт:
· количество принятых байт в буфере приемника,
· принятый символ,
· десятичный ASCII-код символа,
· шестнадцатиричный ASCII-код символа.
Передаваемая в порт информация должна сопровождаться поясняющими надписями.
int incomingByte = 0; // переменная для хранения полученного байта
void setup() {
Serial.begin(9600); // устанавливаем последовательное соединение
}
void loop() {
if (Serial.available() > 0) { //если есть доступные данные
// считываем байт
incomingByte = Serial.read();
Serial.print("Byte count: ");
Serial.println(Serial.available()+1, DEC);
// отсылаем то, что получили
Serial.print("I received: ");
Serial.write(incomingByte);
Serial.println("");
Serial.println(incomingByte, DEC); //десятичный код
Serial.println(incomingByte, HEX);
}
}
2. Написать, отладить и протестировать программу отображения на светодиодном 7-сегментном индикаторе последовательно 20 символов – цифр от 0 до 9 и их же в комбинации с десятичной точкой в бесконечном цикле. Смена символа должна сопровождаться изменением свечения красного и зеленого светодиодов.
#define RED RED_LED
#define GREEN GREEN_LED
int i=0;
int dg[20] =
{
252, //0 11111100
96, //1 01100000
218, //2 11011010
242, //3 11110010
102, //4 01100110
182, //5 10110110
190, //6 10111110
224, //7 11100000
254, //8 11111100
246, //9 11110110
//1 //dp 00000001
253, //0 11111100
97, //1 01100000
219, //2 11011010
243, //3 11110010
103, //4 01100110
183, //5 10110110
191, //6 10111110
225, //7 11100000
255, //8 11111100
247, //9 11110110
//1 //dp 00000001
};
void setup()
{
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
}
void blink()
{
digitalWrite (RED, HIGH);
digitalWrite (GREEN, LOW);
delay (500);
digitalWrite (RED, LOW);
digitalWrite (GREEN, HIGH);
delay (500);
}
void loop()
{
blink();
shiftOut(12, 11, LSBFIRST, dg[i]);
delay(1000);
i++;
if (i==20) i=0;
}
3. Написать, отладить и протестировать программу измерения температуры с помощью встроенного в микроконтроллер датчика. Программа должны работать по алгоритму демонстрационной программы, приведенному в разделе 3.3, и выдавать в COM-порт значения метки времени, текущего измерения температуры, среднего значения температуры по 5 измерениям в градусах Цельсия, Кельвина и Фаренгейта. Кроме того, на светодиодный 7-сегментный индикатор должны последовательно выдаваться значения разрядов десятков и единиц градусов Цельсия.
#define NUMBER 5 // константа – размер массива
int dg[20] =
{
252, //0 11111100
96, //1 01100000
218, //2 11011010
242, //3 11110010
102, //4 01100110
182, //5 10110110
190, //6 10111110
224, //7 11100000
254, //8 11111100
246, //9 11110110
//1 //dp 00000001
253, //0 11111100
97, //1 01100000
219, //2 11011010
243, //3 11110010
103, //4 01100110
183, //5 10110110
191, //6 10111110
225, //7 11100000
255, //8 11111100
247, //9 11110110
//1 //dp 00000001
};
int numberLED=0;
int ledState = HIGH; // статус светодиодов
uint8_t i = 0; // целочисленная переменная, представленная без знака в 1 байте
uint32_t average = 0; // беззнаковое целое в 4 байтах – накопленная сумма,
Вывод: в ходе лабораторной работы нами были изучены основные средства микроконтроллера MSP430 для обмена данными по последовательному интерфейсу, выводы символьной информации на знакосинтезирующий индикатор, измерения и отображения температуры с помощью встроенного температурного датчика. Так же были изучены основные приемы программирования микроконтроллера MSP430 для обмена данными по последовательному интерфейсу, отображения символьной информации и измерения температуры.