How exciting is this??!
Okay, okay, let's not get ahead of ourselves. At first glance it looks like this project is in its final moments. But look a little closer and you'll realize that...none of these squares are joined together.
There are countless ways to go about this, from seaming to joining with a stitch that mimics the granny square pattern you were using. But because in this blanket I used a whole bunch of different square patterns, and because after 81 squares I'm kind of burnt out on intricate hook manipulation, I personally like to go with a trusty old single crochet.
This is a super simple technique of joining two pieces of just about anything -- crocheted or knitted. Start by holding your two pieces together, so that the back sides are facing out. In this case, there is no back or front side, so as long as I keep my squares in the right order, I don't need to worry about which way they're facing.
Starting at one end, stick the hook through the corner stitch of both squares.
Now wrap the yarn you're using to join the squares around your hook and pull it through. (I like to use a simple black wool/bamboo blend to give just a little bit of contrast in the stitching between squares.)
Now the two corner stitches are connected, and you're all set up to keep on crocheting each stitch of the two squares together, one at a time, as you move down the edge of the square. Assuming you've been making the same size squares, this will lead your joining to match the squares up perfectly -- joining the second stitch of both edges together, then the third, then the fourth, etc.
Once you've made it all the way down the edge, you'll see a nice, strong crocheted seam like this.
Using this method does give you a "right side" and a "wrong side" of the work, as the single crochet stitch leaves a little ridge as it joins. This can be relaxed a little once you block it, and in this case, many of my squares have right and wrong sides as well, so this doesn't bother me.
The only key here is to make sure I'm keeping the wrong sides of the squares facing out as I'm joining, so that once the blanket is opened up, all you'll see between the squares is a nice clean join like this.
Continue all the way down the strip (i.e. one full "column" of the blanket) in this way. Eventually, you'll find yourself with a bunch of joined columns, that you can then join together in the same manner, this time crocheting down the long edges, until the joined piece slowly grows into your completed blanket.
Like I've said, this is a long process. Thankfully I have a dedicated cupboard reserved solely for large projects like this -- big enough to separate the finished columns from the squares-in-waiting, each labeled with its column number so I can keep them straight when it comes time to do the big joins!