- ベストアンサー
LEDをタイマー機能を使って点滅させるプログラムです
LEDをタイマー機能を使用し、点滅させるプログラムなのですが、 if(input(PIN_b0)){output_c(0b00001111);} delay_ms(20); {output_c(0b11110000);} : : と続ずいていくのですが、もっと点滅速度を速くするには どうすればよいのでしょうか? また、例えばスイッチ1が押されたら、そこのLEDだけを 繰り返し連続で点滅させるには、どのような感じで記述すればよいのでしょうか? 例えばでいいので、普通のC言語だったらどのように記述するのか 教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
例えば・・・ ポートAの0ビット目にスイッチがついてて、0の時オンだとしましょう。 そして、ポートCの0ビット目にLEDがついてて、0を出力すると光るとしましょう。 こんな感じでできませんか? ポートの入出力設定など初期処理 while(1) { /* 無限ループ */ if ((input_a() & 0b00000001)==0) { /* ポートAの0ビット目が0 */ output_c(input_c()^0b00000001); /* ポートCの0ビット目を反転 */ } else { output_c(0b00000001); /* ポートCの0ビット目に1を出す(LEDを消す) */ } 他の処理(もしあれば) delay_ms(20); /* ちょっと待つ */ } 入出力の関数は適当です。お使いのコンパイラに合わせて変えてください。
その他の回答 (2)
- kent85
- ベストアンサー率52% (38/73)
C があれなら、ASMで考えればいいんじゃないんですか? エスパーしてみたけど構成不明なので、うっさんくっさいです。 C + 擬似コード。 もしもスイッチA/B/Cは別PORTだったら do { /* 無限実行ループ */ sw_a = PORTから読み出す(スイッチA); if( sw_a は ONか? ) { /* SW A ON なので LED1 を 200回点滅させる */ int loop; for(loop = 0; loop < 200; loop++) { PORT出力(LED1 ON); delay_ms(20); /* 20msec? / 100msec? の点滅待ち==LED状態保持時間 */ PORT出力(LED1 OFF); delay_ms(20); /* 20msec? / 100msec? の点滅待ち==LED状態保持時間 */ } continue; } sw_b = PORTから読み出す(スイッチB); if( sw_b は ONか? ) { /* SW A と似た感じなので省略 */ continue; } sw_c = PORTから読み出す(スイッチC); if( sw_c は ONか? ) { /* SW A と似た感じなので省略 */ continue; } } while(1); /* 無限実行ループ */
- arain
- ベストアンサー率27% (292/1049)
http://okwave.jp/qa4293166.html http://okwave.jp/qa4293980.html でも書いてるんだけど、その質問内容じゃどうしようもないんだよ。 >例えばでいいので、普通のC言語だったらどのように記述するのか >教えてください。 そもそも、ANSIに準拠している「普通のC言語」というものには、ビットをそのまま計算したり、ポート出力なんて関数存在しないから。 まず、 ・自分がどのような環境で作成しているか、 ・(課題の?)プログラムがどのような動作をしているか ということを理解することから始めるべき。 特に後者についてはソースがどのように動作しているか理解できれば、おのずとどのようなことが足りないかわかるはず。 >また、例えばスイッチ1が押されたら、そこのLEDだけを >繰り返し連続で点滅させるには、どのような感じで記述すればよいのでしょうか? は、C言語以前に、設計手法の勉強からだね。