Funciones en Cpp con manejo de puertos

Dependencies:   mbed

Committer:
lscordovar
Date:
Fri Feb 07 20:22:25 2020 +0000
Revision:
0:ab735a18a219
Manejo de Funciones

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lscordovar 0:ab735a18a219 1 /*
lscordovar 0:ab735a18a219 2 A 7-segment display is actually just 8 LEDs in a single package. We can
lscordovar 0:ab735a18a219 3 therefore connect each LED pin to an mbed pin to display a chosen number.
lscordovar 0:ab735a18a219 4 */
lscordovar 0:ab735a18a219 5
lscordovar 0:ab735a18a219 6
lscordovar 0:ab735a18a219 7 #include "mbed.h"
lscordovar 0:ab735a18a219 8 DigitalOut A(p5);
lscordovar 0:ab735a18a219 9 DigitalOut B(p6);
lscordovar 0:ab735a18a219 10 DigitalOut C(p7);
lscordovar 0:ab735a18a219 11 DigitalOut D(p8);
lscordovar 0:ab735a18a219 12 DigitalOut E(p9);
lscordovar 0:ab735a18a219 13 DigitalOut F(p10);
lscordovar 0:ab735a18a219 14 DigitalOut G(p11);
lscordovar 0:ab735a18a219 15 DigitalOut DP(p12);
lscordovar 0:ab735a18a219 16 int main()
lscordovar 0:ab735a18a219 17 {
lscordovar 0:ab735a18a219 18 A=1;
lscordovar 0:ab735a18a219 19 B=1;
lscordovar 0:ab735a18a219 20 C=1;
lscordovar 0:ab735a18a219 21 D=1;
lscordovar 0:ab735a18a219 22 E=0;
lscordovar 0:ab735a18a219 23 F=0;
lscordovar 0:ab735a18a219 24 G=1;
lscordovar 0:ab735a18a219 25 DP=0;
lscordovar 0:ab735a18a219 26 }
lscordovar 0:ab735a18a219 27
lscordovar 0:ab735a18a219 28
lscordovar 0:ab735a18a219 29 /*
lscordovar 0:ab735a18a219 30 */
lscordovar 0:ab735a18a219 31 // program code for Exercise 2
lscordovar 0:ab735a18a219 32 #include "mbed.h"
lscordovar 0:ab735a18a219 33 BusOut Seg1(p5,p6,p7,p8,p9,p10,p11,p12); // ABCDEFGDP
lscordovar 0:ab735a18a219 34 int main()
lscordovar 0:ab735a18a219 35 {
lscordovar 0:ab735a18a219 36 while (1) { // infinite loop
lscordovar 0:ab735a18a219 37 Seg1=0x3F; // 00111111 binary LEDs to '0'
lscordovar 0:ab735a18a219 38 wait(0.2);
lscordovar 0:ab735a18a219 39 Seg1=0x06; // 00000110 binary LEDs to '1'
lscordovar 0:ab735a18a219 40 wait(0.2);
lscordovar 0:ab735a18a219 41 Seg1=0x5B; // 01011011 binary LEDs to '2'
lscordovar 0:ab735a18a219 42 wait(0.2);
lscordovar 0:ab735a18a219 43 Seg1=0x4F; // 01001111 binary LEDs to '3'
lscordovar 0:ab735a18a219 44 wait(0.2);
lscordovar 0:ab735a18a219 45 Seg1=0x66; // 01100110 binary LEDs to '4'
lscordovar 0:ab735a18a219 46 wait(0.2);
lscordovar 0:ab735a18a219 47 Seg1=0x6D; // 01101101 binary LEDs to '5'
lscordovar 0:ab735a18a219 48 wait(0.2);
lscordovar 0:ab735a18a219 49 Seg1=0x7D; // 01111101 binary LEDs to '6'
lscordovar 0:ab735a18a219 50 wait(0.2);
lscordovar 0:ab735a18a219 51 Seg1=0x07; // 00000111 binary LEDs to '7'
lscordovar 0:ab735a18a219 52 wait(0.2);
lscordovar 0:ab735a18a219 53 Seg1=0x7F; // 01111111 binary LEDs to '8'
lscordovar 0:ab735a18a219 54 wait(0.2);
lscordovar 0:ab735a18a219 55 Seg1=0x6F; // 01101111 binary LEDs to '9'
lscordovar 0:ab735a18a219 56 wait(0.2);
lscordovar 0:ab735a18a219 57 }
lscordovar 0:ab735a18a219 58 }
lscordovar 0:ab735a18a219 59
lscordovar 0:ab735a18a219 60
lscordovar 0:ab735a18a219 61
lscordovar 0:ab735a18a219 62
lscordovar 0:ab735a18a219 63 /*
lscordovar 0:ab735a18a219 64 FUNCTIONS
lscordovar 0:ab735a18a219 65 Return_type function_name (variable_type_1 variable_name_1, variable_type_2 variable_name_2,…)
lscordovar 0:ab735a18a219 66 {
lscordovar 0:ab735a18a219 67 ... C code here
lscordovar 0:ab735a18a219 68 ... C code here
lscordovar 0:ab735a18a219 69 }
lscordovar 0:ab735a18a219 70 char SegConvert(char SegValue) { // function 'SegConvert'
lscordovar 0:ab735a18a219 71 char SegByte=0x00;
lscordovar 0:ab735a18a219 72 switch (SegValue) { //DPGFEDCBA
lscordovar 0:ab735a18a219 73 case 0 : SegByte = 0x3F;break; // 00111111 binary
lscordovar 0:ab735a18a219 74 case 1 : SegByte = 0x06;break; // 00000110 binary
lscordovar 0:ab735a18a219 75 case 2 : SegByte = 0x5B;break; // 01011011 binary
lscordovar 0:ab735a18a219 76 case 3 : SegByte = 0x4F;break; // 01001111 binary
lscordovar 0:ab735a18a219 77 case 4 : SegByte = 0x66;break; // 01100110 binary
lscordovar 0:ab735a18a219 78 case 5 : SegByte = 0x6D;break; // 01101101 binary
lscordovar 0:ab735a18a219 79 case 6 : SegByte = 0x7D;break; // 01111101 binary
lscordovar 0:ab735a18a219 80 case 7 : SegByte = 0x07;break; // 00000111 binary
lscordovar 0:ab735a18a219 81 case 8 : SegByte = 0x7F;break; // 01111111 binary
lscordovar 0:ab735a18a219 82 case 9 : SegByte = 0x6F;break; // 01101111 binary
lscordovar 0:ab735a18a219 83 }
lscordovar 0:ab735a18a219 84 return SegByte;
lscordovar 0:ab735a18a219 85 }
lscordovar 0:ab735a18a219 86
lscordovar 0:ab735a18a219 87 */
lscordovar 0:ab735a18a219 88
lscordovar 0:ab735a18a219 89
lscordovar 0:ab735a18a219 90 #include "mbed.h"
lscordovar 0:ab735a18a219 91 BusOut Seg1(p5,p6,p7,p8,p9,p10,p11,p12);// A,B,C,D,E,F,G,DP
lscordovar 0:ab735a18a219 92 char SegConvert(char SegValue); // function
lscordovar 0:ab735a18a219 93 prototype
lscordovar 0:ab735a18a219 94 int main() // main program
lscordovar 0:ab735a18a219 95 {
lscordovar 0:ab735a18a219 96 while (1) { // infinite loop
lscordovar 0:ab735a18a219 97 for (char i=0; i<10; i++) {
lscordovar 0:ab735a18a219 98 Seg1=SegConvert(i);
lscordovar 0:ab735a18a219 99 wait(0.2);
lscordovar 0:ab735a18a219 100 }
lscordovar 0:ab735a18a219 101 }
lscordovar 0:ab735a18a219 102 }
lscordovar 0:ab735a18a219 103 char SegConvert(char SegValue) // function 'SegConvert'
lscordovar 0:ab735a18a219 104 {
lscordovar 0:ab735a18a219 105 char SegByte=0x00;
lscordovar 0:ab735a18a219 106 switch (SegValue) { //DPGFEDCBA
lscordovar 0:ab735a18a219 107 case 0 :
lscordovar 0:ab735a18a219 108 SegByte = 0x3F;
lscordovar 0:ab735a18a219 109 break; // 00111111 binary
lscordovar 0:ab735a18a219 110 case 1 :
lscordovar 0:ab735a18a219 111 SegByte = 0x06;
lscordovar 0:ab735a18a219 112 break; // 00000110 binary
lscordovar 0:ab735a18a219 113 case 2 :
lscordovar 0:ab735a18a219 114 SegByte = 0x5B;
lscordovar 0:ab735a18a219 115 break; // 01011011 binary
lscordovar 0:ab735a18a219 116 case 3 :
lscordovar 0:ab735a18a219 117 SegByte = 0x4F;
lscordovar 0:ab735a18a219 118 break; // 01001111 binary
lscordovar 0:ab735a18a219 119 case 4 :
lscordovar 0:ab735a18a219 120 SegByte = 0x66;
lscordovar 0:ab735a18a219 121 break; // 01100110 binary
lscordovar 0:ab735a18a219 122 case 5 :
lscordovar 0:ab735a18a219 123 SegByte = 0x6D;
lscordovar 0:ab735a18a219 124 break; // 01101101 binary
lscordovar 0:ab735a18a219 125 case 6 :
lscordovar 0:ab735a18a219 126 SegByte = 0x7D;
lscordovar 0:ab735a18a219 127 break; // 01111101 binary
lscordovar 0:ab735a18a219 128 case 7 :
lscordovar 0:ab735a18a219 129 SegByte = 0x07;
lscordovar 0:ab735a18a219 130 break; // 00000111 binary
lscordovar 0:ab735a18a219 131 case 8 :
lscordovar 0:ab735a18a219 132 SegByte = 0x7F;
lscordovar 0:ab735a18a219 133 break; // 01111111 binary
lscordovar 0:ab735a18a219 134 case 9 :
lscordovar 0:ab735a18a219 135 SegByte = 0x6F;
lscordovar 0:ab735a18a219 136 break; // 01101111 binary
lscordovar 0:ab735a18a219 137 }
lscordovar 0:ab735a18a219 138 return SegByte;
lscordovar 0:ab735a18a219 139 }
lscordovar 0:ab735a18a219 140
lscordovar 0:ab735a18a219 141 /*
lscordovar 0:ab735a18a219 142 Reusing functions to reduce programming effort
lscordovar 0:ab735a18a219 143 */
lscordovar 0:ab735a18a219 144
lscordovar 0:ab735a18a219 145 // main program code for Exercise 4
lscordovar 0:ab735a18a219 146 #include "mbed.h"
lscordovar 0:ab735a18a219 147 BusOut Seg1(p5,p6,p7,p8,p9,p10,p11,p12); // A,B,C,D,E,F,G,DP
lscordovar 0:ab735a18a219 148 BusOut Seg2(p13,p14,p15,p16,p17,p18,p19,p20);
lscordovar 0:ab735a18a219 149 char SegConvert(char SegValue); // function prototype
lscordovar 0:ab735a18a219 150 int main() // main program
lscordovar 0:ab735a18a219 151 {
lscordovar 0:ab735a18a219 152 while (1) { // infinite loop
lscordovar 0:ab735a18a219 153 for (char j=0; j<10; j++) { // counter loop 1
lscordovar 0:ab735a18a219 154 Seg2=SegConvert(j); // tens column
lscordovar 0:ab735a18a219 155 for (char i=0; i<10; i++) { // counter loop 2
lscordovar 0:ab735a18a219 156 Seg1=SegConvert(i); // units column
lscordovar 0:ab735a18a219 157 wait(0.2);
lscordovar 0:ab735a18a219 158 }
lscordovar 0:ab735a18a219 159 }
lscordovar 0:ab735a18a219 160 }
lscordovar 0:ab735a18a219 161 }
lscordovar 0:ab735a18a219 162 // SegConvert function here...
lscordovar 0:ab735a18a219 163
lscordovar 0:ab735a18a219 164
lscordovar 0:ab735a18a219 165 /*
lscordovar 0:ab735a18a219 166 Building complex mbed projects withfunctions
lscordovar 0:ab735a18a219 167 */
lscordovar 0:ab735a18a219 168 void SegInit(void); // function to initialise 7-seg displays
lscordovar 0:ab735a18a219 169 void HostInit(void); // function to initialise the host terminal
lscordovar 0:ab735a18a219 170 char GetKeyInput(void); // function to get a keyboard input from the terminal
lscordovar 0:ab735a18a219 171 char SegConvert(char SegValue); // function to convert a number to a 7-segment byte
lscordovar 0:ab735a18a219 172
lscordovar 0:ab735a18a219 173 /*
lscordovar 0:ab735a18a219 174 Create a new project and add the following to your main.cpp file:
lscordovar 0:ab735a18a219 175 */
lscordovar 0:ab735a18a219 176
lscordovar 0:ab735a18a219 177 #include "mbed.h"
lscordovar 0:ab735a18a219 178 Serial pc(USBTX, USBRX); // comms to host PC
lscordovar 0:ab735a18a219 179 BusOut Seg1(p5,p6,p7,p8,p9,p10,p11,p12); // A,B,C,D,E,F,G,DP
lscordovar 0:ab735a18a219 180 BusOut Seg2(p13,p14,p15,p16,p17,p18,p19,p20); // A,B,C,D,E,F,G,DP
lscordovar 0:ab735a18a219 181
lscordovar 0:ab735a18a219 182
lscordovar 0:ab735a18a219 183 void SegInit(void); // function prototype
lscordovar 0:ab735a18a219 184 void HostInit(void); // function prototype
lscordovar 0:ab735a18a219 185 Char GetKeyInput(void); // function prototype
lscordovar 0:ab735a18a219 186 char SegConvert(char SegValue); // function prototype
lscordovar 0:ab735a18a219 187 char data1, data2; // variable declarations
lscordovar 0:ab735a18a219 188
lscordovar 0:ab735a18a219 189
lscordovar 0:ab735a18a219 190 int main() // main program
lscordovar 0:ab735a18a219 191 {
lscordovar 0:ab735a18a219 192 SegInit(); // call function to initialise the 7-seg displays
lscordovar 0:ab735a18a219 193 HostInit(); // call function to initialise the host terminal
lscordovar 0:ab735a18a219 194 while (1) { // infinite loop
lscordovar 0:ab735a18a219 195 data2 = GetKeyInput(); // call function to get 1st key press
lscordovar 0:ab735a18a219 196 Seg2=SegConvert(data2); // call function to convert and output
lscordovar 0:ab735a18a219 197 data1 = GetKeyInput(); // call function to get 2nd key press
lscordovar 0:ab735a18a219 198 Seg1=SegConvert(data1); // call function to convert and output
lscordovar 0:ab735a18a219 199 pc.printf(" "); // display spaces between 2 digit numbers
lscordovar 0:ab735a18a219 200 }
lscordovar 0:ab735a18a219 201 }
lscordovar 0:ab735a18a219 202 // add function code here...
lscordovar 0:ab735a18a219 203
lscordovar 0:ab735a18a219 204 void SegInit(void)
lscordovar 0:ab735a18a219 205 {
lscordovar 0:ab735a18a219 206 Seg1=SegConvert(0); // initialise to zero
lscordovar 0:ab735a18a219 207 Seg2=SegConvert(0); // initialise to zero
lscordovar 0:ab735a18a219 208 }
lscordovar 0:ab735a18a219 209 void HostInit(void)
lscordovar 0:ab735a18a219 210 {
lscordovar 0:ab735a18a219 211 pc.printf("\n\rType two digit numbers to be displayed on the 7-seg display\n\r");
lscordovar 0:ab735a18a219 212 }
lscordovar 0:ab735a18a219 213 char GetKeyInput(void)
lscordovar 0:ab735a18a219 214 {
lscordovar 0:ab735a18a219 215 char c = pc.getc(); // get keyboard data (note numerical ascii range 0x30-0x39)
lscordovar 0:ab735a18a219 216 pc.printf("%c",c); // print ascii value to host PC terminal
lscordovar 0:ab735a18a219 217 return (c&0x0F); // return value as non-ascii (bitmask c with value 0x0F)
lscordovar 0:ab735a18a219 218 }
lscordovar 0:ab735a18a219 219 // copy SegConvert function here too...
lscordovar 0:ab735a18a219 220
lscordovar 0:ab735a18a219 221 /*
lscordovar 0:ab735a18a219 222 Creating a modular program
lscordovar 0:ab735a18a219 223 */
lscordovar 0:ab735a18a219 224
lscordovar 0:ab735a18a219 225 // main.cpp file for Exercise 6
lscordovar 0:ab735a18a219 226 #include "mbed.h"
lscordovar 0:ab735a18a219 227 #include "HostIO.h"
lscordovar 0:ab735a18a219 228 #include "SegDisplay.h"
lscordovar 0:ab735a18a219 229 char data1, data2; // variable declarations
lscordovar 0:ab735a18a219 230 int main() // main program
lscordovar 0:ab735a18a219 231 {
lscordovar 0:ab735a18a219 232 SegInit(); // call function to initialise the 7-seg displays
lscordovar 0:ab735a18a219 233 HostInit(); // call function to initialise the host terminal
lscordovar 0:ab735a18a219 234 while (1) { // infinite loop
lscordovar 0:ab735a18a219 235 data2 = GetKeyInput(); // call function to get 1st key press
lscordovar 0:ab735a18a219 236 Seg2 = SegConvert(data2); // call function to convert and output
lscordovar 0:ab735a18a219 237 data1 = GetKeyInput(); // call function to get 2nd key press
lscordovar 0:ab735a18a219 238 Seg1 = SegConvert(data1); // call function to convert and output
lscordovar 0:ab735a18a219 239 pc.printf(" "); // display spaces between 2 digit numbers
lscordovar 0:ab735a18a219 240 }
lscordovar 0:ab735a18a219 241 }
lscordovar 0:ab735a18a219 242
lscordovar 0:ab735a18a219 243 // SegDisplay.cpp file for Exercise 6
lscordovar 0:ab735a18a219 244 #include "SegDisplay.h"
lscordovar 0:ab735a18a219 245 BusOut Seg1(p5,p6,p7,p8,p9,p10,p11,p12); // A,B,C,D,E,F,G,DP
lscordovar 0:ab735a18a219 246 BusOut Seg2(p13,p14,p15,p16,p17,p18,p19,p20); // A,B,C,D,E,F,G,DP
lscordovar 0:ab735a18a219 247 void SegInit(void)
lscordovar 0:ab735a18a219 248 {
lscordovar 0:ab735a18a219 249 Seg1=SegConvert(0); // initialise to zero
lscordovar 0:ab735a18a219 250 Seg2=SegConvert(0); // initialise to zero
lscordovar 0:ab735a18a219 251 }
lscordovar 0:ab735a18a219 252 char SegConvert(char SegValue) // function 'SegConvert'
lscordovar 0:ab735a18a219 253 {
lscordovar 0:ab735a18a219 254 char SegByte=0x00;
lscordovar 0:ab735a18a219 255 switch (SegValue) { //DP G F E D C B A
lscordovar 0:ab735a18a219 256 case 0 :
lscordovar 0:ab735a18a219 257 SegByte = 0x3F;
lscordovar 0:ab735a18a219 258 break; // 0 0 1 1 1 1 1 1 binary
lscordovar 0:ab735a18a219 259 case 1 :
lscordovar 0:ab735a18a219 260 SegByte = 0x06;
lscordovar 0:ab735a18a219 261 break; // 0 0 0 0 0 1 1 0 binary
lscordovar 0:ab735a18a219 262 case 2 :
lscordovar 0:ab735a18a219 263 SegByte = 0x5B;
lscordovar 0:ab735a18a219 264 break; // 0 1 0 1 1 0 1 1 binary
lscordovar 0:ab735a18a219 265 case 3 :
lscordovar 0:ab735a18a219 266 SegByte = 0x4F;
lscordovar 0:ab735a18a219 267 break; // 0 1 0 0 1 1 1 1 binary
lscordovar 0:ab735a18a219 268 case 4 :
lscordovar 0:ab735a18a219 269 SegByte = 0x66;
lscordovar 0:ab735a18a219 270 break; // 0 1 1 0 0 1 1 0 binary
lscordovar 0:ab735a18a219 271 case 5 :
lscordovar 0:ab735a18a219 272 SegByte = 0x6D;
lscordovar 0:ab735a18a219 273 break; // 0 1 1 0 1 1 0 1 binary
lscordovar 0:ab735a18a219 274 case 6 :
lscordovar 0:ab735a18a219 275 SegByte = 0x7D;
lscordovar 0:ab735a18a219 276 break; // 0 1 1 1 1 1 0 1 binary
lscordovar 0:ab735a18a219 277 case 7 :
lscordovar 0:ab735a18a219 278 SegByte = 0x07;
lscordovar 0:ab735a18a219 279 break; // 0 0 0 0 0 1 1 1 binary
lscordovar 0:ab735a18a219 280 case 8 :
lscordovar 0:ab735a18a219 281 SegByte = 0x7F;
lscordovar 0:ab735a18a219 282 break; // 0 1 1 1 1 1 1 1 binary
lscordovar 0:ab735a18a219 283 case 9 :
lscordovar 0:ab735a18a219 284 SegByte = 0x6F;
lscordovar 0:ab735a18a219 285 break; // 0 1 1 0 1 1 1 1 binary
lscordovar 0:ab735a18a219 286 }
lscordovar 0:ab735a18a219 287 return SegByte;
lscordovar 0:ab735a18a219 288 }
lscordovar 0:ab735a18a219 289
lscordovar 0:ab735a18a219 290 /*
lscordovar 0:ab735a18a219 291 SegDisplay.h should be as follows:
lscordovar 0:ab735a18a219 292 */
lscordovar 0:ab735a18a219 293
lscordovar 0:ab735a18a219 294 // SegDisplay.h file for Exercise 6
lscordovar 0:ab735a18a219 295 #ifndef SEGDISPLAY_H
lscordovar 0:ab735a18a219 296 #define SEGDISPLAY_H
lscordovar 0:ab735a18a219 297 #include "mbed.h"
lscordovar 0:ab735a18a219 298 extern BusOut Seg1; // allow Seg1 to be manipulated by other files
lscordovar 0:ab735a18a219 299 extern BusOut Seg2; // allow Seg2 to be manipulated by other files
lscordovar 0:ab735a18a219 300 void SegInit(void); // function prototype
lscordovar 0:ab735a18a219 301 char SegConvert(char SegValue); // function prototype
lscordovar 0:ab735a18a219 302 #endif
lscordovar 0:ab735a18a219 303
lscordovar 0:ab735a18a219 304 /*
lscordovar 0:ab735a18a219 305 The HostIO.cpp should therefore be as follows:
lscordovar 0:ab735a18a219 306 */
lscordovar 0:ab735a18a219 307
lscordovar 0:ab735a18a219 308 #include "HostIO.h"
lscordovar 0:ab735a18a219 309 #include "SegDisplay.h" // allow access to functions and objects in SegDisplay.cpp
lscordovar 0:ab735a18a219 310 Serial pc(USBTX, USBRX); // communication to host PC
lscordovar 0:ab735a18a219 311 void HostInit(void) {
lscordovar 0:ab735a18a219 312 pc.printf("\n\rType two digit numbers to be displayed on the 7-seg display\n\r");
lscordovar 0:ab735a18a219 313 }
lscordovar 0:ab735a18a219 314 char GetKeyInput(void) {
lscordovar 0:ab735a18a219 315 char c = pc.getc(); // get keyboard data (note numerical ascii range 0x30-0x39)
lscordovar 0:ab735a18a219 316 pc.printf("%c",c); // print ascii value to host PC terminal
lscordovar 0:ab735a18a219 317 return (c&0x0F); // return value as non-ascii (bitmask c with value 0x0F)
lscordovar 0:ab735a18a219 318 }
lscordovar 0:ab735a18a219 319
lscordovar 0:ab735a18a219 320 /*
lscordovar 0:ab735a18a219 321 HostIO.h should be as follows:
lscordovar 0:ab735a18a219 322 */
lscordovar 0:ab735a18a219 323 #ifndef HOSTIO_H
lscordovar 0:ab735a18a219 324 #define HOSTIO_H
lscordovar 0:ab735a18a219 325 #include "mbed.h"
lscordovar 0:ab735a18a219 326 extern Serial pc; // allow pc to be manipulated by other files
lscordovar 0:ab735a18a219 327 void HostInit(void); // function prototype
lscordovar 0:ab735a18a219 328 char GetKeyInput(void); // function prototype
lscordovar 0:ab735a18a219 329 #endif
lscordovar 0:ab735a18a219 330