Well without knowing exactly how the LCD works I couldn't say. Plus you haven't really told me what is happening, that is even more useful information.
By the looks of your code, you have a 20 clock initialisation sequence, you then have a 6 clock sequence from count2 which sends some kind of instruction to the LCD followed by the value bin.
bin is incremented on the 5th or 6th count of count 2 (I never use variables, but it looks to me that bin will change when count2=6 rather than the 5 that you probably wanted, but either way the code should still work).
why do I think it changes on the 6th count? because variables change immediately, and signals change based on your wait statement. in this case, because the if (count2 = 5) statement is before the code when count2 is incremented. Count2 will only = 5 on the next clock cycle, and immediately following this the count2 will change to 6.
Since bin is a clocked signal it won't change till the next rising edge, which will be the rising edge at which count2 will get set to 7. In this case it doesn't matter since you don't really care when bin changes as long as the frequency that it changes is the same as when its used. But beware of this in places where it might matter. I always say don't use variables until the timing of signals etc is just comes natural to you.
Anyway,
So what you end up with is a number that increments 0-9 continuously. Assuming that all the LCD values are correct, you may want to check through them.
--