Доброго времени суток! Собрал схему работы семисегментного светодиодного индикатора с общим катодом через сдвиговый регистр. Принцип работы сл.: сначала индикатор отображает цифры от 0 до F, затем он отображает эти же цифры, только с точкой на индикаторе (DP). Я не понимаю, как он в первом цикле for отображал без точки, а во втором с точкой, хотя отличие только в том, что к массиву digits в shiftOut +1. Вот код: #define DATA 6 //к выводу 14 микросхемы 74 #define LATCH 8 //К выводу 12 микросхемы 74 #define CLOCK 10 //К выводу 11 микросхемы 74 //Подготовить массив с комбинациями сегментов //для цифр 0-9 и букв A-F из матрицы int digits[]={252, 96, 218, 242,102,182,190,224,254,246,238,62,156,122,158,142}; void setup() { pinMode(LATCH,OUTPUT); pinMode(CLOCK,OUTPUT); pinMode(DATA,OUTPUT); } void loop() { int i; for(i=0;i<16;i++) { digitalWrite(LATCH,LOW); shiftOut(DATA,CLOCK,LSBFIRST,digits); digitalWrite(LATCH,HIGH); delay(1000); } for(i=0;i<16;i++) { digitalWrite(LATCH,LOW); shiftOut(DATA,CLOCK,LSBFIRST,digits+1);//+1 чтобы вкл. точку digitalWrite (LATCH,HIGH); delay(1000); } }
Если присмотреться, то можно заметить, что все числа в массиве digits чётные. Т.е. младший бит равен '0'. Прибавляя единицу во втором цикле, мы делаем числа нечётными -- младший бит равен '1', а остальные биты остаются прежними. Этот самый младший бит и отвечает за отображение точки.