C (clang), 279279 269 273 bytes
Too many printf()s; too many for loops.
(*P)()=printf;f(i,j,k,h){char*t="ckoOc;P5Z5UlolOoB0RXI=??_o7",*u=memset(callocu[66]={0};P(66"+%s+\n|%66c\n",1)memset(u,45,65);P("+%s+\n|%66c\n",u,'|');for(h=0,i=5;i--;P("|\n"))for(P("| "),j=0;j<16;j++,P(" "),h=h>2?t++,0:h+2)for(k=3;k--;)P("X XX XXXX"[k+((*t-48>>h)&3)*3]^88?" ":"%X",j);P("|%66c\n+%s+",'|',u);}