欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

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

查看數: 3328 | 評論數: 6 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時間: 2020-5-22 22:09

正文摘要:

#include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器 typedef unsigned int u16;&n ...

回復

ID:195361 發(fā)表于 2020-5-23 09:08
TTQ001 發(fā)表于 2020-5-23 04:04
嵌入了許多WHILE條件循環(huán),如果使用IF條件進行替換應加以改進。

謝謝呀,其實我的問題,循環(huán)是沒有問題的,調試執(zhí)行循環(huán)一次,temp變?yōu)?xf0了,就應該出循環(huán)呀,為什么它沒有出去?選擇if也是可以的,但是我看郭天祥師傅也是這么用的,只是端口不一樣而已
ID:195361 發(fā)表于 2020-5-23 09:06
csmyldl 發(fā)表于 2020-5-23 01:44
while(temp!=0xf0)不應該嵌套使用

謝謝呀,其實我的問題,循環(huán)是沒有問題的,調試執(zhí)行循環(huán)一次,temp變?yōu)?xf0了,就應該出循環(huán)呀,為什么它沒有出去?
ID:213173 發(fā)表于 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. }        
復制代碼




ID:23064 發(fā)表于 2020-5-23 06:10
按鍵處理不是這樣寫的,正常來說應該根據IO狀態(tài)的變化做debounce,不要死等。while(temp!=0xf0)你這個嵌套太多,可以 temp=(P0&0xF0),根據IO前后兩次的狀態(tài)不同來檢測
ID:420836 發(fā)表于 2020-5-23 04:04
嵌入了許多WHILE條件循環(huán),如果使用IF條件進行替換應加以改進。
ID:235200 發(fā)表于 2020-5-23 01:44
while(temp!=0xf0)不應該嵌套使用

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表