Using the rotation-with-one-fixed-player method in Ross Millikan's answer or in http://en.wikipedia.org/wiki/Round-robin_tournament#Scheduling_algorithm I believe we can write an explicit function to generate these pairings.
I started by trying the smaller case of $8$ teams. Consider the following starting configuration:
7 6 5 4 0 1 2 3
Holding team $7$ fixed and rotating everyone else clockwise, we find the following pairing list:
Round number (r) 0 1 2 3 4 5 6 ------------------- 0| 7 2 4 6 1 3 5 1| 6 7 3 5 0 2 4 2| 5 0 7 4 6 1 3 Team 3| 4 6 1 7 5 0 2 (t) 4| 3 5 0 2 7 6 1 5| 2 4 6 1 3 7 0 6| 1 3 5 0 2 4 7 7| 0 1 2 3 4 5 6
The pattern is evident. Team $7$'s opponent is simply $r$. For everyone else, the round $0$ opponent is $7-t$ and the following rounds the opponent increments by $2$ each time (with the exception of the round which would by that pattern have a team play itself, during which the team plays team $7$ instead).
The function is:
$f(t, r, n) = \left\{ \begin{array}{lr} n - 1 & : t = r\\ r & : t = n - 1\\ (2*r - t)\bmod{(n-1)} : \hspace{10 mm} t\neq r\hspace{4 mm} \And \hspace{4 mm} t\neq n - 1\\ \end{array} \right.$
where $t$ is team number, $r$ is round number, and $n$ is the number of teams. The function is defined for positive even integer $n$, nonnegative integer $t$ where $t, and nonnegative integer $r$ where $r.