重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

PIC 16F688、mplab xc8を使っています。
LCDにprintfで5桁の整数を表示させたいのですが、65536以上はうまく表示できません。
5桁で99999を表示させるにはどうすればいいでしょうか?


例えば、このように書くと99999以上の数字が表示されてしまいますが、65535までは正常に表示されます。また、0も5桁で正常に表示されています。
unsigned short long a;
a=99999;
printf("%05.5lu",a);
SLEEP();


printfの%lが悪いのか、%uが悪いのか、他の指定が有るのか分かりません。

A 回答 (2件)

a の型を、32bit の unsigned long にしたらどうでしょうか。



a は、24bitしかないのに lu つまり32bit分データがあると解釈して範囲外のデータまで一緒に見ているのではないかと。で、その範囲外のデータがたまたま0か、他の計算の結果汚れているかで 意図したとおりの値が表示されるかわけのわからない値が表示されるかの違いになっている、そんな気がします。

この回答への補足

Classified様

%luに合わせて変数のbitを設定するわけですね。printfでlongで読めと指定してるのに、変数が24bitだから、他の領域を読んでしまってるのかぁ。

当初は5桁の10進数を表したいだけでしたので、安易に変数側を24ビットにすれば良いと考えていました。printfでshort longの指定が無いのも不可解でもありました。
最悪、7セグLEDを5桁で表示させる時のように、桁毎に割り算して、桁毎に表示させるしかないのかな?それとも、気持ち悪いけど65536で0に戻る仕様にするかな?と思っていました。

明日は外に出てしまいますので、明後日などに変数をunsigned longで試してみますね。まずは、鋭いご指摘ありがとうございました。

補足日時:2013/11/13 22:46
    • good
    • 0
この回答へのお礼

早く結果を知りたくて、出先から戻ってきた後に試してみましたら、unsigned longで成功しました。たいへんたいへん助かりました。
ありがとうございました。

お礼日時:2013/11/14 19:59

unsigned short long ってなんだよ.



あと, 「99999以上の数字が表示されてしまいますが、65535までは正常に表示されます」の意味がまったく分からん.

この回答への補足

unsigned short long これおかしいですか?すみません、私もおかしい理由が分かりません。

a=99999とするとLCDの表示は99999にはならず、7桁くらいの意味不明な数字がLCDに表示されてしまいます。5桁の指定をしているのに、5桁以上となってしまう事も不明です。

また、%luを、%uとした時は、65536は0となります。これは分からなくもないのですが、short longで24ビットにしてますので、16ビットで桁あがりしないでほしいのです。

他の数字の場合、a=0としたときはLCDは00000となります。a=1は00001になります。これで伝わりましたでしょうか?

補足日時:2013/11/12 17:57
    • good
    • 0

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