Hello, when I made my very first saw and square LFOs I got the same problem as you - clicks caused by fast (single-sample) changes of LFO output value - these happen once in a saw cycle and twice for a square cycle.
What I did is make the LFO forms smoother, to have a soft knee. Such a method for a saw wave, for example, means it grows from 0 to 1 in 1/20 of the perioud and then decays from 1 to 0 in the rest 19/20 of the period. I can send you the C code if you need, it implements basic LFO functions using very simple math. I hope this helps. Artemiy.
