仿真原理图如下(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)
|