--- Quote Start ---
if I substitue n=7'b00000000; with n<=7'b0000000; the output becomes 0, can someone please explain this for me?
--- Quote End ---
I can't reproduce the said behaviour. I guess, you observed it with a different piece of code.
There will be of course behavioral differences related to blocking versus non-blocking assignment, as already explained.
n<=7'b0000000 will be ignored, because it's overwritten by n <= n +1
On the other hand it's a really bad coding style to combine blocking and non-blocking assignents for the same variable, as done in the original code for n. This causes at least confusion of the reader (and most likely the author too), and might be non-synthesizable in some cases.
The pitfalls of blocking assignments are visually described in the classical Cummings paper:
http://www.sunburst-design.com/papers/cummingssnug2000sj_nba.pdf