LEDを点灯させてみる(5)
なんか、突然、サイトへのアクセスが急増したと思ったら、OsoScriptが海外のサイトで紹介されたようです。動画は言葉の壁を越えますね。ちゃんと、カタツムリのアイコンまで付いている。Good-Jobです。ver0.03をアップしないといけないなぁ。
ということで、DEMOJMでLED点灯の続きをば。
void putbyte_led(unsigned char c);
LEDを点灯させる関数の簡単説明をします。LEDは下図のようにそれぞれのポートに繋がっています。
回路を見てわかるように、ポートがLowになるとLEDは点灯するはずです。そこで、8個のLEDを1バイトの1ビットとして点灯する関数が、void putbyte_led(unsigned char c);です。引数 c の値をビット単位で点灯させます。
void putbyte_led(unsigned char c){ c = (unsigned char)(~(int)c); PTDD_PTDD2 = c & 0x01; PTFD_PTFD5 = (c >> 1) & 0x01; PTCD_PTCD4 = (c >> 2) & 0x01; PTCD_PTCD2 = (c >> 3) & 0x01; PTFD_PTFD1 = (c >> 4) & 0x01; PTFD_PTFD0 = (c >> 5) & 0x01; PTED_PTED3 = (c >> 6) & 0x01; PTED_PTED2 = (c >> 7) & 0x01; return ; }
LEDはLowのときに点灯するので、c を反転させて、それぞれのビットを各ポートにセットします。この関数を呼ぶことにより、LEDが点灯します。
タイマ割り込み関数
RTCタイマ割り込みの設定により、0.5s間隔で、割り込みが発生します。このとき呼ばれる関数がinterrupt VectorNumber_Vrtc void int_timer( void );です。この関数の中で、LEDの点灯と、点灯させる値の変更計算を行います。
interrupt VectorNumber_Vrtc void int_timer( void ){ RTCSC_RTIF = 1; //リアルタイム割り込みリクエストのクリア putbyte_led( C ); C += Step; }
RTCSC_RTIFは、前回説明したRTCレジスタの割り込みリクエストを初期化するビットです。
ここで、変数 C の値に Step値を加算します。Step値は押されたキーボードのによって変化します。
続けて、キー割り込みの説明です。
キー割り込み
キーの割り込みが発生したときに、呼ばれる関数がinterrupt VectorNumber_Vkeyboard void chk_key_stat( void );です。この関数の中で、押されているキーを判断して、Stepの値を変更しています。
interrupt VectorNumber_Vkeyboard void chk_key_stat( void ){ if( KBI1SC_KBF ){ KBI1SC_KBACK = 1; if (!PTGD_PTGD0) { Step = 1; } else if (!PTGD_PTGD1) { Step = -1; } else if (!PTGD_PTGD2) { Step = 0; } } }
下記に、もう一度、キーボードの回路図とキーボード割り込みのレジスタの表を示しておきます。関数内では、KBI1のキー割り込みが発生したのかどうかを、KBI1SC_KBFビットを見て調べます。そして、Trueであれば、どのキーが押されたかを、PTGのビットを見て、GNDに落ちているかどうかで調べます。このプログラムだと、同時押しは1つだけTrueになりますね。
そして、それぞれキーによって、Stepの値を変更します。
本当にやりたいことリスト
(ブログの終わりにやりたいことを書いておきたいと思います)
- 求職活動・・・このブログで興味を持った人一声かけてください。m(_ _)m
- Androidプログラム
- Web系のプログラム