//----------------------------------------------------------------------------
// 【LEDのシフト点灯】
//----------------------------------------------------------------------------
#include <16f84a.h> // 使用デバイスの定義情報インクルード
#fuses HS, NOWDT, NOPROTECT // コンフィグレーション設定
#use delay (clock=20000000) // 発振子の周波数20MHz
//----------------------------------------------------------------------------
// I/Oポートの定義
//----------------------------------------------------------------------------
#byte RA = 5 // ポートAのアドレス5番地をRA文字変数
#byte RB = 6 // ポートBのアドレス6番地をRB文字変数
#define PATTERN 0b00000001 // 初期パタン設定
//----------------------------------------------------------------------------
// メイン関数
//----------------------------------------------------------------------------
main() {
byte pushsw;
byte data0;
set_tris_a(0xff); // ポートAはすべて入力に設定(1:Input)
set_tris_b(0x00); // ポートBはすべて出力に設定(0:Output)
data0 = PATTERN;
RB = 0xff; // 初期状態の点灯
while(1){ // 無限ループで繰り返す
if (input(PIN_A0)==0) // SW0を押されたとき
pushsw = 1;
if (input(PIN_A1)==0) // SW1を押されたとき
pushsw = 2;
if (input(PIN_A2)==0) // SW2を押されたとき
pushsw = 4;
if (input(PIN_A3)==0) // SW3を押されたとき
pushsw = 8;
if (input(PIN_A4)==0) // SW4を押されたとき
pushsw = 16;
switch(pushsw)
{
case 1 :rotate_left(&data0,1);
RB = ~data0; // SW Bit0 ON:左シフト
delay_ms(200);
break;
case 2 :rotate_right(&data0,1);
RB = ~data0; // SW Bit1 ON:右シフト
delay_ms(200);
break;
case 4 :rotate_left(&data0,1);
RB = ~data0; // SW Bit2 ON:左シフト
delay_ms(50);
break;
case 8 :rotate_right(&data0,1);
RB = ~data0; // SW Bit3 ON:右シフト
delay_ms(50);
break;
case 16:RB = 0xaa; // SW Bit4 ON:1010 1010
delay_ms(250);
RB = 0x55; // SW Bit4 ON:0101 0101
delay_ms(250);
break;
}
}
}
|