例題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停止
}