#include <p18cxxx.h>
#include <delays.h>
#pragma config WDT = OFF, LVP = OFF, OSC = HS, DEBUG = OFF
#define keypadPort PORTB // Keypad attached with PORT
#define keypad_DA PORTBbits.RB4 // Data Enable pin of Keypad Encoder
#define irPin LATBbits.LATB7
void main(void);
void ReadKeypad(void);
void SendSIRC(unsigned char Dev, unsigned char Cmd);
void PulseIt(unsigned char time);
ram unsigned int keypress_count = 0;
ram unsigned int keypad_loop_flag = 0;
ram unsigned char keyNum;
void main(void){
unsigned long i = 0;
ADCON1 = 0xFF;
TRISA = 0x00;
TRISB = 0b01111111;
while(1)
{
for(i = 0; i < 1000; i++)
{
SendSIRC(i,i);
Delay10KTCYx(100);
PORTA = i;
}
// ReadKeypad();
// PORTA = keyNum;
}
}
void SendSIRC(unsigned char Dev, unsigned char Cmd)
{
char x;
PulseIt(4); //Logic Start
for(x=0;x<7;x++){
if(Cmd & 0x01)
PulseIt(2); //Logic 1
else
PulseIt(1); //Logic 0
Cmd <<= 1;
}
for(x=0;x<5;x++){
if(Dev & 0x01)
PulseIt(2); //Logic 1
else
PulseIt(1); //Logic 0
Dev <<= 1;
}
Delay10KTCYx(90); //45mS Delay
}
void PulseIt(unsigned char time){
unsigned char x,y,z;
for(y = 0; y < time; y++)
{
for(x=0;x<24;x++) //600uS worth
{
irPin = 1;
Delay10TCY();
Nop();
Nop();
Nop(); //About 7uS
irPin = 0;
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Delay10TCY();
Delay10TCY(); //About 18uS
}
}
for(x=0;x<24;x++) //600uS worth
{
irPin = 0;
Delay10TCY();
Nop();
Nop();
Nop(); //About 7uS
irPin = 0;
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Delay10TCY();
Delay10TCY(); //About 18uS
}
}
void ReadKeypad()
{
if(keypad_DA != 1){keypad_loop_flag = 0;return;}
keyNum = keypadPort & 0x0F; // Stripping keypad related bits (Change to 0xF0 if keypad connected with MSB of PORT)
//keyNum >>= 4; // Shifting keypad bits to make them decimal equivalent (use in case keypad connected with MSB of PORT)
switch(keyNum)
{
case 0:
SendSIRC(1,0);
break;
case 1:
SendSIRC(2,0);
break;
case 2:
SendSIRC(3,0);
break;
case 3:
SendSIRC(1,4);
break;
case 4:
SendSIRC(1,5);
break;
case 5:
SendSIRC(1,6);
break;
case 6:
SendSIRC(1,7);
break;
case 7:
SendSIRC(1,8);
break;
case 8:
SendSIRC(1,9);
break;
case 9:
SendSIRC(1,10);
break;
case 10:
SendSIRC(1,11);
break;
case 11:
SendSIRC(1,12);
break;
case 12:
SendSIRC(1,13);
break;
case 13:
SendSIRC(1,14);
break;
case 14:
SendSIRC(1,15);
break;
case 15:
SendSIRC(1,16);
break;
default:
break;
}
Delay10KTCYx(1);
}
void lock_key(void)
{
while(keypad_DA == 1);
}