Funciones en Cpp con manejo de puertos

Dependencies:   mbed

main.cpp

Committer:
lscordovar
Date:
2020-02-07
Revision:
0:ab735a18a219

File content as of revision 0:ab735a18a219:

/*
A 7-segment display is actually just 8 LEDs in a single package. We can
therefore connect each LED pin to an mbed pin to display a chosen number.
*/


#include "mbed.h"
DigitalOut A(p5);
DigitalOut B(p6);
DigitalOut C(p7);
DigitalOut D(p8);
DigitalOut E(p9);
DigitalOut F(p10);
DigitalOut G(p11);
DigitalOut DP(p12);
int main()
{
    A=1;
    B=1;
    C=1;
    D=1;
    E=0;
    F=0;
    G=1;
    DP=0;
}


/*
*/
// program code for Exercise 2
#include "mbed.h"
BusOut Seg1(p5,p6,p7,p8,p9,p10,p11,p12); // ABCDEFGDP
int main()
{
    while (1) { // infinite loop
        Seg1=0x3F; // 00111111 binary LEDs to '0'
        wait(0.2);
        Seg1=0x06; // 00000110 binary LEDs to '1'
        wait(0.2);
        Seg1=0x5B; // 01011011 binary LEDs to '2'
        wait(0.2);
        Seg1=0x4F; // 01001111 binary LEDs to '3'
        wait(0.2);
        Seg1=0x66; // 01100110 binary LEDs to '4'
        wait(0.2);
        Seg1=0x6D; // 01101101 binary LEDs to '5'
        wait(0.2);
        Seg1=0x7D; // 01111101 binary LEDs to '6'
        wait(0.2);
        Seg1=0x07; // 00000111 binary LEDs to '7'
        wait(0.2);
        Seg1=0x7F; // 01111111 binary LEDs to '8'
        wait(0.2);
        Seg1=0x6F; // 01101111 binary LEDs to '9'
        wait(0.2);
    }
}




/*
FUNCTIONS
Return_type function_name (variable_type_1 variable_name_1, variable_type_2 variable_name_2,…)
{
... C code here
... C code here
}
char SegConvert(char SegValue) { // function 'SegConvert'
 char SegByte=0x00;
 switch (SegValue) { //DPGFEDCBA
 case 0 : SegByte = 0x3F;break; // 00111111 binary
 case 1 : SegByte = 0x06;break; // 00000110 binary
 case 2 : SegByte = 0x5B;break; // 01011011 binary
 case 3 : SegByte = 0x4F;break; // 01001111 binary
 case 4 : SegByte = 0x66;break; // 01100110 binary
 case 5 : SegByte = 0x6D;break; // 01101101 binary
 case 6 : SegByte = 0x7D;break; // 01111101 binary
 case 7 : SegByte = 0x07;break; // 00000111 binary
 case 8 : SegByte = 0x7F;break; // 01111111 binary
 case 9 : SegByte = 0x6F;break; // 01101111 binary
 }
 return SegByte;
}

*/


#include "mbed.h"
BusOut Seg1(p5,p6,p7,p8,p9,p10,p11,p12);// A,B,C,D,E,F,G,DP
char SegConvert(char SegValue); // function
prototype
int main()   // main program
{
    while (1) { // infinite loop
        for (char i=0; i<10; i++) {
            Seg1=SegConvert(i);
            wait(0.2);
        }
    }
}
char SegConvert(char SegValue)   // function 'SegConvert'
{
    char SegByte=0x00;
    switch (SegValue) { //DPGFEDCBA
        case 0 :
            SegByte = 0x3F;
            break; // 00111111 binary
        case 1 :
            SegByte = 0x06;
            break; // 00000110 binary
        case 2 :
            SegByte = 0x5B;
            break; // 01011011 binary
        case 3 :
            SegByte = 0x4F;
            break; // 01001111 binary
        case 4 :
            SegByte = 0x66;
            break; // 01100110 binary
        case 5 :
            SegByte = 0x6D;
            break; // 01101101 binary
        case 6 :
            SegByte = 0x7D;
            break; // 01111101 binary
        case 7 :
            SegByte = 0x07;
            break; // 00000111 binary
        case 8 :
            SegByte = 0x7F;
            break; // 01111111 binary
        case 9 :
            SegByte = 0x6F;
            break; // 01101111 binary
    }
    return SegByte;
}

/*
Reusing functions to reduce programming effort
*/

// main program code for Exercise 4
#include "mbed.h"
BusOut Seg1(p5,p6,p7,p8,p9,p10,p11,p12); // A,B,C,D,E,F,G,DP
BusOut Seg2(p13,p14,p15,p16,p17,p18,p19,p20);
char SegConvert(char SegValue); // function prototype
int main()   // main program
{
    while (1) { // infinite loop
        for (char j=0; j<10; j++) { // counter loop 1
            Seg2=SegConvert(j); // tens column
            for (char i=0; i<10; i++) { // counter loop 2
                Seg1=SegConvert(i); // units column
                wait(0.2);
            }
        }
    }
}
// SegConvert function here...


/*
Building complex mbed projects withfunctions
*/
void SegInit(void); // function to initialise 7-seg displays
void HostInit(void); // function to initialise the host terminal
char GetKeyInput(void); // function to get a keyboard input from the terminal
char SegConvert(char SegValue); // function to convert a number to a 7-segment byte

/*
Create a new project and add the following to your main.cpp file:
*/

#include "mbed.h"
Serial pc(USBTX, USBRX); // comms to host PC
BusOut Seg1(p5,p6,p7,p8,p9,p10,p11,p12); // A,B,C,D,E,F,G,DP
BusOut Seg2(p13,p14,p15,p16,p17,p18,p19,p20); // A,B,C,D,E,F,G,DP


void SegInit(void); // function prototype
void HostInit(void); // function prototype
Char GetKeyInput(void); // function prototype
char SegConvert(char SegValue); // function prototype
char data1, data2; // variable declarations


int main()   // main program
{
    SegInit(); // call function to initialise the 7-seg displays
    HostInit(); // call function to initialise the host terminal
    while (1) { // infinite loop
        data2 = GetKeyInput(); // call function to get 1st key press
        Seg2=SegConvert(data2); // call function to convert and output
        data1 = GetKeyInput(); // call function to get 2nd key press
        Seg1=SegConvert(data1); // call function to convert and output
        pc.printf(" "); // display spaces between 2 digit numbers
    }
}
// add function code here...

void SegInit(void)
{
    Seg1=SegConvert(0); // initialise to zero
    Seg2=SegConvert(0); // initialise to zero
}
void HostInit(void)
{
    pc.printf("\n\rType two digit numbers to be displayed on the 7-seg display\n\r");
}
char GetKeyInput(void)
{
    char c = pc.getc(); // get keyboard data (note numerical ascii range 0x30-0x39)
    pc.printf("%c",c); // print ascii value to host PC terminal
    return (c&0x0F); // return value as non-ascii (bitmask c with value 0x0F)
}
// copy SegConvert function here too...

/*
Creating a modular program
*/

// main.cpp file for Exercise 6
#include "mbed.h"
#include "HostIO.h"
#include "SegDisplay.h"
char data1, data2; // variable declarations
int main()   // main program
{
    SegInit(); // call function to initialise the 7-seg displays
    HostInit(); // call function to initialise the host terminal
    while (1) { // infinite loop
        data2 = GetKeyInput(); // call function to get 1st key press
        Seg2 = SegConvert(data2); // call function to convert and output
        data1 = GetKeyInput(); // call function to get 2nd key press
        Seg1 = SegConvert(data1); // call function to convert and output
        pc.printf(" "); // display spaces between 2 digit numbers
    }
}

// SegDisplay.cpp file for Exercise 6
#include "SegDisplay.h"
BusOut Seg1(p5,p6,p7,p8,p9,p10,p11,p12); // A,B,C,D,E,F,G,DP
BusOut Seg2(p13,p14,p15,p16,p17,p18,p19,p20); // A,B,C,D,E,F,G,DP
void SegInit(void)
{
    Seg1=SegConvert(0); // initialise to zero
    Seg2=SegConvert(0); // initialise to zero
}
char SegConvert(char SegValue)   // function 'SegConvert'
{
    char SegByte=0x00;
    switch (SegValue) { //DP G F E D C B A
        case 0 :
            SegByte = 0x3F;
            break; // 0 0 1 1 1 1 1 1 binary
        case 1 :
            SegByte = 0x06;
            break; // 0 0 0 0 0 1 1 0 binary
        case 2 :
            SegByte = 0x5B;
            break; // 0 1 0 1 1 0 1 1 binary
        case 3 :
            SegByte = 0x4F;
            break; // 0 1 0 0 1 1 1 1 binary
        case 4 :
            SegByte = 0x66;
            break; // 0 1 1 0 0 1 1 0 binary
        case 5 :
            SegByte = 0x6D;
            break; // 0 1 1 0 1 1 0 1 binary
        case 6 :
            SegByte = 0x7D;
            break; // 0 1 1 1 1 1 0 1 binary
        case 7 :
            SegByte = 0x07;
            break; // 0 0 0 0 0 1 1 1 binary
        case 8 :
            SegByte = 0x7F;
            break; // 0 1 1 1 1 1 1 1 binary
        case 9 :
            SegByte = 0x6F;
            break; // 0 1 1 0 1 1 1 1 binary
    }
    return SegByte;
}

/*
SegDisplay.h should be as follows:
*/

// SegDisplay.h file for Exercise 6
#ifndef SEGDISPLAY_H
#define SEGDISPLAY_H
#include "mbed.h"
extern BusOut Seg1; // allow Seg1 to be manipulated by other files
extern BusOut Seg2; // allow Seg2 to be manipulated by other files
void SegInit(void); // function prototype
char SegConvert(char SegValue); // function prototype
#endif

/*
The HostIO.cpp should therefore be as follows:
*/

#include "HostIO.h"
#include "SegDisplay.h" // allow access to functions and objects in SegDisplay.cpp
Serial pc(USBTX, USBRX); // communication to host PC
void HostInit(void) {
 pc.printf("\n\rType two digit numbers to be displayed on the 7-seg display\n\r");
}
char GetKeyInput(void) {
 char c = pc.getc(); // get keyboard data (note numerical ascii range 0x30-0x39)
 pc.printf("%c",c); // print ascii value to host PC terminal
 return (c&0x0F); // return value as non-ascii (bitmask c with value 0x0F)
}

/*
HostIO.h should be as follows:
*/
#ifndef HOSTIO_H
#define HOSTIO_H
#include "mbed.h"
extern Serial pc; // allow pc to be manipulated by other files
void HostInit(void); // function prototype
char GetKeyInput(void); // function prototype
#endif