ステップ5
入力スキャン
スイッチの状態を読み取り、LEDへ出力する回路を作ってみよう。
■スイッチ入力回路図
この回路図は、PORT2でスイッチの状態を入力し、PORT1でLEDに出力する回路図です。なぜスイッチの状態をPORT2に入力したのかというとPORT2には、プルアップ抵抗が内蔵されており、実際に抵抗を使わなくてよくなるからです。この回路はスイッチが押されたらPORT2にLが入力され、押されなかったらプルアップ抵抗の働きにより、Hが出力されます。
■スイッチ入力プログラム
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;
}
■スイッチ入力回路完成写真