Hello guys,I am currently trying to display number on 7 segment LED when i enter the number using a 4 x 4 Keypad, however it seems like i just cant get it to work, I not sure why but i hope you guys can help me. Thanks in advance. Here is my code:
#include "mbed.h"
#include "keypad.h"
// input of number
BusOut SevenSegments(p27, p26, p25, p24, p23, p22, p21);
BusOut Leds(p28, p29, p30);
Keypad keypad(p15, p14, p13, p12, p20, p19, p17, p16);
#define MAXBUS 10
#define MAXLEN 4
#define ENDKEYIX 14
char Keytable[] = { 0x30, 0x6D, 0x79, 0x00,
0x33, 0x5B, 0x5F, 0x00,
0x70, 0xFF, 0x7B, 0x00,
0x00, 0x75, 0x00, 0x00
};
char BusNumber[MAXBUS][MAXLEN];
int NumIX = 0; // Point to current index of Bus number
volatile int BusIX = -1; // Point to current bus, -1, 0 .. MAXBUS - 1
volatile int CurrBusShown = -1; // Index to BusNumber for bus number being shown
Ticker UpdateBusNumber;
Ticker RefreshLEDs;
/*
* To be enabled in the main process once
*/
void UpdateBusNumberISR() {
if (BusIX == -1)
CurrBusShown = -1;
else if (CurrBusShown <= BusIX) {
CurrBusShown = ++CurrBusShown % MAXBUS;
}
}
/*
* To be called from a process in RTOS
*/
void RefreshLEDsISR() {
while (1) {
if (CurrBusShown == -1)
Leds = 0; // Switch off all 7-segment leds
else {
for (int i = 0; i < MAXLEN - 1; i++) {
Leds = 0x01 << i;
SevenSegments = BusNumber[CurrBusShown][i];
printf("%02X ", BusNumber[CurrBusShown][i]);
wait_ms(200); // Changed to Sleep(20000) in RTOS
}
printf("\n");
}
}
}
/*
* It is an ISR within a keypad process in RTOS
*/
uint32_t cbAfterInput(uint32_t keyIX) {
if (BusIX == MAXBUS - 1)
return 1; // No more space to store new bus number
if (NumIX < MAXLEN - 1) {
if (keyIX == ENDKEYIX) {
NumIX = 0;
++BusIX;
} else
BusNumber[BusIX][NumIX++] = Keytable[keyIX];
}
return 0;
}
int main() {
UpdateBusNumber.attach(&UpdateBusNumberISR, 5.0);
RefreshLEDs.attach(&RefreshLEDsISR, 0.5);
memset(BusNumber, 0, MAXBUS * MAXLEN);
keypad.CallAfterInput(&cbAfterInput);
keypad.Start();
while (1) {
printf("starting..");
wait(1.0);
}
}
Hello guys,I am currently trying to display number on 7 segment LED when i enter the number using a 4 x 4 Keypad, however it seems like i just cant get it to work, I not sure why but i hope you guys can help me. Thanks in advance. Here is my code: