hace 15 años
//*************************************************
//PIC 18F252
//CONTROL MICROMOTOR EGEO CON DISPLAY 7 SEG. Y CONTROL PW
// 10-07-2010
//*************************************************
#include <p18f252.h>
#include <delays.h> // Libreria de demoras delays
#include <stdio.h> // Contiene a sprintf
#include <ctype.h>
//**************************************************
//DEFINICION DE PUERTOS
//**************************************************
#define RA0 PORTAbits.RA0 //SAL.: N/C
#define RA1 PORTAbits.RA1 //SAL.: N/C
#define RA2 PORTAbits.RA2 //SAL.: BUZZER
#define RA3 PORTAbits.RA3 //SAL.: MOTOR PULSO DE CONTROL
#define RA4 PORTAbits.RA4 //SAL.: N/C
#define RA5 PORTAbits.RA5 //SAL.: RELE INVERSOR
//**************************************************
#define RB0 PORTBbits.RB0 //ENT.: N/C
#define RB1 PORTBbits.RB1 //ENT.: DISPLAY DIGITO "E"
#define RB2 PORTBbits.RB2 //SAL.: DISPLAY DIGITO "D"
#define RB3 PORTBbits.RB3 //SAL.: DISPLAY DIGITO "C"
#define RB4 PORTBbits.RB4 //SAL.: DISPLAY DIGITO "B"
#define RB5 PORTBbits.RB5 //SAL.: DISPLAY DIGITO "A"
#define RB6 PORTBbits.RB6 //SAL.: DISPLAY DIGITO "F"
#define RB7 PORTBbits.RB7 //SAL.: DISPLAY DIGITO "G"
//**************************************************
#define RC0 PORTCbits.RC0 //SAL.: N/C
#define RC1 PORTCbits.RC1 //SAL.: PEDAL
#define RC2 PORTCbits.RC2 //SAL.: LED DE GIRO 1
#define RC3 PORTCbits.RC3 //SAL.: LED DE GIRO 2
#define RC4 PORTCbits.RC4 //SAL.: PULSADOR BAJA RPM
#define RC5 PORTCbits.RC5 //SAL.: PULSADOR POWER MOTOR
#define RC6 PORTCbits.RC6 //SAL.: PULSADOR SUBE RPM
#define RC7 PORTCbits.RC7 //SAL.: PULSADOR INVERSOR DE GIRO
//**************************************************
//CONFIGURACION DE PUERTOS
//**************************************************
void CONFIG (void)
{
TRISA=0X00; // Inicializo puerto A todos salidas
TRISB=0X01; // Inicializo RB7 salida, el resto salidas pero lo configura la libreria XLCD.H
TRISC=0XF2;
ADCON1=0X07; // Configuro: puerto A todo digital
PORTA=0;
PORTB=0;
PORTC=0;
INTCON=0X00;
INTCONbits.GIEH=0; //INTCON.GIEH=0;
return;
}
//**************************************************
//DISPLAY 7 SEG
//**************************************************
void DISPLAY (char b)
{
switch(b)
{
case 0:
{
RB7=0;
RB6=1;
RB5=1;
RB4=1;
RB3=1;
RB2=1;
RB1=1;
}; break;
case 1:
{
RB7=0;
RB6=0;
RB5=0;
RB4=1;
RB3=1;
RB2=0;
RB1=0;
}; break;
case 2:
{
RB7=1;
RB6=0;
RB5=1;
RB4=1;
RB3=0;
RB2=1;
RB1=1;
}; break;
case 3:
{
RB7=1;
RB6=0;
RB5=1;
RB4=1;
RB3=1;
RB2=1;
RB1=0;
}; break;
case 4:
{
RB7=1;
RB6=1;
RB5=0;
RB4=1;
RB3=1;
RB2=0;
RB1=0;
}; break;
case 5:
{
RB7=1;
RB6=1;
RB5=1;
RB4=0;
RB3=1;
RB2=1;
RB1=0;
}; break;
case 6:
{
RB7=1;
RB6=1;
RB5=0;
RB4=0;
RB3=1;
RB2=1;
RB1=1;
}; break;
case 7:
{
RB7=0;
RB6=0;
RB5=1;
RB4=1;
RB3=1;
RB2=0;
RB1=0;
}; break;
case 8:
{
RB7=1;
RB6=1;
RB5=1;
RB4=1;
RB3=1;
RB2=1;
RB1=1;
}; break;
case 9:
{
RB7=1;
RB6=1;
RB5=1;
RB4=1;
RB3=1;
RB2=0;
RB1=0;
}; break;
}
return;
}
//**************************************************
//BUZZER
//**************************************************
void BUZZER (void)
{
RA2=1;
Delay10KTCYx(15);
RA2=0;
return;
}
//**************************************************
//PROGRAMA PRINCIPAL
//**************************************************
void main(void)
{
char a, b, buffer, inversor, mo1, mo2, power;
int time, n0, n1,n2;
CONFIG();
a=10,
b=0;
power=0;
mo1=0;
RA5=0;
time=1;
buffer=0;
RC3=0;
RC2=1;
n0=0;
n1=0;
n2=0;
inversor=0;
BUZZER();
Delay10KTCYx(5);
BUZZER();
Delay10KTCYx(5);
DISPLAY(b);
//**************************************************
while(1)
{
if(RC6==1 && b<=8 && buffer==0) //PULSADOR SUBE RPM
{
b=b+1;
a=10-b;
buffer=1;
}
if(RC4==1 && b>=1 && buffer==0) //PULSADOR BAJA RPM
{
b=b-1;
a=10-b;
buffer=1;
}
if(RC5==1 && mo1==0 && buffer==0) //PULSADOR ENCIENDE EL MOTOR
{
mo1=1;
buffer=1;
}
if(RC5==1 && mo1==1 && buffer==0) //PULSADOR APAGA EL MOTOR
{
mo1=0;
buffer=1;
}
//****************************************************
if(RC1==1) //PEDAL ENCIENDE EL MOTOR
{
power=1;
}
if(RC1==0) //PEDAL APAGA EL MOTOR
{
power=0;
}
//****************************************************
if(RC7==1 && RA5==0 && buffer==0) //PULSADOR INVIERTE SENTIDO DE GIRO
{
RA5=1;
RC3=1;
RC2=0;
buffer=1;
inversor=1;
}
if(RC7==1 && RA5==1 && buffer==0) //PULSADOR INVIERTE SENTIDO DE GIRO
{
RA5=0;
RC3=0;
RC2=1;
buffer=1;
inversor=1;
}
//time=2*(a); //lo lleve mas abajo
if (buffer==1)
{
DISPLAY(b);
}
//***********************************
if(buffer>=1) //HABILITA EL BUZZER Y CUENTA 500 CICLOS ANTES DE HABILITAR LOS BOTONES
{
n1++;
RA2=1;
}
if(n1>=700) //if(n1>=500)
{
n1=0;
RA2=0;
buffer=0;
}
//***********************************
mo2=mo1+power;
if(mo2>=1) //ESTRUCTURA IF AGREGADA PARA EL PEDAL
{
mo2=1;
}
RA3=0;
time=2*(a);
for(n0=0;n0<=time;n0++) //DEMORA QUE HACE EL ANCHO DE PULSO EN BAJO
{
Delay1TCY();
}
if(inversor==1 && n2<=4000)
{
n2++;
RA3=0;
}
else
{
n2=0;
inversor=0;
RA3=mo2; //REEMPLACE MOTOR POR MOTOR2 PARA AGREGAR EL PEDAL
}
}
}
¿Realmente quieres cerrar esta reparación?
Sí
No
¿Realmente quieres reabrir esta reparación?
Sí
No
¿Realmente quieres borrar este post?
Sí
No