例題2:2つのステッピングモータで威風堂々を演奏するプログラム

//PIO0_9 タイマ16を使ってパルス出力を行うための周波数の値

define hdos 64939 //ド#周波数

define hre 61295 //レ周波数

define hres 57854 //レ#周波数

define hmi 54607 //ミ周波数

define hfa 51543 //ファ周波数

define hfas 48650 //ファ#周波数

define hso 45919 //ソ周波数

define hsos 43342 //ソ#周波数

define hra 40909 //ラ周波数

define hras 38613 //ラ#周波数

define hsi 36446 //シ周波数

//PIO1_6 タイマ32を使ってパルス出力を行うための周波数の値

define atmi 109215 //ミ周波数

define atfa 103086 //ファ周波数

define atfas 97300 //ファ#周波数

define atso 91839 //ソ周波数

define atsos 86684 //ソ#周波数

define atra 81819 //ラ周波数

define atras 77227 //ラ#周波数

define atsi 72892 //シ周波数

define btdo 68801 //高いド周波数

define btdos 64940 //高いド#周波数

define btre 61295 //高いレ周波数

define btres 57855 //高いレ#周波数

define btmi 54608 //高いミ周波数

/マクロ**/

/グローバル変数**/

/メイン関数**/

void hstep (int ontei ){
LPC_TMR16B0->TCR=0; //タイマ16のカウント停止
LPC_TMR16B0->TCR |=(1<<1); //タイマ16カウントリセット「 LPC_TMR16B0->MR1=ontei; //周期を入力
LPC_TMR16B0->TCR =1; //タイマ16カウント開始
}

void tstep(int ontei){
LPC_TMR32B0->TCR=0; //タイマ32のカウント停止
LPC_TMR32B0->TCR |=(1<<1); //タイマ32カウントリセット LPC_TMR32B0->MR0=ontei; //周期を入力
LPC_TMR32B0->TCR=1; //タイマ32のカウント開始
}

int main (void)
{
const unsigned short MainCycle = 50; //50Hzに保つ
Init(MainCycle);

LPC_IOCON->PIO2_4=0xd0;//PIO2_4レジスタをIOポートとして使うための設定。2進数で00011010000を代入、
//3,4ビット目を10にしてプルアップ抵抗を使うモードに、10ビット目を0にして通常の入出力IOポートとして設定
LPC_IOCON->PIO2_5=0xd0;//PIO2_5レジスタをIOポートとして使うための設定。2進数で00011010000を代入、
//3,4ビット目を10にしてプルアップ抵抗を使うモードに、10ビット目を0にして通常の入出力IOポートとして設定

LPC_GPIO2->DIR |= (1<<4);   //GPIO2DIRレジスタの4ビット目だけを1にして、PIO2_4を出力IOポートに設定
LPC_GPIO2->DIR |= (1<<5);   //GPIO2DIRレジスタの4ビット目だけを1にして、PIO2_5を出力IOポートに設定

LPC_TMR16B0->PR = 1;        //2回ステップでカウントが1個上がるようにしている
LPC_TMR16B0->PWMC &= ~(1<<1);   //PIO0_9 MAT1をEM1により制御
LPC_TMR16B0->MCR |= (1<<4); //MR1によるリセット(MR1R=1)
LPC_TMR16B0->EMR |= (3<<6); //トグル出力を選択(EMC1="11")

LPC_TMR32B0->PWMC &=~(1<<0);    //EM0により制御 (PIO1_6)
LPC_TMR32B0->EMR |=(3<<4);      //MR0をトグル出力に設定
LPC_TMR32B0->MCR |=(1<<1);  //MR0によるTCリセット
LPC_TMR32B0->MCR &=~(1<<10);    //MR3によるTCリセット解除 これをしないとPWMが出ない

tstep(0);           //ステッピングモータ1停止
hstep(0);           //ステッピングモータ2停止

LPC_GPIO2->DATA &=~(1<<4);  //PIO2_4を0V(low)ステッピングモータ1時計回り
LPC_GPIO2->DATA &=~(1<<5);  //PIO2_5を0V(low)ステッピングモータ2時計回り

while(getSW()==0){}     //ボタンが押されるまで待つ
LED(1);//緑LED点灯

//以下威風堂々を演奏する

Wait(2000);

tstep(btre);
Wait(1000);
tstep(btdos);
Wait(250);
tstep(btre);
Wait(250);
tstep(btmi);
Wait(500);
tstep(atsi);
Wait(1000);
tstep(atra);
Wait(1000);
tstep(atso);
Wait(1000);
tstep(atfas);
Wait(250);
tstep(atso);
Wait(250);
tstep(atra);
Wait(500);
tstep(atmi);
Wait(1000);
Wait(1000);
tstep(atfas);
Wait(1000);
tstep(atsos);
Wait(250);
tstep(atra);
Wait(500);
tstep(atsi);
Wait(250);
tstep(btmi);
Wait(1000);
tstep(atra);
Wait(1000);
tstep(btre);
Wait(1000);
tstep(btre);
Wait(250);
tstep(btdos);
Wait(500);
tstep(atsi);
Wait(250);
tstep(atra);
Wait(2000);



tstep(btre);
hstep(hre);
Wait(1000);
tstep(btdos);
hstep(hmi);
Wait(250);
tstep(btre);
Wait(250);
tstep(btmi);
Wait(500);
tstep(atsi);
hstep(hfas);
Wait(1000);
tstep(atra);
hstep(hre);
Wait(1000);
tstep(atso);
hstep(hsi);
Wait(1000);
tstep(atfas);
hstep(hre);
Wait(250);
tstep(atso);
Wait(250);
tstep(atra);
Wait(500);
tstep(atmi);
hstep(hsos);
Wait(1000);
Wait(1000);
tstep(atfas);
hstep(hre);
Wait(1000);
tstep(atsos);
hstep(hmi);
Wait(250);
tstep(atra);
Wait(500);
tstep(atsi);
Wait(250);
tstep(btmi);
hstep(hdos);
Wait(1000);
tstep(atra);
hstep(hfas);
Wait(1000);
tstep(btre);
hstep(hsi);
Wait(1000);
tstep(btre);
hstep(hmi);
Wait(250);
tstep(btdos);
Wait(500);
tstep(atsi);
Wait(250);
tstep(atra);
hstep(hdos);
Wait(2000);

tstep(0);       //ステッピングモータ1停止
hstep(0);       //ステッピングモータ2停止

}