こんにちは。
本日はプログラムを一部関数化して簡略化しました。
以前、2015年新人研修 マイクロマウス編(11)で作ったプログラムの
for(j=0; j<0xff; j++){ LED0 = LED1 = LED2 = LED3 = 1; //LED点灯 for(i = 0; i < 1000; i++); //時間待ち(空ループ) LED0 = LED1 = LED2 = LED3 = 0; //LED消灯 for(i = 0; i < 9000; i++); //時間待ち(空ループ) } for(j=0; j<0xff; j++){ LED0 = LED1 = LED2 = LED3 = 1; //LED点灯 for(i = 0; i < 2500; i++); //時間待ち(空ループ) LED0 = LED1 = LED2 = LED3 = 0; //LED消灯 for(i = 0; i < 7500; i++); //時間待ち(空ループ) } for(j=0; j<0xff; j++){ LED0 = LED1 = LED2 = LED3 = 1; //LED点灯 for(i = 0; i < 5000; i++); //時間待ち(空ループ) LED0 = LED1 = LED2 = LED3 = 0; //LED消灯 for(i = 0; i < 5000; i++); //時間待ち(空ループ) } for(j=0; j<0xff; j++){ LED0 = LED1 = LED2 = LED3 = 1; //LED点灯 for(i = 0; i < 7500; i++); //時間待ち(空ループ) LED0 = LED1 = LED2 = LED3 = 0; //LED消灯 for(i = 0; i < 2500; i++); //時間待ち(空ループ) } for(j=0; j<0xff; j++){ LED0 = LED1 = LED2 = LED3 = 1; //LED点灯 for(i = 0; i < 9000; i++); //時間待ち(空ループ) LED0 = LED1 = LED2 = LED3 = 0; //LED消灯 for(i = 0; i < 1000; i++); //時間待ち(空ループ) }
を関数化しました。
格闘すること1時間。
できたのがこちらです↓
#include "iodefine.h" #include "portdef.h" void PWM_LED(int H,int L){ int j,i; for(j=0; j<0xff; j++){ LED0 = LED1 = LED2 = LED3 = 1; //LED点灯 for(i = 0; i < L; i++); //時間待ち(空ループ) LED0 = LED1 = LED2 = LED3 = 0; //LED消灯 for(i = 0; i < H; i++); //時間待ち(空ループ) } } void main(void) { int i; int j; j=0x08; PFC.PEIORL.WORD = 0x000f; //LEDの繋がっているポートを出力に設定 //LEDを点滅させる while(1) //無限ループ { PWM_LED(1000,9000); PWM_LED(2500,7500); PWM_LED(5000,5000); PWM_LED(7500,2500); PWM_LED(9000,1000); } }
void main(void)は左から順にモドリ値、関数の名前、パラメーターを示しています。
関数化することでいちいち細かく書いていたことがすっきり数行に収まりました。
関数化をきちんとマスターしてきれいなプログラムが書けるよう頑張りたいと思います!
それでは本日のオフショットです。