【ステッピングモータでドレミファソラシドを鳴らすプログラム】
#define atdo 137602 //ド周波数
#define atre 122590 //レ周波数
#define atmi 109215 //ミ周波数
#define atfa 103086 //ファ周波数
#define atso 91839 //ソ周波数
#define atra 81819 //ラ周波数
#define atsi 72892 //シ周波数
#define btdo 68801 //高いド周波数
/マクロ**/
/グローバル変数**/
/メイン関数**/
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=0x0d0;//PIO2_4レジスタをIOポートとして使うための設定。2進数で00011010000を代入、 //3,4ビット目を10にしてプルアップ抵抗を使うモードに、10ビット目を0にして通常の入出力IOポートとして設定 LPC_GPIO2->DIR |= (1<<4); //GPIO2DIRレジスタの4ビット目だけを1にして、PIO2_4を出力IOポートに設定 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); //ステッピングモータ停止 while(getSW()==0){} //ボタンが押されるまで待つ LED(1); //緑LED点灯 Wait(1000); tstep(atdo); //ドを鳴らす Wait(1000); tstep(atre); //レ Wait(1000); tstep(atmi); //ミ Wait(1000); tstep(atfa); //ファ Wait(1000); tstep(atso); //ソ Wait(1000); tstep(atra); //ラ Wait(1000); tstep(atsi); //シ Wait(1000); tstep(btdo); //高いドを鳴らす Wait(1000); tstep(0); //ステッピングモータ停止
}