#include #include #include #define DATA_PORT 0x378 /* parallel port base address */ #define STATUS_PORT (DATA_PORT + 1) #define CONTROL_PORT (DATA_PORT + 2) unsigned char status, data; // Array to hold bit patterns for each digit unsigned char BCD_values[10] = { 0b00000000, // digit 0 0b00000001, // digit 1 0b00000010, // digit 2 0b00000011, // digit 3 0b00000100, // digit 4 0b00000101, // digit 5 0b00000110, // digit 6 0b00000111, // digit 7 0b00001000, // digit 8 0b00001001 // digit 9 }; int main() { if (ioperm(DATA_PORT, 3, 1)) { fprintf(stderr, "Access denied to ports\n"); exit(1); } int button_presses = 0; // int previous_status = 0; while (1) { status = inb(STATUS_PORT); // Read from status port // Check if the button is pressed (bit 2) if ((status & 0b00010000)) { button_presses++; // Increment button press counter printf("Button pressed! Total presses: %d\n", button_presses); data = BCD_values[button_presses % 10]; // Get BCD value for current digit outb(data, DATA_PORT); // Display the digit while ((status & 0b00010000)) { usleep(100000); } } } ioperm(DATA_PORT, 3, 0); // Release the ports return 0; }