[应用方案] 矩阵键盘代码

[复制链接]
 楼主| chenci2013 发表于 2024-11-22 22:31 | 显示全部楼层 |阅读模式


  1. #define uchar unsigned char

  2. #define uint unsigned int

  3. sbit dula=P2^6;

  4. sbit wela=P2^7;

  5. uchar code table[]={ 0x3f,0x06,0x5b,0x4f,

  6.                      0x66,0x6d,0x7d,0x07,

  7.                 0x7f,0x6f,0x77,0x7c,

  8.                 0x39,0x5e,0x79,0x71};

  9. void delayms(uint xms)

  10. {

  11. uint i,j;

  12. for(i=xms;i>0;i--)

  13. for(j=110;j>0;j--);

  14. }

  15. void display(uchar num)

  16. {

  17.   P0=table[num];

  18. dula=1;

  19. //P0=table[num];

  20. dula=0;

  21. //delayms(500);

  22. }

  23. void matrixkeyscan()

  24. {

  25. uchar temp,key;

  26. P3=0xfe;

  27. temp=P3;

  28. temp=temp&0xf0;

  29. if(temp != 0xf0)

  30. {

  31.   delayms(10);

  32.   temp=P3;

  33.   temp=temp&0xf0;

  34.   if(temp!=0xf0)

  35.   {

  36.    temp=P3;

  37.    switch(temp)

  38.    {

  39.     case 0xee: key=0;

  40.                break;

  41.     case 0xde: key=1;

  42.                break;

  43.     case 0xbe: key=2;

  44.                break;

  45.     case 0x7e: key=3;

  46.                break;

  47.    }

  48.    while(temp!=0xf0)

  49.    {

  50.     temp=P3;

  51.     temp=temp&0xf0;

  52.    }

  53.    display(key);

  54.   }

  55. }

  56. P3=0xfd;

  57. temp=P3;

  58. temp=temp&0xf0;

  59. if(temp != 0xf0)

  60. {

  61.   delayms(10);

  62.   temp=P3;

  63.   temp=temp&0xf0;

  64.   if(temp!=0xf0)

  65.   {

  66.    temp=P3;

  67.    switch(temp)

  68.    {

  69.     case 0xed: key=4;

  70.                break;

  71.     case 0xdd: key=5;

  72.                break;

  73.     case 0xbd: key=6;

  74.                break;

  75.     case 0x7d: key=7;

  76.                break;

  77.    }

  78.    while(temp!=0xf0)

  79.    {

  80.     temp=P3;

  81.     temp=temp&0xf0;

  82.    }

  83.    display(key);

  84.   }

  85. }

  86. P3=0xfb;

  87. temp=P3;

  88. temp=temp&0xf0;

  89. if(temp != 0xf0)

  90. {

  91.   delayms(10);

  92.   temp=P3;

  93.   temp=temp&0xf0;

  94.   if(temp!=0xf0)

  95.   {

  96.    temp=P3;

  97.    switch(temp)

  98.    {

  99.     case 0xeb: key=8;

  100.                break;

  101.     case 0xdb: key=9;

  102.                break;

  103.     case 0xbb: key=10;

  104.                break;

  105.     case 0x7b: key=11;

  106.                break;

  107.    }

  108.    while(temp!=0xf0)

  109.    {

  110.     temp=P3;

  111.     temp=temp&0xf0;

  112.    }

  113.    display(key);

  114.   }

  115. }

  116. P3=0xf7;

  117. temp=P3;

  118. temp=temp&0xf0;

  119. if(temp != 0xf0)

  120. {

  121.   delayms(10);

  122.   temp=P3;

  123.   temp=temp&0xf0;

  124.   if(temp!=0xf0)

  125.   {

  126.    temp=P3;

  127.    switch(temp)

  128.    {

  129.     case 0xe7: key=12;

  130.                break;

  131.     case 0xd7: key=13;

  132.                break;

  133.     case 0xb7: key=14;

  134.                break;

  135.     case 0x77: key=15;

  136.                break;

  137.    }

  138.    while(temp!=0xf0)

  139.    {

  140.     temp=P3;

  141.     temp=temp&0xf0;

  142.    }

  143.    display(key);

  144.   }

  145. }

  146. }

  147. void main()

  148. {

  149. P0=0;

  150. dula=1;

  151. dula=0;

  152. P0=0xc0;

  153. wela=1;

  154. //P0=0xc0;

  155. wela=0;

  156. while(1)

  157. {

  158.   matrixkeyscan();

  159. }

  160. }


您需要登录后才可以回帖 登录 | 注册

本版积分规则

124

主题

6644

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部