3.1.1.2. サンプルプログラム

マイコン入門spacer ad
トップページに戻る(マイコン徹底入門:STM32で始めるARM/Cortex-M3組み込み開発)
「マイコン徹底入門」とは? |  「マイコン徹底入門」を読む |  ダウンロード |  掲示板 |  筆者の自己紹介


Previous: 3.1.1.1. マトリクスキーパッドとは

Up: 3.1.1. マトリクスキーパッド

Next: 3.1.2. リードスイッチ


マイコン徹底入門:周辺回路編:STM32のペリフェラルを活用: 3. タイマ: 3.1. 入力スキャニング処理: 3.1.1. マトリクスキーパッド:

3.1.1.2. サンプルプログラム

サンプルプログラム

tim4_scan_keypad

8?42 回路図

 今回は 8?41のように接続します。そのためGPIOの初期化では、GPIOX0?3までを入力に、GPIOX4?6までを出力に設定しています。スキャニング処理の基本部分はこれまでのサンプルプログラムと同じです。キーの状態を読み取る部分がマトリクスキーパッド特有の処理になっています。

for (i=2;i<3;i--)

? {

??? GPIO_Write (GPIOX_PORT, 0b01000000 >> i);

??? SW0_present_state = (GPIO_ReadInputData(GPIOX_PORT) & 0x000F) << (i*4)

?????????????????????? ?| SW0_present_state;

? }

 まず各行に対応するビットをHレベルにします。その後、入力用のビットを読み取っています。このプログラムではキーパッドの各キーの状態をビットに格納することにしましたので、入力のデータをシフトさせながらORSW0_present_state変数に格納しています。単一のキーの状態を読み取るだけであれば読み取った時点でどのキーの入力だったのかを判定してしまってもよいのですが、こうしておくと、複数のキーの同時入力やキーロールオーバーにも対応できます。

 キーパッドの状態を読み取れるようになれば、ユーザから数字の入力を受け付けることができることはもちろん、各キーにいろいろな機能を割り当てて操作させることもできるでしょう。

コラム8?8キーロールオーバー

 キーロールオーバーというのは、あるキーが押された後にそのキーが離される前に別のキーが入力される状態のことです。人間の指は、電卓やキーボードなどを素早くタイピングしていると、キーを続けて押すときに、あるキーを離す前に別のキーを入力していることが多くあります。これを正常に読み取れないと、人間の側はちゃんと入力したと思っていても、機械の側が読み取れないのです。複数のキーが押された状態というのは機械の側から見れば、複数のキーのビットがセットされている状態ですから、これだけではどのキーが最後に押されたのかがわかりません。そこで前に状態を読み取ったときの状態と比較して、変化している部分のビットが新たに押されたキーだと判定するようにします。ちなみにN個の連続した押下に対応できることをNキーロールオーバーといいます。経理用の電卓などでは3キーロールオーバーぐらいに対応していることが多いようです。


Previous: 3.1.1.1. マトリクスキーパッドとは

Up: 3.1.1. マトリクスキーパッド

Next: 3.1.2. リードスイッチ


このページはITと知的財産の法律情報「法務ネット」の管理人が制作・運営しています。
_Toc266801166