Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Nucleo 401RE Dual 7-Segment Display Counter with User Button Control

View and Edit Project In Cirkit DesignerImage of Nucleo 401RE Dual 7-Segment Display Counter with User Button Control

Circuit Documentation

Summary

This circuit involves two Nucleo 401RE microcontrollers and two 7-segment displays. Each microcontroller is connected to a 7-segment display, and one of the microcontrollers is programmed to count from 0 to 9 every second, displaying the count on the 7-segment display.

Component List

Nucleo 401RE

7-segment Display

Wiring Details

Nucleo 401RE to 7-segment Display (First Pair)

Nucleo 401RE to 7-segment Display (Second Pair)

Code Documentation

Nucleo 401RE (First Microcontroller)

// Part 2: RTC with User Button
// This code uses a user button to start counting on the 7-segment display from 0 to 9 every second
// using a simple delay to simulate the RTC update every second.

#include "mbed.h"

// Define 7-segment display pins with letters from "Sohailla"
DigitalOut segS(D2);   // Segment A
DigitalOut segO(D3);   // Segment B
DigitalOut segH(D4);   // Segment C
DigitalOut segA(D5);   // Segment D
DigitalOut segI(D6);   // Segment E
DigitalOut segL(D7);   // Segment F
DigitalOut segA2(D8);  // Segment G (to differentiate, using A2)

// Define user button pin
InterruptIn userButton(PA_0);  // User button interrupt

// RTC state variables
bool counting = false;  // Flag to indicate counting state
int count = 0;          // Counter for the 7-segment display

// Function to update the 7-segment display
void displayNumber(int number) {
    switch (number) {
        case 1:
            segS = 0; segO = 1; segH = 1; segA = 0; segI = 0; segL = 0; segA2 = 0; // Display "1"
            break;
        case 2:
            segS = 1; segO = 1; segH = 0; segA = 1; segI = 1; segL = 0; segA2 = 1; // Display "2"
            break;
        case 3:
            segS = 1; segO = 1; segH = 1; segA = 1; segI = 0; segL = 0; segA2 = 1; // Display "3"
            break;
        case 4:
            segS = 0; segO = 1; segH = 1; segA = 0; segI = 0; segL = 1; segA2 = 1; // Display "4"
            break;
        case 5:
            segS = 1; segO = 0; segH = 1; segA = 1; segI = 0; segL = 1; segA2 = 1; // Display "5"
            break;
        case 6:
            segS = 1; segO = 0; segH = 1; segA = 1; segI = 1; segL = 1; segA2 = 1; // Display "6"
            break;
        case 7:
            segS = 1; segO = 1; segH = 1; segA = 0; segI = 0; segL = 0; segA2 = 0; // Display "7"
            break;
        case 8:
            segS = 1; segO = 1; segH = 1; segA = 1; segI = 1; segL = 1; segA2 = 1; // Display "8"
            break;
        case 9:
            segS = 1; segO = 1; segH = 1; segA = 1; segI = 0; segL = 1; segA2 = 1; // Display "9"
            break;
        default:
            segS = 1; segO = 1; segH = 1; segA = 1; segI = 1; segL = 1; segA2 = 0; // Default: Display "0"
            break;
    }
}

// Function to handle user button press
void userButtonPress() {
    counting = true;  // Start the counting process
    count = 0;        // Initialize the counter
}

// Main function to handle counting
int main() {
    userButton.fall(userButtonPress);  // Attach user button press handler

    while (true) {
        if (counting) {
            displayNumber(count);  // Display the current count (0-9)
            count = (count + 1) % 10; // Increment count, reset to 0 after 9

            // Simulate 1-second delay using sleep
            ThisThread::sleep_for(1s); // Sleep for 1 second
        }
    }
}

Nucleo 401RE (Second Microcontroller)

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

This documentation provides a comprehensive overview of the circuit, including a summary, component list, wiring details, and the code used for the microcontrollers.