EZ-USBを使う(ソフトウェア編)

松原拓也氏著作の「わかるマイコン電子工作USB機器の製作」の「ミニキーボードの製作」のプログラムを改造します。ポイントのみ示しています。プログラム全体については本を参照して下さい。

改造前の元プログラムbulkloopの著作権はサイプレスセミコンダクタ社にあります。

キーテーブル

まずは解析結果から、キーテーブルを書き換えます。ミニキーボードは5×5マトリクスですが、このキーボードは8×11です。こんな感じ。

#define ROWMAX 11    // キーボード行数
#define COLMAX 8     // キーボード列数

BYTE xdata keytable[ROWMAX][COLMAX]={
   {58,83,60,78,62,64,66,77},   //[F1 ][Num][F3 ][PgD][F5 ][F7 ][F9 ][End]
. . . (中略) . . .
   {154,99, 0, 0, 0, 0, 0, 0}   //[SRq][Fn ][   ][   ][   ][   ][   ][   ]
};

xdada(またはcode)オプションを付けています。こうしないとレジスタにテーブルを作ろうとしてメモリ不足エラーになります。xdataについては本(P31)に詳しく説明されています。

9〜11ラインの処理

IOポートは8ビットなので足りない9〜11ラインはDポートの下位3ビットを割り当てて使います。キースキャンのはじめの辺りのコードは、

for(row=0;row<ROWMAX;row++){
    IOA = 0; OEA = 0;
    OED = (OED & 0xF0) | (0 & 0x0F); //9〜11ライン用(b0〜b2).上位4ビットに影響を与えない
    if(row < 8){
        OEA = 1 << row;    // スイッチ行の変更
    }else{
        OED = (OED & 0xF0) | ((1 << (row - 8)) & 0x0F);//上位4ビットに影響を与えない
    }
 . . . (続く) . . .

Dポートの上位4ビットは後で別の用途で使うため影響を与えないようにしています。ところでこの本は製作例や図は豊富なのですがプログラムの説明はあまり無いですよね。IOAは、IOportA。OEAは、OutEnableAport。という意味らしいです。なので2行目は、Aポートの全ビットをL(0V)、全ビットを出力不可(入力:ハイインピーダンス)にするということです。

Alt, Ctrl, Shiftの処理

エンドポイント1INの最初の+0バイト目(キーバッファin[0])に格納します。スイッチ列読み込み部分は、

for(col=0;col<COLMAX;col++){ // スイッチ列読み込み
    if((IOB & (1<<col))==0){ // スイッチON
        switch(keytable[row][col])
        {
        case 224: //Ctrl
            in[0] |= 1;//bit0
            break;
        case 225: //ShiftL
            in[0] |= 2;//bit1
            break;
        case 229: //ShiftR
            in[0] |= 32;//bit5
            break;
        case 226: //Alt
            in[0] |= 4;//bit2
            break;
. . . (続く) . . .

のようにします。

キーロールオーバー

本の例では、キーバッファin[4]だけを使っていますが、実際はin[2..7]の6個使える(6キーロールオーバー)のでそのように修正します。dscr.a51のReportDscrの15行目を、

    db  95h, 06h  ;; Report count (6)

のようにし、キースキャンのプログラムも変更します。キースキャンの前の方でj=2を定義しておき、スイッチ列読み込み部分の先ほどのswitch文のdefault行で、

. . . (続き) . . .
       default:
            in[j]  = keytable[row][col];
            if(j < 7)j++;
       }

USBキーボードの製作へ戻る
キーボードLEDの情報を取得するへ進む

関連リンク

USBキーボードのキーコードほか参考資料
http://www2d.biglobe.ne.jp/~msyk/keyboard/layout/usbkeycode.html


お名前: コメント:

トップ メニュー

This web page is described in Japanese, but you can read in English by translation site.

  • リンクに許可は不要です。
  • コメント欄は改行せず一行で入れてください。
  • スパム判定ではじかれた場合は、その後に「書込みました」旨のみのコメント等何らかの書き込み成功していただけると早く対応できます。
  • 非日本語対応ブラウザからは書き込みできません。