Вы находитесь на странице: 1из 5

1. /* TITULO: Contador ascendente/descendente con display de 7 segmentos.

2.
3. AUTOR:
4.
5.
6.
7. DESCRIPCIN DEL PROGRAMA
8.
9. Con este programa controlamos un conteo ascendente/descendente (del 0 al 9 y
viceversa) mediante
10. 2 pulsadores, y visualizamos el nmero en el que estamos a travs de un display de 7
segmentos.
11.
12. ESQUEMA DE CONEXION
13.
14. +-----+
15. +----[PWR]-------------------| USB |--+
16. | +-----+ |
17. | GND/RST2 [ ][ ] |
18. | MOSI2/SCK2 [ ][ ] A5/SCL[ ] |
19. | 5V/MISO2 [ ][ ] A4/SDA[ ] |
20. | AREF[ ] |
21. | GND[ ] |
22. | [ ]N/C SCK/13[ ] | Terminal "g" del display
23. | [ ]IOREF MISO/12[ ] | Terminal "f" del display
24. | [ ]RST MOSI/11[ ]~| Terminal "e" del display
25. | [ ]3V3 +---+ 10[ ]~| Terminal "d" del display
26. | [ ]5v -| A |- 9[ ]~| Terminal "c" del display
27. | [ ]GND -| R |- 8[ ] | Terminal "b" del display
28. | [ ]GND -| D |- |
29. | [ ]Vin -| U |- 7[ ] | Terminal "a" del display
30. | -| I |- 6[ ]~| PA(I)
31. | [ ]A0 -| N |- 5[ ]~| PA(D)
32. | [ ]A1 -| O |- 4[ ] |
33. | [ ]A2 +---+ INT1/3[ ]~|
34. | [ ]A3 INT0/2[ ] |
35. | [ ]A4/SDA RST SCK MISO TX>1[ ] |
36. | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] |
37. | [ ] [ ] [ ] |
38. | UNO_R3 GND MOSI 5V ____________/
39. \_______________________/
40.
41. NOTAS:
42. - Los pulsadores suelen tener dos pines, que vamos a denominar PA y PB (si es de 4
slo usamos 2 de ellos)
43. - pulsadorIncremento --> Terminales PA(I) y PB(I).
44. - pulsadorDecremento --> Terminales PA(D) y PB(D).
45. - Conexin PULL-DOWN de los pulsadores.
46. - PB(I) y PB(D) conectados a VCC.
47. - PA(I) y PA(D) conectados a GND a travs de una R=10K omhs (cada uno con su
resistencia por separado).
48. - El terminal "com" del display conectado a GND a travs de una R=220 ohms
49. */
50.
51. const int pulsadorIncremento = 6; // Pin digital para el pulsador de incremento
52. const int pulsadorDecremento = 5; // Pin digital para el pulsador de decremento
53. const int tiempoAntirrebote = 10; // Variable para almacenar el tiempo antirrebote
54.
55. // Variables necesarias para los clculos internos
56. int cuenta = 0;
57. int estadoPulsadorIncremento;
58. int estadoPulsadorAnteriorIncremento;
59. int estadoPulsadorDecremento;
60. int estadoPulsadorAnteriorDecremento;
61.
62. // Funcin antirrebote
63. boolean antirrebote(int pin)
64. {
65. int contador = 0;
66. boolean estado;
67. boolean estadoAnterior;
68.
69. do
70. {
71. estado = digitalRead(pin);
72. if(estado != estadoAnterior)
73. {
74. contador = 0;
75. estadoAnterior = estado;
76. }
77. else
78. {
79. contador = contador+ 1;
80. }
81. delay(1);
82. } while(contador < tiempoAntirrebote);
83.
84. return estado;
85. }
86.
87. // Funcin del display: Se reciben 7 variables y se asignan a cada una de las salidas
88. void display (int a, int b, int c, int d, int e, int f, int g)
89. {
90. digitalWrite (7,a);
91. digitalWrite (8,b);
92. digitalWrite (9,c);
93. digitalWrite (10,d);
94. digitalWrite (11,e);
95. digitalWrite (12,f);
96. digitalWrite (13,g);
97. }
98.
99. // Funcin que actualiza el nmero que aparece en el display de 7
segmentos
100. void actualizarNumero()
101. {
102. switch(cuenta){
103. case 0:
104. display (1,1,1,1,1,1,0); // Nmero "0"
105. break;
106. case 1:
107. display (0,1,1,0,0,0,0); // Nmero "1"
108. break;
109. case 2:
110. display (1,1,0,1,1,0,1); // Nmero "2"
111. break;
112. case 3:
113. display (1,1,1,1,0,0,1); // Nmero "3"
114. break;
115. case 4:
116. display (0,1,1,0,0,1,1); // Nmero "4"
117. break;
118. case 5:
119. display (1,0,1,1,0,1,1); // Nmero "5"
120. break;
121. case 6:
122. display (1,0,1,1,1,1,1); // Nmero "6"
123. break;
124. case 7:
125. display (1,1,1,0,0,0,0); // Nmero "7"
126. break;
127. case 8:
128. display (1,1,1,1,1,1,1); // Nmero "8"
129. break;
130. case 9:
131. display (1,1,1,0,0,1,1); // Nmero "9"
132. break;
133. }
134. }
135.
136.
137. void setup()
138. {
139. // Asignacin de los pines digitales para el display de 7 segmentos como
salidas
140. pinMode(7, OUTPUT);
141. pinMode(8, OUTPUT);
142. pinMode(9, OUTPUT);
143. pinMode(10, OUTPUT);
144. pinMode(11, OUTPUT);
145. pinMode(12, OUTPUT);
146. pinMode(13, OUTPUT);
147.
148. // Asignacin de los pines digitales para los pulsadores como entradas
149. pinMode(pulsadorIncremento, INPUT);
150. pinMode(pulsadorDecremento, INPUT);
151. }
152.
153.
154. void loop()
155. {
156. // Leemos el estado del pulsador de incremento
157. estadoPulsadorIncremento = digitalRead(pulsadorIncremento);
158. // Si hay un cambio en el estado del pulsador de incremento
159. if(estadoPulsadorIncremento != estadoPulsadorAnteriorIncremento)
160. {
161. // y si se ha eliminado ya el rebote del pulsador de incremento
162. if(antirrebote(pulsadorIncremento))
163. {
164. // Se incrementa la cuenta en una unidad
165. cuenta++;
166. // Si la cuenta es mayor que 9, permanece en 9.
167. if(cuenta > 9)
168. {
169. cuenta = 9;
170. }
171. }
172. }
173. // Actualizamos el estado anterior del pulsador de incremento
174. estadoPulsadorAnteriorIncremento = estadoPulsadorIncremento;
175.
176. // Leemos el estado del pulsador de decremento
177. estadoPulsadorDecremento = digitalRead(pulsadorDecremento);
178. // Si hay un cambio en el estado del pulsador de decremento
179. if(estadoPulsadorDecremento != estadoPulsadorAnteriorDecremento)
180. {
181. // y si se ha eliminado ya el rebote del pulsador de decremento
182. if(antirrebote(pulsadorDecremento))
183. {
184. // Se decrementa la cuenta en una unidad
185. cuenta--;
186. // Si la cuenta es menor que 0, permanece en 0.
187. if(cuenta < 0)
188. {
189. cuenta = 0;
190. }
191. }
192. }
193. // Actualizamos el estado anterior del pulsador de decremento
194. estadoPulsadorAnteriorDecremento = estadoPulsadorDecremento;
195.
196. // Actualizamos el nmero que aparece en el display de 7 segmentos
197. actualizarNumero();
198. }

Вам также может понравиться