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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2978|回復: 6
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
#include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器

typedef unsigned int u16;          //對數據類型進行聲明定義
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 (243.22 KB, 下載次數: 63)

1.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:235200 發表于 2020-5-23 01:44 | 只看該作者
while(temp!=0xf0)不應該嵌套使用
回復

使用道具 舉報

板凳
ID:420836 發表于 2020-5-23 04:04 | 只看該作者
嵌入了許多WHILE條件循環,如果使用IF條件進行替換應加以改進。
回復

使用道具 舉報

地板
ID:23064 發表于 2020-5-23 06:10 來自手機 | 只看該作者
按鍵處理不是這樣寫的,正常來說應該根據IO狀態的變化做debounce,不要死等。while(temp!=0xf0)你這個嵌套太多,可以 temp=(P0&0xF0),根據IO前后兩次的狀態不同來檢測
回復

使用道具 舉報

5#
ID:213173 發表于 2020-5-23 07:14 | 只看該作者
多余語句全部注釋掉,只做少量修改,樓主只要逐條語句對比就能明白錯在哪里。
  1. #include "reg52.h"         //此文件中定義了單片機的一些特殊功能寄存器
  2. typedef unsigned int u16;  //對數據類型進行聲明定義
  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. }        
復制代碼




回復

使用道具 舉報

6#
ID:195361 發表于 2020-5-23 09:06 | 只看該作者
csmyldl 發表于 2020-5-23 01:44
while(temp!=0xf0)不應該嵌套使用

謝謝呀,其實我的問題,循環是沒有問題的,調試執行循環一次,temp變為0xf0了,就應該出循環呀,為什么它沒有出去?
回復

使用道具 舉報

7#
ID:195361 發表于 2020-5-23 09:08 | 只看該作者
TTQ001 發表于 2020-5-23 04:04
嵌入了許多WHILE條件循環,如果使用IF條件進行替換應加以改進。

謝謝呀,其實我的問題,循環是沒有問題的,調試執行循環一次,temp變為0xf0了,就應該出循環呀,為什么它沒有出去?選擇if也是可以的,但是我看郭天祥師傅也是這么用的,只是端口不一樣而已
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久国产精品一区三寸 | 亚洲精品乱码久久久久久蜜桃91 | 99riav3国产精品视频 | 国产在线观看免费 | 中文字幕免费视频 | 伊人天堂网 | 91国内视频在线 | 精品欧美一区二区三区久久久 | 欧美日韩精品在线免费观看 | 久久午夜视频 | 久久手机视频 | 日韩欧美黄色 | 欧美精品在线看 | 日本欧美国产在线观看 | 亚洲综合一区二区三区 | 国产精品黄| 久久久精品视 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 国产在线精品免费 | 国产精品久久久久久久久久久新郎 | 午夜精品网站 | 日韩视频在线观看中文字幕 | 国产一级片一区二区三区 | 1000部精品久久久久久久久 | 91精品导航 | 免费观看的av | av天天干| 亚洲国产成人在线视频 | 精品一二区 | 午夜电影网站 | 久久久久国产 | 亚洲男人的天堂网站 | 日干夜干| 亚洲视频一区二区三区 | 成人在线播放 | 91精品久久久久久久 | 成人性视频免费网站 | 欧美精品黄 | 亚洲国产精品一区在线观看 | 国产精品3区 | 黄色网络在线观看 |