Untitled
user_6406267
c_cpp
4 months ago
2.4 kB
6
Indexable
//Q7-A, Q6-B,...Q0-HЛістинг програми SHIFT //SC and RC - D7, SER-D6, SHIFT-VCC, OE-GND, Button-A0 #define button A0 // shift register pin definitions #define latchPin 8 #define clockPin 7 // clock pin #define dataPin 6 // data pin // common pins of the four digits definitions #define D1 5 #define D2 4 #define D3 3 #define D4 2 const int digitPins[] = {D1, D2, D3, D4}; const byte digitSegmentsByte[] = { // ABCDEFG Segments 0b11111100, // 0 0b01100000, // 1 0b11011010, // 2 0b11110010, // 3 0b01100110, // 4 0b10110110, // 5 0b10111110, // 6 0b11100000, // 7 0b11111110, // 8 0b11110110 // 9 }; byte current_digit; int count = 9987; byte digits[4] = {9, 9, 8, 7}; void setup() { Serial.begin(9600); // Ініціалізація послідовного порту // Ініціалізація пінів для розрядів pinMode(D1, OUTPUT); pinMode(D2, OUTPUT); pinMode(D3, OUTPUT); pinMode(D4, OUTPUT); pinMode(button, INPUT_PULLUP); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(latchPin, OUTPUT); disp_off(); current_digit = 0; cli();//stop interrupts TCCR1A = 0; TCCR1B = (1 << CS11) | (1 << CS10); // Prescaler 16 TCNT1 = 0; // set Timer1 preload value to 0 (reset) TIMSK1 = 1; // enable Timer1 overflow interrupt sei();//allow interrupts } void loop() { if(digitalRead(button) == 0) { delay(50); count++; // increment 'count' by 1 Serial.println(count); splitNumberToDigits(count); if(count > 9999) count = 0; delay(200); // wait 200 milliseconds } } void disp_off(){ for(int i = 0; i < 4; i++) { digitalWrite(digitPins[i], LOW); } } ISR(TIMER1_OVF_vect) { disp(digits[current_digit]); digitalWrite(digitPins[current_digit], LOW); digitalWrite(digitPins[current_digit], HIGH); current_digit = (current_digit % 3) + 1; } void splitNumberToDigits(int number) { number = abs(number); for (int i = 0; i < 4; i++) { digits[i] = 0; } int index = 3; while (number > 0 && index >= 0) { digits[index--] = number % 10; number /= 10; } } void disp(byte number) { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, digitSegmentsByte[number]); digitalWrite(latchPin, HIGH); // Оновлюємо дані на дисплеї }
Editor is loading...
Leave a Comment