#define IR1 PORTB.B0
#define IR2 PORTB.B1
#define IR3 PORTB.B2
#define RC_SERVO1 LATC.B0
#define RC_SERVO2 LATC.B1
sbit LCD_RS at LATA.B2;
sbit LCD_RW at LATA.B1;
sbit LCD_EN at LATA.B0;
sbit LCD_D0 at LATD.B0;
sbit LCD_D1 at LATD.B1;
sbit LCD_D2 at LATD.B2;
sbit LCD_D3 at LATD.B3;
sbit LCD_D4 at LATD.B4;
sbit LCD_D5 at LATD.B5;
sbit LCD_D6 at LATD.B6;
sbit LCD_D7 at LATD.B7;
sbit LCD_RS_Direction at TRISA2_bit;
sbit LCD_RW_Direction at TRISA1_bit;
sbit LCD_EN_Direction at TRISA0_bit;
sbit LCD_D0_Direction at TRISD0_bit;
sbit LCD_D1_Direction at TRISD1_bit;
sbit LCD_D2_Direction at TRISD2_bit;
sbit LCD_D3_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
#define LCDPORT LATD
void dynamic_delay_10us(unsigned char delay);
void lcd_ini();
void lcdcmd(unsigned char);
void lcddata(unsigned char);
void main()
{
unsigned int delay=0;
unsigned int emptyspace=13;
unsigned IntToSTR(int input, unsigned char *output);
char text1[7];
char text2[]= "Space Available";
ADCON1=0x0F;
TRISA=0;
LATA=0;
TRISB=0b00000111;
TRISD=0;
TRISC.B0=0;
TRISC.B1=0;
LATC.B0=0;
LATC.B1=0;
delay=(43+0*148/180);
RC_SERVO1=1;
dynamic_delay_10us(delay);
RC_SERVO1=0;
dynamic_delay_10us(200-delay);
delay_ms(500);
delay=(43+0*148/180);
RC_SERVO2=1;
dynamic_delay_10us(delay);
RC_SERVO2=0;
dynamic_delay_10us(200-delay);
delay_ms(500);
while(1)
{
Delay_ms(100);
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
{
Lcd_Out(1,4,text1);
Lcd_Out(2,2,text2);
Delay_ms(1000);
}
IntToStr(emptyspace, text1);
if(IR1==1 && emptyspace>0)
{
delay=(43+111*148/180);
RC_SERVO1=1;
dynamic_delay_10us(delay);
RC_SERVO1=0;
dynamic_delay_10us(200-delay);
delay_ms(500);
}
else if(IR2==1 && emptyspace>0)
{
delay=(43+0*148/180);
RC_SERVO1=1;
dynamic_delay_10us(delay);
RC_SERVO1=0;
dynamic_delay_10us(200-delay);
emptyspace-=1;
}
else if(IR3==1 && emptyspace<13)
{
delay=(43+111*148/180);
RC_SERVO2=1;
dynamic_delay_10us(delay);
RC_SERVO2=0;
dynamic_delay_10us(200-delay);
delay_ms(5000);
delay=(43+0*148/180);
RC_SERVO2=1;
dynamic_delay_10us(delay);
RC_SERVO2=0;
dynamic_delay_10us(200-delay);
emptyspace+=1;
}
}
}
void dynamic_delay_10us(unsigned char delay)
{
for( ;delay>0;delay-=1)Delay_us(10);
}
void lcd_ini()
{
lcdcmd(0x38);
lcdcmd(0x0c);
lcdcmd(0x01);
lcdcmd(0x06);
lcdcmd(0x80);
}
void lcdcmd(unsigned char cmdout)
{
LCDPORT=cmdout;
LCD_RS=0;
LCD_RW=0;
LCD_EN=1;
Delay_ms(10);
LCD_EN=0;
}
void lcddata(unsigned char dataout)
{
LCDPORT=dataout;
LCD_RS=1;
LCD_RW=0;
LCD_EN=1;
Delay_ms(10);
LCD_EN=0;
}