« 7-5 課題5 スイッチの使い方 ~その2~ | メイン | エレキジャックNo.4の付録基板 »

はてなブックマークに追加   7-6 課題6 スイッチの使い方 ~その3~

課題5のCソース・ファイルとHEXファイルはこちらです【LZH】


■ 課題6

 課題6はタクト・スイッチの応用です。プログラム開始時はDOWN_LEDが250ms間隔で点滅します。タクト・スイッチを押すとRIGHT_LEDに点滅が移動します。タクト・スイッチを押すごとにDOWN→RIGHT→UP→LEFTの順番で点滅が移動するプログラムを作成してください。新しい命令はありません。今までの知識で考えることができます。


TACTSW:ON→○○○○ ○○○●
○○○○ ○○●○
○○○○ ○●○○
○○○○ ●○○○

ex7-6.gif

// ex6.c
// PIC16F84A用

#include<16f84a.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20000000)
#define ON 1
#define OFF 0
#define TON 
#define TOFF 1
#byte  RA=5
#byte  RB=6
#bit IRSIG=RA.2
#bit TACTSW=RA.3
#bit DOWN_LED=RB.0
#bit UP_LED=RB.2
#bit RIGHT_LED=RB.1
#bit LEFT_LED=RB.3

void main()
{
  int led_data;
  set_tris_a(0x0c);
  set_tris_b(0x00);
  RB=0;
  led_data=0x01;
  RB=led_data;
  while(1){
    if(TACTSW==TON){
      led_data=★★;
      delay_ms(20);
    }
    if(led_data > 0x08){
      led_data=★★;
    }

    RB=led_data;
    delay_ms(250);
    RB=0x00;
    delay_ms(250);
  }
}

■ヒント1

if(TACTSW==TON){
led_data=★★;
delay_ms(20);
}

 タクト・スイッチのON,OFFは人間の感覚と逆になります。TONを0、TOFFを1と定義して、自然な感覚で考えられるようにしました。
 タクト・スイッチが押されたとき(TACTSW==TON)、led_dataを1ビットシフトします。課題3を参考にしてください。

■ヒント2

if(led_data > 0x08){
led_data=★★;
}

 LEFT_LEDが点灯すると次はled_dataが0x10になります。次はled_dataを0x01に戻して、DOWN_LEDを点灯させる処理がこの部分です。

 自分で考えたプログラムがうまく動いたときの喜びは最高ですね。


長野県飯田工業高校 竹内浩一

トラックバック

このエントリーのトラックバックURL:
http://www.eleki-jack.com/mt/mt-tb.cgi/458

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

カレンダ

2008年11月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

おすすめ書籍

会社案内
情報セキュリティおよび個人情報の取り扱いについて

コメントとトラックバックは、spamを予防するために、編集担当が公開の作業をするまで非公開になっています。
コメントはそれぞれ投稿した人のものです。

About

2007年10月18日 10:01に投稿されたエントリーのページです。

ひとつ前の投稿は「7-5 課題5 スイッチの使い方 ~その2~」です。

次の投稿は「エレキジャックNo.4の付録基板」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 4.1