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

標題: PIC單片機開發板之矩陣鍵盤掃描(if()else嵌套方式) [打印本頁]

作者: 51黑芯片    時間: 2016-1-17 02:31
標題: PIC單片機開發板之矩陣鍵盤掃描(if()else嵌套方式)
   /*
為自已寫的矩陣鍵盤檢測+數碼管顯示+蜂鳴器響
采用if().....else嵌套方式;編譯通過,卻后二列顯示不出來(你找出來了嗎?一個不算問題的問題)
*/
//----------------------------------------------------------------
  1. #include <pic.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. __CONFIG(0x3B31);
  5. const unsigned char table[] = {0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  //數碼管數組
  6. //--------------------變量定義------------------------------------
  7. uint keynum,keytem,num;  //定義變量,//keynum按鍵端口讀回值,keytem為松手檢測值(以示區分),num數碼管
  8. //--------------------函數調用 聲明-------------------------------
  9. void init();    //初始化函數
  10. void keyscan();    //矩陣鍵盤掃描
  11. void didi(uchar dinum);  //蜂鳴器
  12. void disp();  //數碼管顯示
  13. //-------------------主函數---------------------------------------
  14. void delay(x)  //延時函數,幾乎每個程序都要用到,所以放在了主函數分界線內
  15. {
  16. uchar a,b;
  17. for (a=x;a>0;a--)
  18. for(b=110;b>0;b--);
  19. }

  20. void main()
  21. {
  22. init();  //初始化
  23. while(1)
  24. {
  25. keyscan(); //矩陣鍵盤掃描
  26. disp();  //數碼管顯示
  27. }
  28. }
  29. //------------初始化函數-------------------------------------------
  30. void init()
  31. {
  32. TRISA=0;PORTA=0x02; //38譯碼器

  33. TRISB=1;                       //矩陣鍵盤

  34. TRISC=0;PORTC=0x01;; //38使能
  35. TRISD=0;PORTD=0x00;  //LED燈(數碼管)
  36. TRISE=0;PORTE=0x00;  //蜂鳴器
  37. }
  38. //----------要調用的函數--------------------------------------------
  39. void keyscan()
  40. {                           //第一列掃描

  41. PORTB=0xef;     //送出RB4=1110  1111
  42. keynum=PORTB;   

  43. keynum=keynum&0x0f;

  44. if(keynum!=0xef)   

  45. {
  46.   delay(5);   

  47.   keynum=PORTB;   

  48.   keynum=keynum&0x0f;
  49.   if(keynum!=0x0f)  

  50.   {
  51.    keytem=keynum;

  52.    didi(1);
  53.    while(keytem!=0x0f)

  54.     {
  55.     keytem=PORTB;
  56.     keytem=keytem&0x0f;

  57.     }
  58.   keynum=keynum|0xe0;  

  59.   }

  60. else       //第二列掃描
  61.   {
  62.   PORTB=0xdf;     

  63.   keynum=PORTB;   

  64.   keynum=keynum&0x0f;

  65.   if(keynum!=0xdf)  

  66.    {
  67.    delay(5);  

  68.    keynum=PORTB;  

  69.    keynum=keynum&0x0f;
  70.    if(keynum!=0x0f)  

  71.     {
  72.     keytem=keynum;  

  73.     didi(1);
  74.     while(keytem!=0x0f)

  75.      {
  76.      keytem=PORTB;
  77.      keytem=keytem&0x0f;

  78.      }
  79.    keynum=keynum|0xd0;  

  80.     }
  81.    }
  82.   else      

  83.      {
  84.    PORTB=0xbf;     

  85.    keynum=PORTB;   

  86.    keynum=keynum&0x0f;

  87.    if(keynum!=0xbf)  

  88.    {
  89.     delay(5);  

  90.     keynum=PORTB;   

  91.     keynum=keynum&0x0f;
  92.     if(keynum!=0x0f)

  93.      {
  94.      keytem=keynum;  

  95.      didi(1);
  96.      while(keytem!=0x0f)

  97.       {
  98.       keytem=PORTB;
  99.       keytem=keytem&0x0f;

  100.       }
  101.     keynum=keynum|0xb0;  

  102.      }
  103.    
  104.     else       //第四列掃描
  105.      {
  106.      PORTB=0x7f;   

  107.      keynum=PORTB;   

  108.      keynum=keynum&0x0f;

  109.      if(keynum!=0x7f)

  110.       {
  111.       delay(5);   

  112.       keynum=PORTB;  

  113.       keynum=keynum&0x0f;
  114.       if(keynum!=0x0f)

  115.        {
  116.        keytem=keynum;  

  117.        didi(1);
  118.        while(keytem!=0x0f)

  119.         {
  120.         keytem=PORTB;
  121.         keytem=keytem&0x0f;

  122.         }
  123.       keynum=keynum|0x70;   

  124.        }
  125.       }
  126.      } ////////

  127.    }
  128.   }
  129. }
  130.   }
  131. }

  132. void didi(uchar dinum)
  133. {
  134. uchar di_num;
  135. for(di_num=dinum;di_num>0;di_num--)
  136. {
  137. RE0=1;
  138. delay(100);
  139. RE0=0;
  140. delay(50);
  141. }
  142. }

  143. void disp()
  144. {
  145. switch(keynum)
  146. {
  147. case 0xee:PORTD=table[1];break;
  148. case 0xed:PORTD=table[2];break;
  149. case 0xeb:PORTD=table[3];break;
  150. case 0xe7:PORTD=table[4];break;
  151. case 0xde:PORTD=table[5];break;
  152. case 0xdd:PORTD=table[6];break;
  153. case 0xdb:PORTD=table[7];break;
  154. case 0xd7:PORTD=table[8];break;
  155. case 0xbe:PORTD=table[9];break;
  156. case 0xbd:PORTD=table[10];break;
  157. case 0xbb:PORTD=table[11];break;
  158. case 0xb7:PORTD=table[12];break;
  159. case 0x7e:PORTD=table[13];break;
  160. case 0x7d:PORTD=table[14];break;
  161. case 0x7b:PORTD=table[15];break;
  162. case 0x77:PORTD=table[0];break;
  163. }
  164. }
復制代碼






作者: JINHEYE    時間: 2017-10-11 15:35
看的我眼花,樓主來說說吧,好讓我長點經驗。我也碰到PIC單片機if語句嵌套到第二層就不能進入的情況




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲国产91 | 久久免费看片 | 国产成人a亚洲精品 | 97人人视频 | 日韩在线不卡 | 日韩三级一区 | 国产永久精品 | 青青草在线免费视频 | 欧美成人一级片 | 欧美一道本| 麻豆av片 | jizz中国女人高潮 | 免费网站观看www在线观 | av免费看网站 | 国产一区二区在线观看视频 | 免费国产一区二区 | 永久免费看片在线播放 | 中文字幕日韩视频 | 免费视频一区二区 | 色综合色综合 | 天堂中文资源在线 | 青青草视频网站 | 欧美精品三级 | 亚洲欧美另类在线 | 四级黄色片 | 99re视频在线| 亚洲午夜在线观看 | 亚洲男人天堂网 | 天天看天天射 | 日本欧美久久久久免费播放网 | 国产精品久久久久久久久久久久久久 | 国产永久精品 | 在线a| 日本国产视频 | 男女操网站 | 青娱乐福利视频 | 欧美亚洲国产日韩 | 欧美日韩亚洲天堂 | 日韩伦理一区 | 蜜桃视频一区二区 | 免费一区二区视频 |