51单片机矩阵按键的应用16个按键对应输出16种状态 Proteus

[复制链接]
查看68 | 回复0 | 2021-4-25 14:29:11 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件和单片机C源码可到本帖附件中下载)
1.jpg

部分源码:完整请见附件
  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 工控币)
回复

使用道具 举报

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

本版积分规则