0

温度を変えることができる非常にシンプルなアプリケーションを書いています。温度はLED(BCD形式)を使用して表示されます

私はKeilC51で次のコードを書きました。

#include< REG51.h>

sbit select = P1^7;
sbit up = P1^0;
sbit down = P1^1;
int data room = 24;

void main()
{   int prog;
    P2 &=0x00;
    P1 |=0x83;
    prog = 0;
    while (1)
    {
        if(select == 1)
            prog++;
        if(prog == 1)
        {
            if(up == 1)
                room++;
            if(down == 1)
                room--;

            P2 = room;
        }
    }
}

次に、これに準拠してIntel hexファイルを取得し、Edsimを使用してシミュレートしようとしました。

Cコードによると、prog = 1のとき、およびup(p1.0)またはdown(p1.1)のいずれかが押されたときに温度が変化するはずですが、シミュレーションでは、select(p1.7)とup/の両方の場合にのみ変化します。ダウンが押されました!

なぜこうなった?

4

3 に答える 3

2

prog++条件が真になるたびprogに値が1ずつ増加することを意味します。これは、条件が増分された最初の反復でのみ真になることを意味します。select == 1prog == 1

に変更prog++してみてくださいprog = 1

編集:コメントの議論によると、上昇した回数を追跡したい場合は、再びインクリメントするselect前に、再び0になるのを待つ必要があります。prog例えば:

int prev = select;
…
if (select != prev) {
    // select has changed from its previous state

    prev = select;
    if (prev) {
        // select went from 0 to 1
        ++prog;

        if (prog == 1) {
           // code to be executed once only on the first press
        } else if (prog == 2) {
           // code to be executed once only on the second press
        } else if (prog >= 3) {
           // code to be executed once on every subsequent press
        }
    } else {
        // select went from 1 to 0
    }
}

if (prev) {
   // select is being pressed

   if (prog == 1) {
       // code to be executed _continuously_ while select is held down
       // (after first press only)
   }
   // ...
}
于 2011-11-04T16:31:31.113 に答える
2

あなたのコードはあなたがしたいことを反映していないと思います。

if(select == 1)
            prog++;
        if(prog == 1)
        {

progは最初は0であるため、prog == 1は、初めてselectを押したときにのみtrueになります。

その時にそれはIFに入りそしてチェックします

if(up == 1)
                room++;
            if(down == 1)
                room--;

            P2 = room;

上または下を押した場合は、部屋の現在の温度を+1または-1に変更します。ボタンを使用してシミュレートするため、これは、選択を押したときにいずれかのボタンを押す必要があることを意味します。

その後、P2にデータを出力します

あなたがする必要があるのは:

while (1)
{
    if(select== 1)
    {   
        P2 = room;
    }


   if(up == 1)
       room++;
   if(down == 1)
       room--; 
}

それでも、温度を更新するにはselectを押し、温度を変更するにはup/downを押す必要があります。それがどのように機能するかについてあなた自身をより明確にすることができれば、多分私はもっと助けることができます。

于 2011-11-04T16:44:19.420 に答える
0

prog++に変更してみてくださいprog = 1。それが役に立ったら教えてください!

于 2012-05-30T16:05:18.763 に答える