# Java - 921 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[] 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 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[] q=new String[22]; for (int i=1;i<=21;i+=2){q[i]=s;} for (int i=10;i<=18;i+=2){q[i]="-----";} q[20]=n>19?b:s; q[2]=n<3?b:s; q[4]=n<5?b:s; q[6]=n<7?b:s; q[8]=n<9?b:s; char c=q[n].charAt(0); char e=q[n].charAt(1); char[] h=new char[]{c,y[2]=='!'?e:y[2],'O',e,c}; q[n]=new String(h); for (int i=0;i<22;i++){if (n<14&&i-n<4&&i>n) q[i]=q[i]!=null?q[i].substring(0,3)+"|"+q[i].charAt(4):s; else if (n>13&&n-i<4&&n>i) q[i]=q[i]!=null?q[i].substring(0,3)+"|"+q[i].charAt(4):s;} for (int i=21;i>=0;i--) if (!(i>n&&i>18||i<n&&i<10)) System.out.println((q[i]==null)?s:q[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]);
      }
    }