标题: 单片机矩阵按键的应用,16个按键对应输出16种状态 Proteus仿真代码 [打印本页]

作者: 超客通讯    时间: 2021-4-24 10:57
标题: 单片机矩阵按键的应用,16个按键对应输出16种状态 Proteus仿真代码
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

单片机源程序如下:
//功能:晶振11.0592M,矩阵按键应用,16种按键对用16种输出//作者: 康晓龙

//版本号:1.0

#include<reg51.h>

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

                              0x99,0x92,0x82,0xf8,0x80,0x90};//0~9的数码

void delay(unsigned int i)

{while(i--);}



/**************************************

函数名:jianzhi()

函数功能:当有按键按下时,判断是哪一个按键按下,16个按键对应16种输出

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

***************************************/

void jianzhi()

{

  switch(P2)

    {

        //判断第一行哪一个按键按下,让P0口输出

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

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

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

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

        //判断第二行哪一个按键按下,让P0口输出

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

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

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

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

        //判断第三行哪一个按键按下,让P0口输出

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

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

        case 0xbb:P0=0xbb;break;

        case 0xb7:P0=0xb7;break;

        //判断第四行哪一个按键按下,让P0口输出

        case 0x7e:P0=0x7e;break;

        case 0x7d:P0=0x7d;break;

        case 0x7b:P0=0x7b;break;

        case 0x77:P0=0x77;break;

        }

}

void main()

{

while(1)

  {

   P2=0xef;                                                  //对第一行进行扫描,判断是否有按键按下

   if(P2!=0xef){jianzhi();}



   P2=0xdf;                                                  //对第二行进行扫描,判断是否有按键按下

   if(P2!=0xdf){jianzhi();}



   P2=0xbf;                                                  //对第三行进行扫描,判断是否有按键按下

   if(P2!=0xbf){jianzhi();}



   P2=0x7f;                                                 //对第四行进行扫描,判断是否有按键按下

   if(P2!=0x7f){jianzhi();}

}

}



全部资料51hei下载地址:
矩阵键盘电路的控制与应用.zip (196.07 KB, 下载次数: 37)






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1