Untitled
user_6406267
c_cpp
a year ago
2.4 kB
9
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