久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3133|回復(fù): 6
收起左側(cè)

單片機(jī)C語言while循環(huán)為假,為什么一直跳不出去(就是松手確定那里)

[復(fù)制鏈接]
ID:195361 發(fā)表于 2020-5-22 22:09 | 顯示全部樓層 |閱讀模式
#include "reg52.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器

typedef unsigned int u16;          //對數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned char u8;

  char num;
  char  temp;
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
u8 keyvalue;
void delay(u16 i)
{
  while(i--);

}

void main()
{         num=0;          P2=0;
        while(1)
        {
          P1=0xfe;
          temp=P1;
          temp=temp&0xf0;
          while(temp!=0xf0)
          {
            delay(500);
                temp=P1; //
                temp= temp&0xf0;
                while(temp!=0xf0)
  {           temp=P1;         //此句非常重要
          switch(temp)
            {
             case 0xee : num=1;
                    break;
                   case 0xde : num=2;
                    break;
                case 0xbe : num=3;
                    break;
                case 0x7e : num=4;
                    break;
            }
                while( temp!=0xf0) //松手確定
                {
                   temp=P1;
                   temp=temp&0xf0;
                }        
                  
                 P0=0;
           P2=smgduan[num];
   }
          }         
                   P1=0xfd;
          temp=P1;
          temp=temp&0xf0;
          while(temp!=0xf0)
          {
            delay(500);
                temp=P1; //
                temp= temp&0xf0;
                while(temp!=0xf0)
  {           temp=P1;         //此句非常重要
          switch(temp)
            {
             case 0xed : num=5;
                    break;
                   case 0xdd : num=6;
                    break;
                case 0xbd : num=7;
                    break;
                case 0x7d : num=8;
                    break;
            }
        /*        while(temp!=0xf0)
                {
                   temp=P1;
                   temp=temp&0xf0;
                }        */
                  
                 P0=0;
           P2=smgduan[num];
   }
          }
          P1=0xfb;
          temp=P1;
          temp=temp&0xf0;
          while(temp!=0xf0)
          {
            delay(500);
                temp=P1; //
                temp= temp&0xf0;
                while(temp!=0xf0)
  {           temp=P1;         //此句非常重要
          switch(temp)
            {
             case 0xeb : num=1;
                    break;
                   case 0xdb : num=2;
                    break;
                case 0xbb : num=3;
                    break;
                case 0x7b : num=4;
                    break;
            }
                while(temp!=0xf0)
                {
                   temp=P1;
                   temp=temp&0xf0;
                }
                  
                  
                 P0=0;
           P2=smgduan[num];
   }
          }
           P1=0xf7;
          temp=P1;
          temp=temp&0xf0;
          while(temp!=0xf0)
          {
            delay(500);
                temp=P1; //
                temp= temp&0xf0;
                while(temp!=0xf0)
  {           temp=P1;         //此句非常重要
          switch(temp)
            {
             case 0xe7 : num=1;
                    break;
                   case 0xd7 : num=2;
                    break;
                case 0xb7 : num=3;
                    break;
                case 0x77 : num=4;
                    break;
            }
                while(temp!=0xf0)
                {
                   temp=P1;
                   temp=temp&0xf0;
                }
                  
                  
                 P0=0;
           P2=smgduan[num];
   }
          }
        }
}


1.jpg
回復(fù)

使用道具 舉報(bào)

ID:235200 發(fā)表于 2020-5-23 01:44 | 顯示全部樓層
while(temp!=0xf0)不應(yīng)該嵌套使用
回復(fù)

使用道具 舉報(bào)

ID:420836 發(fā)表于 2020-5-23 04:04 | 顯示全部樓層
嵌入了許多WHILE條件循環(huán),如果使用IF條件進(jìn)行替換應(yīng)加以改進(jìn)。
回復(fù)

使用道具 舉報(bào)

ID:23064 發(fā)表于 2020-5-23 06:10 來自觸屏版 | 顯示全部樓層
按鍵處理不是這樣寫的,正常來說應(yīng)該根據(jù)IO狀態(tài)的變化做debounce,不要死等。while(temp!=0xf0)你這個(gè)嵌套太多,可以 temp=(P0&0xF0),根據(jù)IO前后兩次的狀態(tài)不同來檢測
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2020-5-23 07:14 | 顯示全部樓層
多余語句全部注釋掉,只做少量修改,樓主只要逐條語句對比就能明白錯(cuò)在哪里。 無標(biāo)題.jpg
  1. #include "reg52.h"         //此文件中定義了單片機(jī)的一些特殊功能寄存器
  2. typedef unsigned int u16;  //對數(shù)據(jù)類型進(jìn)行聲明定義
  3. typedef unsigned char u8;
  4. char num;
  5. char  temp;
  6. u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  7.                                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//顯示0~F的值
  8. u8 keyvalue;
  9. void delay(u16 i)
  10. {
  11.         while(i--);
  12. }

  13. void main()
  14. {
  15.         num=17;
  16. //        P2=0;
  17.         while(1)
  18.         {
  19.                 P1=0xfe;
  20.                 temp=P1;
  21. //                temp=temp&0xf0;
  22.                 if(temp!=0xfe)
  23.                 {
  24.                         delay(500);
  25.                         temp=P1; //
  26. //                        temp= temp&0xf0;
  27. //                        while(temp!=0xf0)
  28. //                        {
  29. //                        temp=P1; //此句非常重要
  30.                         switch(temp)
  31.                         {
  32.                                 case 0xee : num=1;break;
  33.                                 case 0xde : num=2;break;
  34.                                 case 0xbe : num=3;break;
  35.                                 case 0x7e : num=4;break;
  36.                         }
  37.                         while(P1!=0xfe); //松手確定
  38. //                        {
  39. //                                temp=P1;
  40. //                                temp=temp&0xf0;
  41. //                        }        
  42. //                        P0=0;
  43. //                        P2=smgduan[num];
  44. //                        }
  45.                 }         
  46.                 P1=0xfd;
  47.                 temp=P1;
  48. //                temp=temp&0xf0;
  49.                 if(temp!=0xfd)
  50.                 {
  51.                         delay(500);
  52.                         temp=P1; //
  53. //                        temp= temp&0xf0;
  54. //                        while(temp!=0xf0)
  55. //                        {
  56. //                                temp=P1;         //此句非常重要
  57.                         switch(temp)
  58.                         {
  59.                                 case 0xed : num=5;break;
  60.                                 case 0xdd : num=6;break;
  61.                                 case 0xbd : num=7;break;
  62.                                 case 0x7d : num=8;break;
  63.                         }
  64.                         while(P1!=0xfd);
  65. //                        {
  66. //                                temp=P1;
  67. //                                temp=temp&0xf0;
  68. //                        }
  69. //                        P0=0;
  70. //                        P2=smgduan[num];
  71. //                        }
  72.                 }
  73.                 P1=0xfb;
  74.                 temp=P1;
  75. //                temp=temp&0xf0;
  76.                 if(temp!=0xfb)
  77.                 {
  78.                         delay(500);
  79.                         temp=P1; //
  80. //                        temp= temp&0xf0;
  81. //                        while(temp!=0xf0)
  82. //                        {
  83. //                                temp=P1;         //此句非常重要
  84.                         switch(temp)
  85.                         {
  86.                                 case 0xeb : num=9;break;
  87.                                 case 0xdb : num=10;break;
  88.                                 case 0xbb : num=11;break;
  89.                                 case 0x7b : num=12;break;
  90.                         }
  91.                         while(P1!=0xfb);
  92. //                        {
  93. //                                temp=P1;
  94. //                                temp=temp&0xf0;
  95. //                        }
  96. //                        P0=0;
  97. //                        P2=smgduan[num];
  98. //                        }
  99.                 }
  100.                 P1=0xf7;
  101.                 temp=P1;
  102. //                temp=temp&0xf0;
  103.                 if(temp!=0xf7)
  104.                 {
  105.                         delay(500);
  106.                         temp=P1; //
  107. //                        temp=temp&0xf0;
  108. //                        while(temp!=0xf0)
  109. //                        {
  110. //                                temp=P1;         //此句非常重要
  111.                         switch(temp)
  112.                         {
  113.                                 case 0xe7 : num=13;break;
  114.                                 case 0xd7 : num=14;break;
  115.                                 case 0xb7 : num=15;break;
  116.                                 case 0x77 : num=16;break;
  117.                         }
  118.                         while(P1!=0xf7);
  119. //                        {
  120. //                                temp=P1;
  121. //                                temp=temp&0xf0;
  122. //                        }
  123. //                        P0=0;
  124. //                        P2=smgduan[num];
  125. //                        }
  126.                 }
  127.                 P0=0;
  128.                 P2=smgduan[num-1];
  129.         }
  130. }        
復(fù)制代碼




回復(fù)

使用道具 舉報(bào)

ID:195361 發(fā)表于 2020-5-23 09:06 | 顯示全部樓層
csmyldl 發(fā)表于 2020-5-23 01:44
while(temp!=0xf0)不應(yīng)該嵌套使用

謝謝呀,其實(shí)我的問題,循環(huán)是沒有問題的,調(diào)試執(zhí)行循環(huán)一次,temp變?yōu)?xf0了,就應(yīng)該出循環(huán)呀,為什么它沒有出去?
回復(fù)

使用道具 舉報(bào)

ID:195361 發(fā)表于 2020-5-23 09:08 | 顯示全部樓層
TTQ001 發(fā)表于 2020-5-23 04:04
嵌入了許多WHILE條件循環(huán),如果使用IF條件進(jìn)行替換應(yīng)加以改進(jìn)。

謝謝呀,其實(shí)我的問題,循環(huán)是沒有問題的,調(diào)試執(zhí)行循環(huán)一次,temp變?yōu)?xf0了,就應(yīng)該出循環(huán)呀,為什么它沒有出去?選擇if也是可以的,但是我看郭天祥師傅也是這么用的,只是端口不一樣而已
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本h片在线观看 | 国产免费观看视频 | 国产999精品久久久 午夜天堂精品久久久久 | 夜夜草| 精品久久久久久 | a国产一区二区免费入口 | 国产成人免费观看 | 91精品国产综合久久香蕉麻豆 | 久久精品成人热国产成 | 国内精品久久久久久 | 毛片大全 | 精品国产伦一区二区三区观看体验 | 麻豆天堂| 亚洲精品成人av久久 | 9999视频 | 亚洲一在线| 超碰日韩 | 欧美日韩国产不卡 | 操人网站 | 久久精品一区二区三区四区 | 国产成人久久久 | 国产一在线 | 精品美女 | 欧美精选一区二区 | 亚洲国产精品激情在线观看 | 91av视频| 国产精品中文字幕在线播放 | 视频在线亚洲 | 午夜精品一区二区三区在线视频 | 国产免费av在线 | 久久久久亚洲国产| 欧美freesex黑人又粗又大 | 久久综合av | 黄视频网址 | 超碰精品在线 | 亚洲精品电影网在线观看 | 精品中文字幕久久 | 人人操日日干 | 成在线人视频免费视频 | 97人人爱 | 久久国产精品无码网站 |