LessoC_11の答え 4.1. main()のwhile(1){}は キー押しが無いときに何秒でループするでしょうか?。 答: while(1){ key_in(); // キー入力とチャタリング処理 if(key_fix == 0){ } } key_inの中で1msecの遅延とキー入力処理、if()の実行で概ね1msecでループします。 4.2. key_in()のif(++key_chat == 10){} と if(key_chat++ == 10){} との働きの違いは何でしょうか?。 答: if(++key_chat == 10)は、key_chatを+1してから key_chat == 10 を判定します。 if(key_chat++ == 10)は、key_chat == 10 を判定した後にkey_chatを+1します。 key_chatは1msecの実施回数をカウントする為、key_chat == 10 の前に+1します。 1msec遅延 │ key_chat++; │ no < key_chat = 10?>───{...}をスキップ │yes {...}を実施 4.3. キー入力のチャッタリング除去 ──────┐ ┌─────── キー入力 └───────────┘ ────────┐ ┌───── key_fix └───────────┘ →├─┤← およそ何秒? キー入力が1から0になってから、key_fixが0になるまでおよそ何秒掛かりますか? 答: 約10msec。 key_in()関数のなかで if( key_new == key_old){ // 前回と同じ入力なら if(++key_chat == 10){ // 10msec連続してキー入力が安定したら key_fix = key_old; // キー確定 キー入力が10msec間 0 で安定した時にkey_fixの値が0になります。 4.4. LED出力タイミングチャート bin_cnt=0で、以下のキー押しがあった時のRB0,RB1,RB2,RB3の出力タイミングチャー トはどの様に変化するでしょうか? 答: ───┐ ┌───┐┌────┐ ┌── キー入力 └─────┘ └┘ └────┘ │←───→│ →││← │←──→│ 100msec 5msec 100msec ┌───────────────┐ RB0 ───┘ └─────── ┌─────── RB1 ───────────────────┘ RB2 ─────────────────────────── RB3 ─────────────────────────── − 以上 −