-
Notifications
You must be signed in to change notification settings - Fork 0
/
Control de nivel.c
159 lines (136 loc) · 5 KB
/
Control de nivel.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/*
PRACTICA 6 - "CONTROL DE NIVEL"
EQUIPO V
8H1 - ELECTRONICA DIGITAL V
DAVID MADRID NAPOLES 17100201
CARLOS CAMACHO MATA 17100057
HECTOR SAMUEL RIVERA RUIZ 17100287
06/10/2020
DEBE DE MOSTAR LOS NOMBRES Y REGISTROS DE LOS ALUMNOS Y EL NOMBRE DE LA PRACTICA,
AL PRESIONAR UN BOTON DEBE DE ENTAR A UN MENU DONDE TE PIDO SELECCIONAR UN SP
QUE SE DEBERA DE CONFIRMAR CON EL MISMO BOTON, AL CONFIRMAR DEBERA DE MOSTRAR
SI SE ESTA LLENANDO, VACIANDO, O SI EL NIVEL ESTA ESTABLE. EN ESTE MOMENTO SE
DEBERA DE PODER REGRESAR A CONFIRMAR EL SP
*/
#INCLUDE <16F887.H>
#DEVICE ADC=8
#USE DELAY(CLOCK=4000000)
#FUSES INTRC_IO,NOWDT,NOPUT,MCLR,NOPROTECT,NOCPD,NOBROWNOUT
#FUSES NOIESO,NOFCMEN,NOLVP,NODEBUG,NOWRT,BORV21
#USE FAST_IO(A)
#USE FAST_IO(B)
#USE FAST_IO(C)
#USE FAST_IO(D)
#INCLUDE <LCD1.C>
INT I = 0, AUX = 0, CUENTA = 0, SP = 0, V = 0;
FLOAT D = 0, K = 0.01961;
CHAR KEYPAD[16]={'1','2','3','A','4','5','6','B','7','8','9','C','*','0','#','D'};
INT REAL[6] = {1, 2, 3, 100, 4, 5};
VOID READ_US (){
D = READ_ADC();
V=D*K;
LCD_GOTOXY(1,1);
PRINTF(LCD_PUTC, "NIVEL = %1u L "V);
}
VOID TECLADO (){ //SE ENCARGA DE DETECTAR PULSACIONES EN EL TECLADO
AUX = 0XEF;
CUENTA = 0; //LLEVARA LA CUENTA, DETECTANDO LA CUENTA PRESIONADO
FOR(I=0;I<4;I++){//EN CADA ITERACION REVISA UNA FILA DIFERENTE
AUX=AUX>>1; //DESPLAZA UN CERO A LA DERECHA
OUTPUT_A((INPUT_A()&0XF0)|(AUX&0X0F));
IF(INPUT(PIN_A7)==0) //REVISDA ESTADO COLUMNA A7
BREAK;
CUENTA++;
IF(INPUT(PIN_A6)==0) //REVISDA ESTADO COLUMNA A6
BREAK;
CUENTA++;
IF(INPUT(PIN_A5)==0) //REVISDA ESTADO COLUMNA A5
BREAK;
CUENTA++;
IF(INPUT(PIN_A4)==0) //REVISDA ESTADO COLUMNA A4
BREAK;
CUENTA++;
DELAY_MS(20); //TIEMPO DE ESPERA NECESARIO PARA DETECTAR CAMBIOS
}
}
VOID MAIN (){ //FUNCION PRINCIPAL
SET_TRIS_A(0XF0); //DECLARAR SALIDAS
SET_TRIS_C(0X80); //DECLARAR
SET_TRIS_B(0X01); //DECLARAR ENTRADA ULTRASONICO
OUTPUT_A(INPUT_A()&0XF0); //LIMPIAR BITS DE SALIDA
LCD_INIT(); //INICIAR LCD
SETUP_ADC(ADC_CLOCK_INTERNAL);
SETUP_ADC_PORTS(sAN12);
SET_ADC_CHANNEL(12);
WHILE (TRUE){ //CICLO INFINITO
FOR(I = 0; I <= 2; I++){ // EN CADA ITERACION MUESTRA EL R Y N DE UN ALM
SWITCH (I){
CASE 0:
LCD_GOTOXY(1,1);
PRINTF(LCD_PUTC, "DAVID MADRID \n17100201 ");
BREAK;
CASE 1:
LCD_GOTOXY(1,1);
PRINTF(LCD_PUTC, "HECTOR RUIZ \n17100287 ");
BREAK;
CASE 2:
LCD_GOTOXY(1,1);
PRINTF(LCD_PUTC, "CAMACHO MATA \n17100057 ");
BREAK;
}
DELAY_MS(1000);
}
IF(INPUT(PIN_C7)==1){ //ENTRA AL CONTROL DE NIVEL
WHILE(INPUT(PIN_C7)==1) //MIENTRAS SE PRESIONE C7 NO HACE NADA
{LCD_GOTOXY(1,1);
PRINTF(LCD_PUTC, "SUELTE EL BOTON \nSELECT SP 1-5 ");}
WHILE(INPUT(PIN_C7)==0){ //AL SOLTAR C7 LEE EL ADC Y PIDE SP
SP:
READ_US (); //LEE ULTRA SONICO
TECLADO (); //LEE TECLADO MATRICIAL
IF(CUENTA<16){ //SI SE PRESIONA UNA TECLA
IF(CUENTA<6){
LCD_GOTOXY(1,2);
PRINTF(LCD_PUTC, "SP = %c ",KEYPAD[CUENTA]);
SP = REAL[CUENTA];
}ELSE{
LCD_GOTOXY(1,2);
PRINTF(LCD_PUTC, "SP INVALIDO 1-5 ");
}
}
WHILE(INPUT(PIN_C7)==1){ //CONFIRMAMOS SP
WHILE(INPUT(PIN_C7)==1){}
WHILE(INPUT(PIN_C7)==0){
READ_US ();
IF(SP == V){
LCD_GOTOXY(1,2);
PRINTF(LCD_PUTC, "SP = %u E"SP); //ESTABLE
}ELSE IF(SP < V){
LCD_GOTOXY(1,2);
PRINTF(LCD_PUTC, "SP = %u V"SP); //SE ESTA VACIANDO
}ELSE IF(SP > V){
LCD_GOTOXY(1,2);
PRINTF(LCD_PUTC, "SP = %u L"SP); //SE ESTA LLENANDO
}
}
WHILE(INPUT(PIN_C7)==1){
WHILE(INPUT(PIN_C7)==1){}
WHILE(INPUT(PIN_C7)==0){
GOTO CAMBIAR; //VA AL MAIN A IMPRIMIR ALGO EN PANTALLA
}
}
}
}
}
IF(CUENTA<16){ //SI SE PRESIONA UNA TECLA
WHILE(CUENTA<16){ //PRESIONADA LA TECLA
TECLADO (); //SIGUE DETECTANDOLA Y RESPONDE SIN MOSTAR EL MENU
}
}
}
CAMBIAR: //INDICA COLOCAR SP
LCD_GOTOXY(1,2);
PRINTF(LCD_PUTC, "SELECT SP 1-5 ");
DELAY_MS(400);
GOTO SP; //VA A LA PARTE DONDE SELECCIONAMOS SP
}