秋月電子の32×16ドットLED マトリクス表示基板(完成品)

[写真/LEDマトリクス外観] まず、適当に接続します。このLEDマトリクスは完成基盤ですので、マイコンに信号線と電源をつなぐだけです。

void main(void)
{
  TLedMatrix LedMatrix( H8_3694 ) ;

  LedMatrix.puts( "TEST " ) ;

  while(1) ;
}

LED_MATRIX_ERR TLedMatrix::puts( char *str )
{
  LEDM.B.LATCH = 1 ;
  LEDM.B.STROBE = 0 ;
  while( true )
  {
    for( int i = 0; i < 16; i ++ ) //横列データ (d16 -> d1)
    {
      for( int n = 0; n < 16; n++ ) //縦列データ
      {
        /* 縦データ入力ビット ON */
         if( n == i ) bitOnOff( SIN1, ON, 0 ) ;

         /* LEDの右半分 */
         if( n < 8 ) {
           if( asciiChar[ str[1] - '0' ][i] & ( 1 << n ) ) {
             bitOnOff( SIN2, ON, 1 ) ;
           }
           if( asciiChar[ str[3] - '0' ][i] & ( 1 << n ) ) {
             bitOnOff( SIN3, ON, 1 ) ;
           }
         }
         else { /* LEDの左半分 */
           if( asciiChar[ str[0] - '0' ][i] & ( 1 << n - 8 ) ) {
            bitOnOff( SIN2, ON, 1 ) ;
           }
           if( asciiChar[ str[2] - '0' ][i] & ( 1 << n - 8 ) ) {
             bitOnOff( SIN3, ON, 1 ) ;
           }
         }

         bitOnOff( CLOCK, ON, 0 ) ;

         bitOnOff( SIN1, OFF, 0 ) ;
         bitOnOff( SIN2, OFF, 0 ) ;
         bitOnOff( SIN3, OFF, 0 ) ;

         bitOnOff( CLOCK, OFF, 0 ) ;
      }

      /* 1行完了 */
      bitOnOff( LATCH, OFF, 1 ) ;
      bitOnOff( LATCH, ON, 1 ) ;
    }
  }
  return SUCCESSED ;
}

void TLedMatrix::bitOnOff( LED_MATRIX_BIT bit, ON_OFF onOff, int sleepTime )
{
  switch( bit ) {
  case SIN1 :
    LEDM.B.SIN1 = onOff ;
    break ;
  case SIN2 :
    LEDM.B.SIN2 = onOff ;
    break ;
  case SIN3 :
    LEDM.B.SIN3 = onOff ;
    break ;
  case LATCH :
    LEDM.B.LATCH = onOff ;
    break ;
  case CLOCK :
    LEDM.B.CLOCK = onOff ;
    break ;
  case STROBE :
    LEDM.B.STROBE = onOff ;
    break ;
  default :
    break ;
  }
  if( sleepTime > 0 ) u_sleep( sleepTime ) ;
}

[写真/LED表示] TLedMatrix::puts()に固定長4文字のascii文字列を渡すとその文字を表示します。 本当は文字列がスクロールするようにしたっかのですが、使っているマイコン(H8/3694)のメモリが少なすぎて フォントを入れたらいっぱいになってしまいました。
仕方ないので、スクロールは諦めて時計に改造します。

時計に改造中。