Carlos Quintana
/
frdm_gpioInterrupcion
Programa para un contador 00-99 up/down con display 7 seg. ánodo común
main.cpp@0:cee1c4dd8c94, 2018-12-18 (annotated)
- Committer:
- Otakutronics
- Date:
- Tue Dec 18 01:21:25 2018 +0000
- Revision:
- 0:cee1c4dd8c94
Contador up/down con display 7 segmentos multiplexado
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Otakutronics | 0:cee1c4dd8c94 | 1 | #include "mbed.h" |
Otakutronics | 0:cee1c4dd8c94 | 2 | /* |
Otakutronics | 0:cee1c4dd8c94 | 3 | DigitalOut gpo(D0); |
Otakutronics | 0:cee1c4dd8c94 | 4 | DigitalOut led(LED_RED); |
Otakutronics | 0:cee1c4dd8c94 | 5 | */ |
Otakutronics | 0:cee1c4dd8c94 | 6 | //>< |
Otakutronics | 0:cee1c4dd8c94 | 7 | DigitalOut BjtUnd(PTA2,1); |
Otakutronics | 0:cee1c4dd8c94 | 8 | DigitalOut BjtDcn(PTA1,1); |
Otakutronics | 0:cee1c4dd8c94 | 9 | |
Otakutronics | 0:cee1c4dd8c94 | 10 | InterruptIn BtnInc(PTE25); |
Otakutronics | 0:cee1c4dd8c94 | 11 | InterruptIn BtnDec(PTE24); |
Otakutronics | 0:cee1c4dd8c94 | 12 | |
Otakutronics | 0:cee1c4dd8c94 | 13 | PortOut OutC(PortC,0x000000FF); |
Otakutronics | 0:cee1c4dd8c94 | 14 | PortOut OutD(PortD,0x000000FF); |
Otakutronics | 0:cee1c4dd8c94 | 15 | |
Otakutronics | 0:cee1c4dd8c94 | 16 | unsigned char unidades, decenas; |
Otakutronics | 0:cee1c4dd8c94 | 17 | |
Otakutronics | 0:cee1c4dd8c94 | 18 | void ISR_Incrementar(){ |
Otakutronics | 0:cee1c4dd8c94 | 19 | |
Otakutronics | 0:cee1c4dd8c94 | 20 | unidades ++; |
Otakutronics | 0:cee1c4dd8c94 | 21 | if (unidades == 10){ |
Otakutronics | 0:cee1c4dd8c94 | 22 | unidades = 0; |
Otakutronics | 0:cee1c4dd8c94 | 23 | decenas ++; |
Otakutronics | 0:cee1c4dd8c94 | 24 | if (decenas == 10){ |
Otakutronics | 0:cee1c4dd8c94 | 25 | decenas = 0; |
Otakutronics | 0:cee1c4dd8c94 | 26 | } |
Otakutronics | 0:cee1c4dd8c94 | 27 | } |
Otakutronics | 0:cee1c4dd8c94 | 28 | wait_ms(30); |
Otakutronics | 0:cee1c4dd8c94 | 29 | } |
Otakutronics | 0:cee1c4dd8c94 | 30 | |
Otakutronics | 0:cee1c4dd8c94 | 31 | void ISR_Decrementar(){ |
Otakutronics | 0:cee1c4dd8c94 | 32 | |
Otakutronics | 0:cee1c4dd8c94 | 33 | unidades --; |
Otakutronics | 0:cee1c4dd8c94 | 34 | if (unidades == 0xFF){ |
Otakutronics | 0:cee1c4dd8c94 | 35 | unidades = 9; |
Otakutronics | 0:cee1c4dd8c94 | 36 | decenas --; |
Otakutronics | 0:cee1c4dd8c94 | 37 | if (decenas == 0xFF){ |
Otakutronics | 0:cee1c4dd8c94 | 38 | decenas = 9; |
Otakutronics | 0:cee1c4dd8c94 | 39 | } |
Otakutronics | 0:cee1c4dd8c94 | 40 | } |
Otakutronics | 0:cee1c4dd8c94 | 41 | wait_ms(30); |
Otakutronics | 0:cee1c4dd8c94 | 42 | } |
Otakutronics | 0:cee1c4dd8c94 | 43 | |
Otakutronics | 0:cee1c4dd8c94 | 44 | void BinToDisplay(unsigned char num){ |
Otakutronics | 0:cee1c4dd8c94 | 45 | switch (num){ |
Otakutronics | 0:cee1c4dd8c94 | 46 | case 0: OutC.write(0); |
Otakutronics | 0:cee1c4dd8c94 | 47 | OutD.write(8); |
Otakutronics | 0:cee1c4dd8c94 | 48 | break; |
Otakutronics | 0:cee1c4dd8c94 | 49 | case 1: OutC.write(3); |
Otakutronics | 0:cee1c4dd8c94 | 50 | OutD.write(11); |
Otakutronics | 0:cee1c4dd8c94 | 51 | break; |
Otakutronics | 0:cee1c4dd8c94 | 52 | case 2: OutC.write(4); |
Otakutronics | 0:cee1c4dd8c94 | 53 | OutD.write(2); |
Otakutronics | 0:cee1c4dd8c94 | 54 | break; |
Otakutronics | 0:cee1c4dd8c94 | 55 | case 3: OutC.write(2); |
Otakutronics | 0:cee1c4dd8c94 | 56 | OutD.write(2); |
Otakutronics | 0:cee1c4dd8c94 | 57 | break; |
Otakutronics | 0:cee1c4dd8c94 | 58 | case 4: OutC.write(3); |
Otakutronics | 0:cee1c4dd8c94 | 59 | OutD.write(1); |
Otakutronics | 0:cee1c4dd8c94 | 60 | break; |
Otakutronics | 0:cee1c4dd8c94 | 61 | case 5: OutC.write(2); |
Otakutronics | 0:cee1c4dd8c94 | 62 | OutD.write(4); |
Otakutronics | 0:cee1c4dd8c94 | 63 | break; |
Otakutronics | 0:cee1c4dd8c94 | 64 | case 6: OutC.write(0); |
Otakutronics | 0:cee1c4dd8c94 | 65 | OutD.write(5); |
Otakutronics | 0:cee1c4dd8c94 | 66 | break; |
Otakutronics | 0:cee1c4dd8c94 | 67 | case 7: OutC.write(3); |
Otakutronics | 0:cee1c4dd8c94 | 68 | OutD.write(10); |
Otakutronics | 0:cee1c4dd8c94 | 69 | break; |
Otakutronics | 0:cee1c4dd8c94 | 70 | case 8: OutC.write(0); |
Otakutronics | 0:cee1c4dd8c94 | 71 | OutD.write(0); |
Otakutronics | 0:cee1c4dd8c94 | 72 | break; |
Otakutronics | 0:cee1c4dd8c94 | 73 | case 9: OutC.write(3); |
Otakutronics | 0:cee1c4dd8c94 | 74 | OutD.write(0); |
Otakutronics | 0:cee1c4dd8c94 | 75 | break; |
Otakutronics | 0:cee1c4dd8c94 | 76 | } |
Otakutronics | 0:cee1c4dd8c94 | 77 | } |
Otakutronics | 0:cee1c4dd8c94 | 78 | |
Otakutronics | 0:cee1c4dd8c94 | 79 | int main() |
Otakutronics | 0:cee1c4dd8c94 | 80 | { |
Otakutronics | 0:cee1c4dd8c94 | 81 | BtnInc.mode(PullUp); |
Otakutronics | 0:cee1c4dd8c94 | 82 | BtnDec.mode(PullUp); |
Otakutronics | 0:cee1c4dd8c94 | 83 | |
Otakutronics | 0:cee1c4dd8c94 | 84 | BtnInc.rise(&ISR_Incrementar); |
Otakutronics | 0:cee1c4dd8c94 | 85 | BtnDec.rise(&ISR_Decrementar); |
Otakutronics | 0:cee1c4dd8c94 | 86 | |
Otakutronics | 0:cee1c4dd8c94 | 87 | unidades = 0; |
Otakutronics | 0:cee1c4dd8c94 | 88 | decenas = 0; |
Otakutronics | 0:cee1c4dd8c94 | 89 | |
Otakutronics | 0:cee1c4dd8c94 | 90 | while (true) { |
Otakutronics | 0:cee1c4dd8c94 | 91 | |
Otakutronics | 0:cee1c4dd8c94 | 92 | BinToDisplay(unidades); |
Otakutronics | 0:cee1c4dd8c94 | 93 | BjtUnd = 0; |
Otakutronics | 0:cee1c4dd8c94 | 94 | BjtDcn = 1; |
Otakutronics | 0:cee1c4dd8c94 | 95 | wait(0.02); |
Otakutronics | 0:cee1c4dd8c94 | 96 | BinToDisplay(decenas); |
Otakutronics | 0:cee1c4dd8c94 | 97 | BjtUnd = 1; |
Otakutronics | 0:cee1c4dd8c94 | 98 | BjtDcn = 0; |
Otakutronics | 0:cee1c4dd8c94 | 99 | wait(0.02); |
Otakutronics | 0:cee1c4dd8c94 | 100 | /* |
Otakutronics | 0:cee1c4dd8c94 | 101 | gpo = !gpo; // toggle pin |
Otakutronics | 0:cee1c4dd8c94 | 102 | led = !led; // toggle led |
Otakutronics | 0:cee1c4dd8c94 | 103 | wait(0.2f); |
Otakutronics | 0:cee1c4dd8c94 | 104 | */ |
Otakutronics | 0:cee1c4dd8c94 | 105 | } |
Otakutronics | 0:cee1c4dd8c94 | 106 | } |