こんにちは。
本日は配列の基本を勉強しました。
ex)
char D[3];
カッコの中が配列の数(確保する領域)です。
Dが配列の名前で、名前は何をつけてもいいそうです。
D[0]=x;
D[1]=y;
D[2]=z;
↑これら3行は値を初期化する方法です。
char D[3];
D[0]=x;
D[1]=y;
D[2]=z;
この4行を簡単に書くと
char D[ ] = { x , y , z } ;
と1行にまとめることができます。
領域は0から数えるので3つの領域の時は、0と1と2と番号がつきます。
int i ; for ( i = 0 ; i < 3 ; i++ ;){ PE.DRL.BYTE.L=D[i]; }
とあったとき
i=0; 初期値を0に。
i < 3; ループされる条件。
i++; 次のカッコの処理方法
D[i]のi ループの中では変化します。
i++;の++は、このように後ろにあるときにはあとで足します。
i++;はi=i+1と書くこともできます。
ちなみにi- -;はi=i-1と書くことができます。
ここまで勉強したので教えていただいた通りにプログラムを書き
LEDの光らせ方を変化させようとしました。
がしかし!!!
光りません((+_+))
原因はこれでした↓
startic ROM領域で確保
これが抜けていたためでした。
RAM=Random Access Memory その場しのぎでいいもの(変数)。
ROM=Read Only Memory プログラムで消えてはいけないもの。
書き換えしないもの。
C言語の特徴として起動すると0初期化するというのがあります。
先ほどのstarticを書いていなかったために
定義の初期値が消えてしまい光らなかったのです。
そこを直し、プログラムを少し変えて自分好みに光らせてみます。
今日書いたのは以下のプログラムです。
int i; char j; static char D[]={0x07,0x0b,0x0d,0x0e,0x0e,0x0d,0x0b,0x07,0x06,0x09,0x06,0x09}; PFC.PEIORL.WORD = 0x000f; //LEDの繋がっているポートを出力に設定 //LEDを点滅させる while(1) //無限ループ { for(j=0;j<12;j++){ PE.DRL.BYTE.L=D[j]; for(i = 0; i < 0xfffff; i++); for(i = 0; i < 0xfffff; i++); }
ウェーブした後に、内側から外側に光るようにしました。
成功してよかったです!