Dr cregans solution for keypad polling

Dependencies:   mbed

main.cpp

Committer:
andrewbw01
Date:
2021-02-20
Revision:
0:d866ad9b15fb

File content as of revision 0:d866ad9b15fb:

#include "mbed.h"

BusOut LED_Disp(p7,p11,p9,p8,p5,p6,p10,p12);



DigitalOut col1 (p26);       // pin 4 on keypad
DigitalOut col2 (p28);       // pin 2
DigitalOut col3 (p24);       // pin 6 

DigitalIn row1 (p27);        // pin 3
DigitalIn row2 (p22);        // pin 8
DigitalIn row3 (p23);        // pin 7
DigitalIn row4 (p25);        // pin 5

char keypad(void);           // declare keypad function will return character pressed
void DisplayNumber(int);     // Declare functio  to display number on seven seg

int main()
{
    char kp_val = ' ';       // character that changes when the key is pressed, has initial value
    
    LED_Disp = 0xFF;
    
    while(1)
    {
        kp_val = keypad();
                             
        if(kp_val!= ' ')        // poll keypad and check if any value is pressed
        {
            if(kp_val=='*') LED_Disp = ~0x63;
            if(kp_val=='#') LED_Disp = ~0x5C;
            
            if(kp_val>='0' && kp_val<='9')
                DisplayNumber(kp_val-48);       // subtract 48 to change ASCII into number
                
            kp_val=' ';                         // reset keypad_char
        }
        wait(0.1);
    }
}


char keypad(void)
{
    col1=1;
    col2=0;
    col3=0;
    
    if(row1==1)
    {
        while(row1==1){}
        
        col1=0;
        col2=0;
        col3=0;
        return('1');
    }
    else if(row2==1)
    {
        while (row2==1){}
        
        col1=0;
        col2=0;
        col3=0;
        return('4');
    }
    else if(row3==1)
    {
        while (row3==1){}
        
        col1=0;
        col2=0;
        col3=0;
        return('7');
    }
    else if(row4==1)
    {
        while(row4==1){}
        
        col1=0;
        col2=0;
        col3=0;
        return('*');
    }
    
    col1=0;
    col2=1;
    col3=0;
    
    if(row1==1)
    {
        while(row1==1){}
        
        col1=0;
        col2=0;
        col3=0;
        return('2');
    }
    else if(row2==1)
    {
        while (row2==1){}
        
        col1=0;
        col2=0;
        col3=0;
        return('5');
    }
    else if(row3==1)
    {
        while (row3==1){}
        
        col1=0;
        col2=0;
        col3=0;
        return('8');
    }
    else if(row4==1)
    {
        while(row4==1){}
        
        col1=0;
        col2=0;
        col3=0;
        return('0');
    }
    
    col1=0;
    col2=0;
    col3=1;
    
    if(row1==1)
    {
        while(row1==1){}
        
        col1=0;
        col2=0;
        col3=0;
        return('3');
    }
    else if(row2==1)
    {
        while (row2==1){}
        
        col1=0;
        col2=0;
        col3=0;
        return('6');
    }
    else if(row3==1)
    {
        while (row3==1){}
        
        col1=0;
        col2=0;
        col3=0;
        return('9');
    }
    else if (row4==1)
    {
        while(row4==1){}
        
        col1=0;
        col2=0;
        col3=0;
        return('#');
    }
    
    col1=0;
    col2=0;
    col3=0;
    
    return(' ');
}

void DisplayNumber(int num)
{
     switch(num)
     {
        case 0:
            LED_Disp = ~0x3F;
            break;
        case 1:
            LED_Disp = ~0x06;
            break;
        case 2:
            LED_Disp = ~0x5B;
            break;
        case 3:
            LED_Disp = ~0x4F;
            break;
        case 4:
            LED_Disp = ~0x66;
            break;
        case 5:
            LED_Disp = ~0x6D;
            break;
        case 6:
            LED_Disp = ~0x7D;
            break; 
        case 7:
            LED_Disp = ~0x07;
            break;
        case 8:
            LED_Disp = ~0x7F;
            break;
        case 9:
            LED_Disp = ~0x67;
            break; 
        case 10: //#
            LED_Disp = ~0x5c;
            break;
        case 11:   //*
            LED_Disp = ~0x63;
            break;
    }
}