找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4099|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)矩陣鍵盤程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:109770 發(fā)表于 2016-3-23 00:23 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. #define KEY   P1                //用P1口控制4*4個(gè)矩陣鍵盤
  5. //------------------------------------------------
  6. uchar code duanma[17]={   //碼表的定義
  7. 0x3f,0x06,0x5b,0x4f,
  8. 0x66,0x6d,0x7d,0x07,
  9. 0x7f,0x6f,0x77,0x7c,
  10. 0x39,0x5e,0x79,0x71
  11. };
  12. //------------------------------------------------
  13. void delay(uchar x)       //延時(shí)函數(shù)的定義
  14. {
  15. uchar y,z;
  16. for(y=x;y>0;y--)
  17.   for(z=110;z>0;z--);
  18. }
  19. //------------------------------------------------
  20. uchar kayscan()        //按鍵檢測(cè)函數(shù)的定義
  21. {
  22. uchar keyvalue=0;           //鍵值的定義,并且用于返回
  23. uchar temp;     
  24. uchar and;
  25. temp=0x0f;      
  26. KEY=0x0f;
  27. if(KEY != 0x0f)    //檢測(cè)按鍵是否被按下
  28. {
  29.   delay(10);    //延時(shí)10毫秒,以便消抖
  30.   if(KEY != 0x0f)   //再次檢測(cè)按鍵是否被按下
  31.   {
  32.    and = KEY & temp;   //行檢測(cè)
  33.    switch(and)   
  34.    {
  35.     case(0x0e) : keyvalue=0 ; break;  //第一行的按鍵被按下了
  36.     case(0x0d) : keyvalue=4 ; break;  //第二行的按鍵被按下了
  37.     case(0x0b) : keyvalue=8 ; break;  //第三行的按鍵被按下了
  38.     case(0x07) : keyvalue=12; break;  //第四行的按鍵被按下了
  39.    }
  40.    
  41.    temp=0xf0;      //列檢測(cè)
  42.    KEY=0xf0;
  43.    and = KEY & temp;
  44.    switch(and)
  45.    {
  46.     case(0xe0) : keyvalue=keyvalue+0; break;  //第一列的按鍵被按下了
  47.     case(0xd0) : keyvalue=keyvalue+1; break;  //第二列的按鍵被按下了
  48.     case(0xb0) : keyvalue=keyvalue+2; break;  //第三列的按鍵被按下了
  49.     case(0x70) : keyvalue=keyvalue+3; break;  //第四列的按鍵被按下了
  50.    }
  51.   }
  52. }
  53. return(keyvalue);
  54. }
  55. //------------------------------------------------
  56. void main()               //主函數(shù)
  57. {      
  58. P0=0;                             //初始化,讓所有l(wèi)ed都滅
  59. while(1)
  60. {
  61.   P0=duanma[kayscan()];         //矩陣鍵盤的掃描,并且返回鍵值,賦值給P0
  62. }
  63. }
復(fù)制代碼


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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表