Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //define bit-patterns for 7 segment display
- const int valuesTable[10] = {
- B11111001, //1
- B10100100, //2
- B10110000, //3
- B10011001, //4
- B10010010, //5
- B10000011, //6
- B11111000, //7
- B10000000, //8
- B10011000, //9
- B11000000 //0
- };
- const int dataPin = 8; //74HC595 pin 8 DS
- const int latchPin = 9; //74HC595 pin 9 STCP
- const int clockPin = 10; //74HC595 pin 10 SHCP
- const int display1 = 7; // displays numbered from left to right
- const int display2 = 6;
- const int display3 = 5;
- const int display4 = 4;
- int buttonPin = 3; // the number of the pushbutton pin
- int countedNumber = 0;
- int currentButtonState = 0; // current state of the button
- int previousButtonState = 0; // previous button state
- void setup() {
- Serial.begin(9600);
- // declare button pin as input
- // latch, clock, data (part of 74HC595, connected to counter) are output
- // each display is an output
- pinMode(buttonPin, INPUT_PULLUP);
- pinMode(latchPin,OUTPUT);
- pinMode(clockPin,OUTPUT);
- pinMode(dataPin,OUTPUT);
- pinMode(display1, OUTPUT);
- pinMode(display2, OUTPUT);
- pinMode(display3, OUTPUT);
- pinMode(display4, OUTPUT);
- }
- void allDisplaysOff() {
- // turn all cathode drivers off so that no leading zeros show
- digitalWrite(display1, LOW);
- digitalWrite(display2, LOW);
- digitalWrite(display3, LOW);
- digitalWrite(display4, LOW);
- }
- // function controls the numbers on display
- void displayDigit(int whichDisplay, byte valueToDisplay) {
- digitalWrite(latchPin, LOW); // turn off shift register pins while shifting bits
- allDisplaysOff(); // turn off all cathode drivers
- shiftOut(dataPin,clockPin, LSBFIRST, valueToDisplay); //shift the bits out
- digitalWrite(latchPin, HIGH); // set latch high to set segments
- digitalWrite(whichDisplay, HIGH); // drive on cathode low to durn on display
- delay(100);
- }
- void segmentDisplay(int number){
- int d1, d2, d3, d4; // temp values for thousands, hundreds, tens, ones
- d1 = (int) (number / 1000); // get thousands
- number = number - (d1 * 1000); // subtract thousands from number
- d2 = (int) (number / 100); // get hundreds
- number = number - (d2 * 100); // subtract hundreds from number
- d3 = (int) (number / 10); // get tens
- d4 = number - (d3 * 10); // subtract tens from number to obtain d4
- displayDigit(display1, byte(valuesTable[d1])); // display thousands
- displayDigit(display2, byte(valuesTable[d2])); // display hundreds
- displayDigit(display3, byte(valuesTable[d3])); // display tens
- displayDigit(display4, byte(valuesTable[d4])); // display ones
- }
- // function keeps track of number of button presses, saves in variable called countedNumber
- void buttonCount() {
- currentButtonState = digitalRead(buttonPin); //read state of current pushbutton value, being either low or high
- //off is 1, on is 0 for PULLUP
- if(currentButtonState != previousButtonState){ // if previous button state and current button state are not equal
- if(currentButtonState == 0) { // and if current button state is ON
- countedNumber++; // increase counted number by 1
- if (countedNumber > 9999) { // if counted number exceeds 9999, reset number to 0
- countedNumber = 0;
- }
- if (countedNumber < 0) { // if counted number is less than 0, make it equal 0
- countedNumber = 0;
- segmentDisplay(countedNumber);
- }
- }
- }
- previousButtonState = currentButtonState; // save current state as last state for next time through the loop
- delay(200);
- }
- void loop() {
- buttonCount();
- Serial.print("Current Button State: ");
- Serial.print(currentButtonState);
- Serial.print('\t');
- Serial.print("Counted Number: ");
- Serial.print(countedNumber);
- Serial.println('\t');
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement