Atmega32 LCD program not working
It is suggested that you must mention the pin functions you allocated. But I realize the following. Please verify that.

You have used,
PD5-->R/W,
PD6-->RS,
PD7-->Trigger,   

Ok, The 1st mistake that I spotted was that you have confusion in how to set &amp; clear a particular bit.  

You have used PORTD |= (0&lt;&lt;6) &lt;-- What does this mean? Actually it does nothing. It simply leaves PORTD as it is....Oops !!!

Then you have also used PORT &amp;= (0&lt;&lt;6) &lt;--- What this means is, it simply clears all 8 bits in PORTD. Your intention was not this, right?

Here is the correct way ,

Setting a particular bit, suppose say, PD6 (your intended bit), use the following:

PORTD |= (1&lt;&lt;6);


Clearing the same bit,

PORTD &amp; = ~(1&lt;&lt;6);


Ok, now that this is fine, you also have a logical issue behind the "checkIfBusy" routine.

Actually all tha you have to do is given below in a sequence:

First assume   

PORTD as input, "DDRD=0x00";  
RS=0, "PORTD&amp;=~(1&lt;&lt;6);
RW=1, "PORTD|=(1&lt;&lt;5);


Then give a trigger, check if the 7th data bit is set, if set wait there, else quit from the loop.
It is how you have to write this.

while(PINC&gt;=0b10000000)
{

PD7|=(1&lt;&lt;7);
_delay_us(50);
PD&amp;&amp;=~(1&lt;&lt;7);
_delay_us(50);

}


SOME MORE:
You have to send ASCII characters to LCD.
So please send a char or string value. Sending Integer isn't going to help you fulfill your desire.