/*Connect 8 LEDs to an 8-bit port
Connect 8 Switches to an 8-bit port
4. Press any switch glow 7th LED, delay,6th LED, delay …*/
//Registers for I/O ports
#define PORTF_DIR_REG ((volatile unsigned char *) 0x30) // Data Direction Register for PORTF
#define PORTK_DIR_REG ((volatile unsigned char *) 0x107) // Data Direction Register for PORTK
#define PORTF_OUT_REG ((volatile unsigned char *) 0x31) // Data Register for PORTF (OUTPUT REGISTER)
#define PORTK_IN_REG ((volatile unsigned char *) 0x106) // input Register for PORTK
//Macro for swtch to control the LED's
#define SWITCH 0xFF
void setup ()
{
init_func();
}
//delay function
void delay_func()
{
volatile long i;
for (i = 0;i < 400000;i++);
}
//8 LED's are connected to PORTF and 8 switches are connected to PORTK
void init_func() {
//Set PORTF pins as an output
*PORTF_DIR_REG = 0xFF;
//Set PORK pins as an input
*PORTK_DIR_REG = 0x00;
}
//Main function
void loop() {
volatile char x;
int i;
while (1) {
//read the input PORT
x = *PORTK_IN_REG;
// Check if the switch is pressed
if (x & SWITCH) {
// Short debounce delay
delay_func();
// Glow LEDs sequentially
for (i = 7;i >= 0;i--) {
*PORTF_OUT_REG = (1 << i);
delay_func();
}
}
// Turn off all LEDs after the sequence
*PORTF_OUT_REG = 0x00;
}
}