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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

PIC單片機開發板之矩陣鍵盤掃描(if()else嵌套方式)

[復制鏈接]
跳轉到指定樓層
樓主
ID:103513 發表于 2016-1-17 02:31 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
   /*
為自已寫的矩陣鍵盤檢測+數碼管顯示+蜂鳴器響
采用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. }
復制代碼





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

使用道具 舉報

沙發
ID:96943 發表于 2017-10-11 15:35 | 只看該作者
看的我眼花,樓主來說說吧,好讓我長點經驗。我也碰到PIC單片機if語句嵌套到第二層就不能進入的情況
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久手机视频 | 国产激情在线播放 | 亚洲精品在线看 | av性色 | 精品免费国产一区二区三区四区 | 色综合久久天天综合网 | 日本一区二区高清不卡 | 国产一区91精品张津瑜 | 久久一区视频 | 欧美视频在线一区 | 在线观看中文字幕av | 天天操天天天干 | 国产精品3区 | 欧美黄 片免费观看 | 日韩在线观看精品 | 国产精品视频观看 | 国产精品99久久久久久久久久久久 | 亚洲欧美国产精品久久 | 免费中文字幕 | 久草视频在线播放 | 麻豆一区一区三区四区 | 亚洲综合视频 | 精品自拍视频 | 国产精品亚洲视频 | 91社区在线观看播放 | 国产成人综合一区二区三区 | 可以在线看的黄色网址 | 国产精品亚洲一区二区三区在线 | 日韩免费激情视频 | 一二三在线视频 | 国产精品国产精品国产专区不卡 | 久久久久久国产 | 精品九九久久 | 亚洲成人精品久久久 | 狠狠干狠狠操 | 中文字幕亚洲欧美日韩在线不卡 | 欧洲性生活视频 | 国产亚洲精品成人av久久ww | 欧美性一区二区三区 | 久久亚洲一区二区 | 狠狠入ady亚洲精品经典电影 |