#include "p30f4013.h"
_FOSC(FRC) //osc
_FWDT(WDT_OFF)
_FBORPOR(MCLR_EN & PWRT_OFF) //MCLR enable & power-up timers off
_FGS(CODE_PROT_OFF)
void lcd_line1(void); //function prototypes
void lcd_line2(void);
void lcd_cmd(unsigned char);
void lcd_char(char);
void e_togg(void);
void delay(void);
void del_5ms(void);
void lcd_init(void);
void lcd_string();
char sentence[16] = "dsPIC 30F4013";
char *senpoint = sentence;
int main(void)
{
ADPCFG=0xffff;
TRISA=0; //PORTs all outputs
TRISB=0;
TRISD=0;
LATA=0;
LATB=0;
LATD=0;
delay();
delay();
delay();
delay();
lcd_init();
delay();
lcd_string();
for(;;){}
return 0;
}
void lcd_string(void)
{
while(*senpoint != '\0')
{
lcd_char(*senpoint);
senpoint++;
}
}
void lcd_line1(void)
{
lcd_cmd(0x80);
}
void lcd_line2(void)
{
lcd_cmd(0xc0);
}
void lcd_cmd(unsigned char letter)
{
LATB = letter; //put char in PORTB
del_5ms();
PORTB = PORTB << 5; //shift over to output high 4 bits on RB9,10,11,12
LATAbits.LATA11 = 0; //RS low
del_5ms();
e_togg(); //latch the data
PORTB = PORTB << 4; //shift over to output low 4 bits
LATAbits.LATA11 = 0; //RS low
e_togg(); //latch it
}
void lcd_char(char letter)
{
LATB = letter; //put char in PORTB
del_5ms();
PORTB = PORTB << 5; //shift over to output high 4 bits on RB9,10,11,12
LATAbits.LATA11 = 1; //RS high
del_5ms();
e_togg(); //latch the data
PORTB = PORTB << 4; //shift over to output low 4 bits
LATAbits.LATA11 = 1; //RS high
e_togg(); //latch it
}
void e_togg(void)
{
LATDbits.LATD9=1;
del_5ms();
LATDbits.LATD9=0;
}
void lcd_init(void)
{
LATB = 0x0600; //send 3
e_togg();
delay();
LATB = 0x0600;
e_togg();
del_5ms();
LATB = 0x0600;
e_togg();
del_5ms();
LATB = 0x0400; //send 2 - set 4-bit mode
e_togg();
del_5ms();
lcd_cmd(0x28); //set 4-bit mode and 2 lines
del_5ms();
lcd_cmd(0x10); //cursor move & shift left
del_5ms();
lcd_cmd(0x06); //entry mode = increment
del_5ms();
lcd_cmd(0x0d); //display on - cursor blink on
del_5ms();
lcd_cmd(0x01); //clear display
delay();
}
void delay(void)
{
int var1,var2;
for(var1=0;var1!=10;var1++)
{
for(var2=0;var2!=10000;var2++);
}
}
void del_5ms(void)
{
int var1,var2;
for(var1=0;var1!=10;var1++)
{
for(var2=0;var2!=2000;var2++);
}
}