国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

ELEOK

標題: 51單片機矩陣按鍵的應用16個按鍵對應輸出16種狀態 Proteus [打印本頁]

作者: coolfire    時間: 2021-4-25 14:29
標題: 51單片機矩陣按鍵的應用16個按鍵對應輸出16種狀態 Proteus
仿真原理圖如下(proteus仿真工程文件和單片機C源碼可到本帖附件中下載)


部分源碼:完整請見附件
  1. 單片機源程序如下:
  2. //功能:晶振11.0592M,矩陣按鍵應用,16種按鍵對用16種輸出


  3. #include<reg51.h>

  4. unsigned char code duan[]={0xc0,0xf9,0xa4,0xb0,

  5.                               0x99,0x92,0x82,0xf8,0x80,0x90};//0~9的數碼

  6. void delay(unsigned int i)

  7. {while(i--);}



  8. /**************************************

  9. 函數名:jianzhi()

  10. 函數功能:當有按鍵按下時,判斷是哪一個按鍵按下,16個按鍵對應16種輸出

  11. 返回值:  result. result=0 忙,result=1 不忙。

  12. ***************************************/

  13. void jianzhi()

  14. {

  15.   switch(P2)

  16.     {

  17.         //判斷第一行哪一個按鍵按下,讓P0口輸出

  18.         case 0xee:P0=duan[0];break;

  19.         case 0xed:P0=duan[1];break;

  20.         case 0xeb:P0=duan[2];break;

  21.         case 0xe7:P0=duan[3];break;

  22.         //判斷第二行哪一個按鍵按下,讓P0口輸出

  23.         case 0xde:P0=duan[4];break;

  24.         case 0xdd:P0=duan[5];break;

  25.         case 0xdb:P0=duan[6];break;

  26.         case 0xd7:P0=duan[7];break;

  27.         //判斷第三行哪一個按鍵按下,讓P0口輸出

  28.         case 0xbe:P0=duan[8];break;

  29.         case 0xbd:P0=duan[9];break;

  30.         case 0xbb:P0=0xbb;break;

  31.         case 0xb7:P0=0xb7;break;

  32.         //判斷第四行哪一個按鍵按下,讓P0口輸出

  33.         case 0x7e:P0=0x7e;break;

  34.         case 0x7d:P0=0x7d;break;

  35.         case 0x7b:P0=0x7b;break;

  36.         case 0x77:P0=0x77;break;

  37.         }

  38. }

  39. void main()

  40. {

  41. while(1)

  42.   {

  43.    P2=0xef;                                                  //對第一行進行掃描,判斷是否有按鍵按下

  44.    if(P2!=0xef){jianzhi();}
復制代碼
仿真文件和C源程序下載: 矩陣鍵盤電路的控制與應用.zip (196.07 KB, 售價: 3 E幣)






歡迎光臨 ELEOK (http://www.afoofa.cn/) Powered by Discuz! X5.0