Estoy tratando de conocer a mi PIC con un simple 'start-up' de los proyectos. Hice un flash de LED con un botón. Hice un BCD contar de 0 a 9 con un retraso.
Ahora quiero combinar los dos y también refractor el código un poco. Así que quiero que el BCD para incrementar en cada botón de empuje. Idealmente que iba a usar un interrumpe, pero no es necesario para esta aplicación. El siguiente paso será utilizar la interrumpe y tiene dos entradas (para arriba o abajo) y, a continuación, intercambiar los botones para un rortary codificador.
Las preguntas que tengo son:
- donde debo 'almacén' el valor de la corriente por el BCD? global var en la principal?
- ¿por qué recibo este tipo de redeclared de error y la función declarada implícito int advertencia?
El BCD es de PORTA, la entrada (activa baja) está en el puerto PORTB.RB0 Estos son los dos progams que realmente funcionan:
void main(void)
{
/* Configure the oscillator for the device */
ConfigureOscillator();
/* Initialize I/O and Peripherals for application */
InitApp();
while(1)
{
if (PORTBbits.RB0 == 0){
PORTAbits.RA2 = 1;
} else {
PORTAbits.RA2 = 0;
}
}
}
Tenga en cuenta que RA2 que estar conectado a una normal LED. Y para el contador:
void main(void)
{
/* Configure the oscillator for the device */
ConfigureOscillator();
/* Initialize I/O and Peripherals for application */
InitApp();
// lookup table for BCD
const uint8_t pat7seg[10] = {
// RA0:6 = ABCDEFG
// RA7:0 = FG-EDCBA
0b01000000, // 0
0b11111001, // 1
0b10000100, // 2
0b10010000, // 3
0b00011001, // 4
0b00010010, // 5
0b00000010, // 6
0b11111000, // 7
0b00000000, // 8
0b00010000, // 9
};
// current digit
uint8_t digit;
digit = 0;
while(1)
{
for(digit = 0; digit < 10; digit++){
PORTA = pat7seg[digit];
__delay_ms(2000);
}
}
}
Así que traté de "combinar" estas como:
void main(void)
{
/* Configure the oscillator for the device */
ConfigureOscillator();
/* Initialize I/O and Peripherals for application */
InitApp();
// current digit
uint8_t digit;
digit = 0;
while(1)
{
/* TODO <INSERT USER APPLICATION CODE HERE> */
/*for(digit = 0; digit < 10; digit++){
PORTA = pat7seg[digit];
__delay_ms(2000);
}*/
if (PORTBbits.RB0 == 0){
digit = updateBCD(digit);
}
}
}
uint8_t updateBCD(uint8_t myCount) {
/* define constant for lookup BCD */
// common anode so, inverted
const uint8_t pat7seg[10] = {
// RA0:6 = ABCDEFG
// RA7:0 = FG-EDCBA
0b01000000, // 0
0b11111001, // 1
0b10000100, // 2
0b10010000, // 3
0b00011001, // 4
0b00010010, // 5
0b00000010, // 6
0b11111000, // 7
0b00000000, // 8
0b00010000, // 9
};
if (myCount < 9){
myCount++;
} else {
myCount = 0;
}
PORTA = pat7seg[myCount];
return myCount;
}
errores: (908) estado de salida = 1 principal.c:46: advertencia: (361) función declarada implícito int make[2]: * [crear/XC8_16F628/producción/main.p1] Error 1 make[1]: * [.construir-conf] Error 2 principal.c:52: error: (984) tipo de redeclared hacer: * [.construir-impl] Error 2 principal.c:52: error: (1098) contradictorias declaraciones para la variable "updateBCD" (main.c:52)
Yo uso un PIC16F628 y MPLAB X IDE 2.00 con el compilador XC8.
La esperanza puede ayudar.