Hi, i wrote a function to initialize an lcd. But in vmlab it doesn't seem to be working?
I just want to know if this code seems right to you or if i messed up somewhere.
//Function headers / macros
#define set(port, bit) port |= (1<<bit)
#define clear(port, bit) port &= ~(1<<bit)
#define pulse_ms(port, bit, length) (set(port,bit), _delay_ms(length), clear(port,bit))
//Defenitions
#define LCDdatap PORTA
#define LCDdatadr DDRA
#define LCDctrlp PORTG
#define LCDctrldr DDRG
#define LCDen 2
#define LCDrs 0
#define LCDrw 1
void LCDinit()
{
//Set data direction registers
LCDdatadr = 0xFF;
LCDctrldr |= 0x07;
//Initialization
clear(LCDctrlp, LCDen);
clear(LCDctrlp, LCDrs);
clear(LCDctrlp, LCDrw);
_delay_ms(20);
for(int a = 0; a < 3; a++)
{
LCDchar(0x30);
_delay_ms(20);
}
LCDchar(0x30);
_delay_ms(20);
LCDchar(0x08);
_delay_ms(20);
LCDchar(0x01);
_delay_ms(20);
LCDchar(0x06);
_delay_ms(20);
}
void LCDclear()
{
LCDchar(0x01);
_delay_ms(5);
}
void LCDhome()
{
LCDchar(0x10);
_delay_ms(5);
}
void LCDchar(char c)
{
LCDdatap = c;
pulse_ms(LCDctrlp, LCDen, 5);
}
Thanks so much in advance for taking a look
.