#include "reg52.h" //此文件中定义了单片机的一些特殊功能
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
#define aj P1
u8 y; //用来存放读取到的按键值
u8 code smgduan[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay(u16 i)
{
while(i--);
}
void KeyDown(void)
{
char a=0;
aj=0x0f; //00001111
if(aj!=0x0f)//读取按键是否按下
{
delay(1000);//延时 10ms 进行消抖
if(aj!=0x0f)//再次检测键盘是否按下
{
//测试列
aj=0X0F; //00001111
switch(aj)
{
case(0X07): y=0;break;
case(0X0b): y=1;break;
case(0X0d): y=2;break;
case(0X0e): y=3;break;
}
//测试行
aj=0XF0; //11110000
switch(aj)
{
case(0X70): y=y;break;
case(0Xb0): y=y+4;break;
case(0Xd0): y=y+8;break;
case(0Xe0): y=y+12;break;
}
if(aj!=0x0f)//检测按键是否松手
{
delay(1000);
}
}
}
}
void main()
{
while(1)
{
KeyDown(); //调用子函数
P0=~smgduan[y];
delay(100);
P0=0; //消影
}
}
矩阵按键例程
最新推荐文章于 2023-09-10 17:42:38 发布