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