# Java - <s>921</s> 907 characters
I build up each string seperately, storing each string in an array. 
Then loop through the array and print out each line.

    public class D{public static void main(String[]a){char[]z=a[0].toCharArray();char[]y=new char[3];y[0]=('H'==z[0]||'L'==z[0])?z[0]:'N';int o=(y[0]=='N')?0:1;y[1]=z[o++];y[2]=z.length>o?z[o]:'!';int n=y[1]<'C'?((int)(y[1]-'A'))+6:((int)(y[1]-'C'))+1;n=(y[0]=='N')?n+7:(y[0]=='H'?n+14:n);String s="     ";String b=" --- ";String[]out=new String[22];for(int i=1;i<=21;i+=2){out[i]=s;}for(int i=10;i<=18;i+=2){out[i]="-----";}out[20]=n>19?b:s;out[2]=n<3?b:s;out[4]=n<5?b:s;out[6]=n<7?b:s;out[8]=n<9?b:s;char c=out[n].charAt(0);char e=out[n].charAt(1);char[]h=new char[]{c,y[2]=='!'?e:y[2],'O',e,c};out[n]=new String(h);for(int i=0;i<22;i++){if(n<14&&i-n<4&&i>n)out[i]=out[i]!=null?out[i].substring(0,3)+"|"+out[i].charAt(4):s;else if(n>13&&n-i<4&&n>i)out[i]=out[i]!=null?out[i].substring(0,3)+"|"+out[i].charAt(4):s;}for(int i=21;i>=0;i--)if(!(i>n&&i>18||i<n&&i<10))System.out.println((out[i]==null)?s:out[i]);}}

Oh please don't hate me, it's my first time. I coulnd't find any faq/introduction so I hope my posting format is ok.
 Not sure how serious people got about character counts.... 
normal version of the code - extra is linebreak/spaces (1313 characters):


    public class DisplayNote
    {
      public static void main(String[] args)
      {
        char[] z=args[0].toCharArray();
        char[] y=new char[3];
        y[0]=('H'==z[0]||'L'==z[0])?z[0]:'N';
        int o=(y[0]=='N')?0:1;
        y[1]=z[o++];
        y[2]=z.length>o?z[o]:'!';

        int noteValue=y[1]<'C'?((int) (y[1] - 'A')) + 6:((int) (y[1] - 'C')) + 1;
        noteValue=(y[0]=='N')?noteValue+7:(y[0]=='H'?noteValue+14:noteValue);
        String s="     ";
        String b=" --- ";
        String[] out=new String[22];
        for (int i=1;i<=21;i+=2){out[i]=s;}
        for (int i=10;i<=18;i+=2){out[i]="-----";}
        out[20]=noteValue>19?b:s;
        out[2]=noteValue<3?b:s;
        out[4]=noteValue<5?b:s;
        out[6]=noteValue<7?b:s;
        out[8]=noteValue<9?b:s;

        char c=out[noteValue].charAt(0);
        char e=out[noteValue].charAt(1);
        char[] h=new char[]{c,y[2]=='!'?e:y[2],'O',e,c};
        out[noteValue]=new String(h);
        for (int i=0;i<22;i++)
        {
          if (noteValue<14&&i-noteValue<4&&i>noteValue)
            out[i]=out[i]!=null?out[i].substring(0,3)+"|"+out[i].charAt(4):s;
          else if (noteValue>13&&noteValue-i<4&&noteValue>i)
            out[i]=out[i]!=null?out[i].substring(0,3)+"|"+out[i].charAt(4):s;        
        }

        for (int i=21;i>=0;i--)
          if (!(i>noteValue&&i>18||i<noteValue&&i<10))
            System.out.println((out[i]==null)?s:out[i]);
      }
    }