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

ELEOK

標題: 51單片機4x4矩陣鍵數值讀取和數碼管顯示程序Proteus仿真 [打印本頁]

作者: eng    時間: 2021-6-9 17:27
標題: 51單片機4x4矩陣鍵數值讀取和數碼管顯示程序Proteus仿真
4x4矩陣鍵數值的讀取和顯示;
按鍵被按下后只有被松開才會有效果;
多個按鍵被按下只有按鍵都被松開最先被按下的按鍵起效果;
采用共陽極數碼管顯示;
附件包含完整仿真設計和C程序。

仿真原理圖如下(proteus仿真工程文件和完整單片機c代碼可到本帖附件中下載)

部分代碼:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. /**************物理連線
  5. P1對應數碼管;
  6. P2前四位對應矩陣行
  7. P2后四位對應矩陣列
  8. *****************/
  9. #define saomiao P2
  10. #define DB P1
  11. void display(uchar dat);                                                                                                                                                        //顯示鍵盤值函數
  12. uchar key_scan( );                                                                                                                                                                   //鍵盤掃描函數
  13. uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e };  //0~15數碼管代碼,共陽極
  14. uchar key;                                                                                                                                                                                   //鍵盤值



  15. /********************************************************************
  16.                             延時函數
  17. *********************************************************************/
  18. void delay10ms(void) //延時程序
  19. {
  20.         unsigned char i,j;
  21.         for(i=20;i>0;i--)
  22.         for(j=248;j>0;j--);
  23. }



  24. //*****************鍵盤掃描函數*****************
  25. uchar key_scan()
  26. {
  27. uchar temp;
  28. saomiao=0xfe;                      //掃描第1行鍵
  29. temp=saomiao;
  30. temp=temp&0xf0;
  31. if(temp!=0xf0)
  32. delay10ms();                         //延時10ms
  33. temp=saomiao;
  34. temp=temp&0xf0;                                 //確認按鍵被按下
  35. if(temp!=0xf0)
  36. {
  37. temp=saomiao;
  38. switch(temp)
  39. {
  40. case 0xee:                                           //第1行第1列被按下
  41.             key=0;
  42.                         break;                           
  43. case 0xde:                                      // 第1行第2列被按下
  44.             key=1;
  45.                         break;
  46. case 0xbe:                                                  // 第1行第3列被按下
  47.             key=2;
  48.                         break;
  49. case 0x7e:                                                   // 第1行第4列被按下
  50.             key=3;
  51.                         break;
  52. default:     
  53.            break;

  54. }
  55. K1:
  56. temp=saomiao;
  57. temp=temp&0xf0;
  58. while(temp!=0xf0)                           //等待按鍵被松開才可以有效果
  59. goto K1;
  60. }


  61. saomiao=0xfd;                      //掃描第2行鍵
  62. temp=saomiao;
  63. temp=temp&0xf0;
  64. ------完整代碼請下載本文尾部的附件----
復制代碼
完整程序代碼和proteus仿真工程: 4x4矩陣鍵.zip (54.63 KB, 售價: 3 E幣)






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