アプリ版:「スタンプのみでお礼する」機能のリリースについて

7セグLEDを使って,押しボタンスイッチの押した回数(0~9)を7セグで表示するプログラムをHitec社のPIC CLiteで作りたいのですが,押しボタンを押しても回数がランダムで表示されてしまいます.どういったところを直したらいいでしょうか?

***プログラム***

ボタンスイッチを押したぶんだけ数値をカウントする

main{
while(1){
if(RA0==0){   …押しボタンのポート
++a;
{
if(a>=10){   …10回押したら0になる
a=0;
}
↓7セグに出力
RB4=a%2;
RB5=(a/2)%2;
RB6=(a/4)%2;
RB7=a/4;
}
}

A 回答 (2件)

コンパイラの問題よりも、ハードウエア構成が全く提示されていないので


答えようがないですね。
とりあえず、PB4~7の各ビットに7セグデコーダでもついているのでしょうか?
この部分が問題ないと仮定し、質問内容が「押しボタン回数がランダムに
記録されている」というところに限定しておきますね。
回路がどのように構成されているかはわかりませんが、最初の押しボタン検出ループで、押されている間はず~~とカウントアップするわけですね。
作成意図はたぶん押された回数を取得したいということでしょうから、これでは意図した結果にならないとおもいます。
ではどうすればよいのでしょうか。オーソドックスな解答では
微分をとればよい、ということになるのでしょう。
つまり、
前回のキーセンスでは押されていない
かつ
今回のキーセンスでは押されている
という条件をみればよいのです。
ただし、ハード的にボタンのチャタリングがとれていれば、の話ですが。
チャタリング防止回路がないばあいには、チャタリングがとれるのに十分な時間をおいて複数回の検出をおこなうことになるとおもいます。

とりあえず、答えられるのはこれくらいでしょうか。
がんばってくださいね。
    • good
    • 0
この回答へのお礼

ありがとうございます.
チャッタリング防止回路がないので,十分な時間を取ることにしました.

if(RA0==0){
DelayMs(10);
if(RA0==0){
++up_1;
}

}

お礼日時:2008/03/14 05:28

ボタンスイッチのポートの読み方がよくありません。


ポートを直接読んでいるのが誤りです。
ボタンスイッチのポートの読みをスイッチの立ち上がりエッジでスイッチONとするような処理を入れないとうまく行きません。
インターバル・タイマーを使ってボタンスイッチのポートの読みを立ち上がりエッジで捕らえるように改造するとうまく行くと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!