ステップ5

入力スキャン

 スイッチの状態を読み取り、LEDへ出力する回路を作ってみよう。

スイッチ入力回路図

 この回路図は、PORT2でスイッチの状態を入力し、PORT1でLEDに出力する回路図です。なぜスイッチの状態をPORT2に入力したのかというとPORT2には、プルアップ抵抗が内蔵されており、実際に抵抗を使わなくてよくなるからです。この回路はスイッチが押されたらPORT2にLが入力され、押されなかったらプルアップ抵抗の働きにより、Hが出力されます。

図6-1 スイッチ入力回路図

スイッチ入力プログラム

main関数の中では、PORT2の下位4bitを抽出してPORT1に代入しています。

#include "iodefine.h"
#include "inthandler.h"
#include "intrinsics.h"

#ifdef CPPAPP
//Initialize global constructors
extern "C" void __main()
{
  static int initialized;
  if (! initialized)
    {
      typedef void (*pfunc) ();
      extern pfunc __ctors[];
      extern pfunc __ctors_end[];
      pfunc *p;

      initialized = 1;
      for (p = __ctors_end; p > __ctors; )
	(*--p) ();

    }
}
#endif 

void waitFor(unsigned short time){
	volatile unsigned short i;
	while(time-- > 0){
		for(i = 0; i < 800; i++)
			;
	}
}
void init(void){
	P1.DDR = 0xff;
	P2.DDR = 0xf0;
	P3.DDR = 0xff;
	P4.DDR = 0xff;
	P5.DDR = 0xff;
	P6.DDR = 0xf0;
	P8.DDR = 0xff;
	P9.DDR = 0xff;
	PA.DDR = 0xff;
	PB.DDR = 0xff;
	P2.PCR.BYTE = 0x0f; // Pull Up Enable
}
int main(void)
{

	init();
    while (1) {
    	P1.DR.BYTE = 0x0f & P2.DR.BYTE;
    }
    return 0;
}

スイッチ入力回路完成写真

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です