//Program: SevenSegment_Project1.ino
uint32_t previousMillis_1;
uint32_t previousMillis_2;
uint32_t task1Time = 1000;
uint32_t task2Time = 1000;
uint32_t currentTime;
int i = 0; // Index for the 7-segment display
bool flag_LED1 = 0;
bool SSM = 0; //check if display
int SW1 = 16;
// 7-segment display patterns for 0-3
int LEDs[] = { 0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111 // 3
};
uint32_t *gpioOUT_SET = (uint32_t *)(0xD0000014);
uint32_t *gpioOUT_CLR = (uint32_t *)(0xD0000018);
void ISR_SW1() {
SSM = 1;
i = 0; //start from 0
}
void setup() {
for(int pin = 0; pin < 8; pin++) {
pinMode(pin, OUTPUT); //7-SM OUTPUT
}
pinMode(LED_BUILTIN, OUTPUT);
attachInterrupt(SW1, ISR_SW1, FALLING);
}
void loop() {
currentTime = millis();
//Task 1 LED_BUILTIN 1s
if (currentTime - previousMillis_1 >= task1Time) {
previousMillis_1 = currentTime;
if(!flag_LED1){
digitalWrite(LED_BUILTIN,LOW);
}
else{
digitalWrite(LED_BUILTIN,HIGH);
}
flag_LED1 = !flag_LED1; // Set LED state
}
// Task 2 7-segment
if (SSM) {
if (i < 4) {
*gpioOUT_SET = 0b00111111; // Turn on all segments
*gpioOUT_CLR = LEDs[i]; // Clear to show the current number
i++; // Move to the next number
delay(1000); // Wait for 1 second to show the number
} else {
SSM = 0; // Reset the display state
*gpioOUT_SET = 0b11111111; // Turn off all segments
}
}
}