PIRCODE
PIRCODE
#include <xc.h>
#include <htc.h>
#include "CONFIG.h"
#include "LCD_HEADER.h"
int i;
void main()
TRISD = 0xff;
TRISB=TRISC0=TRISC1=TRISC2=0;
PORTB= 0x00;
I2C_Master_Init();
LCD_Init(0x4E);
while(1) {
LCD_Clear();
LCD_Set_Cursor (1,4);
LCD_Write_String("APPROACHING:");
LCD_Set_Cursor (2,6);
LCD_Write_String("TAO");
MP = 1;
__delay_ms(7000);
} else {
LCD_Clear();
MP = 0;
while(2) {
LCD_Clear();
LCD_Set_Cursor (1,4);
LCD_Write_String("APPROACHING:");
LCD_Set_Cursor (2,6);
LCD_Write_String("TAO");
MP = 1;
__delay_ms(7000);
} else {
LCD_Clear();
MP = 0;
}
}
}
LCD.HEADER.H
void I2C_Master_Init();
void I2C_Master_Wait();
void I2C_Master_Start();
void I2C_Master_RepeatedStart();
void I2C_Master_Stop();
void I2C_ACK();
void I2C_NACK();
void LCD_Write_Char(char);
void LCD_Write_String(char*);
void Backlight();
void noBacklight();
void LCD_SR();
void LCD_SL();
void LCD_Clear();
//--------------------------------------------------
void I2C_Master_Init()
SSPCON = 0x28;
SSPCON2 = 0x00;
SSPSTAT = 0x00;
SSPADD = ((_XTAL_FREQ/4)/I2C_BaudRate) - 1;
SCL_D = 1;
SDA_D = 1;
void I2C_Master_Wait()
void I2C_Master_Start()
I2C_Master_Wait();
SEN = 1;
void I2C_Master_RepeatedStart()
I2C_Master_Wait();
RSEN = 1;
}
void I2C_Master_Stop()
I2C_Master_Wait();
PEN = 1;
void I2C_ACK(void)
I2C_Master_Wait();
void I2C_NACK(void)
I2C_Master_Wait();
I2C_Master_Wait();
SSPBUF = data;
SSPIF = 0;
return ACKSTAT;
}
unsigned char I2C_Read_Byte(void)
I2C_Master_Wait();
I2C_Master_Wait();
//======================================================
//-----------------------------------------------
i2c_add = I2C_Add;
IO_Expander_Write(0x00);
__delay_ms(30);
LCD_CMD(0x03);
__delay_ms(5);
LCD_CMD(0x03);
__delay_ms(5);
LCD_CMD(0x03);
__delay_ms(5);
LCD_CMD(LCD_RETURN_HOME);
__delay_ms(5);
LCD_CMD(0x20 | (LCD_TYPE << 2));
__delay_ms(50);
LCD_CMD(LCD_TURN_ON);
__delay_ms(50);
LCD_CMD(LCD_CLEAR);
__delay_ms(50);
LCD_CMD(LCD_ENTRY_MODE_SET | LCD_RETURN_HOME);
__delay_ms(50);
I2C_Master_Start();
I2C_Master_Write(i2c_add);
I2C_Master_Write(Data | BackLight_State);
I2C_Master_Stop();
Nibble |= RS;
IO_Expander_Write(Nibble | 0x04);
__delay_us(50);
{
RS = 0; // Command Register Select
LCD_Write_Char(Str[i]);
switch(ROW)
case 2:
LCD_CMD(0xC0 + COL-1);
break;
case 3:
LCD_CMD(0x94 + COL-1);
break;
case 4:
LCD_CMD(0xD4 + COL-1);
break;
// Case 1
default:
LCD_CMD(0x80 + COL-1);
void Backlight()
BackLight_State = LCD_BACKLIGHT;
IO_Expander_Write(0);
void noBacklight()
BackLight_State = LCD_NOBACKLIGHT;
IO_Expander_Write(0);
void LCD_SL()
LCD_CMD(0x18);
__delay_us(40);
void LCD_SR()
LCD_CMD(0x1C);
__delay_us(40);
void LCD_Clear()
LCD_CMD(0x01);
__delay_us(40);
}
CONFIG.H
// CONFIG
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit
(RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code
protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all
program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
#include <xc.h>