📄 按键.txt
字号:
#include<reg51.h> //单片机库函数
#include<stdio.h>
sbit key1=P0^4; //位定义
sbit key2=P0^5;
sbit key3=P0^6;
sbit key4=P0^7;
sbit led1=P2^4;
sbit led2=P2^5;
sbit led3=P2^6;
sbit led4=P2^7;
//延迟函数
void delay(unsigned int i) //当i为25时约延时10毫秒
{
unsigned char j; //当i为2500时约延时1秒
while(i>0)
{
i--;
for(j=0;j<10;j++) ;
}
}
//检测键的有无函数、并判断是哪一个键按下
void checkkeys(void)
{
unsigned char code a[4]={0xfe,0xfd,0xfb,0xf7};
unsigned char k,l,m,n,i;
while(1)
{
P0=0xf0; //初始化p0
delay(5); //延迟抖动
if(P0!=0xf0) //假如p0不等于0xf0,则认为有键按下
{
for(i=0;i<4;i++) //扫描第i列
{
P0=a[i];
delay(10);
if(P0!=a[i])
{
m=P0&0xf0; //进行行扫描m表示对应的行数
n=a[i]&0x0f; //n表示对应的列数
}
}
k=m|n; //k表示键码对应的数据
switch(k)
{
case 0xee: //第一列的第一个键
{
while(1) //循环闪烁
{
P2=0xf0; //对应数值亮(在这不会亮,主要是为了与后面对应才这样写)
delay(1500); //持续一会
P2=0xf0; //全部熄灭
delay(1500); //持续一会
l=0; //清变量l
for(i=0;i<4;i++)//判断是否有键按下
{
P0=a[i]; //然后比较P0和a[i],只要不等则认为有键按下
delay(30);
if(a[i]!=P0) l++;//有键按下则自增变量l
}
if(l!=0)break; //如果没键按下,继续闪烁
}break;
}
case 0xde: //第一列的第二个键
{
while(1) //循环闪烁
{
P2=~0x2f; //对应数值亮
delay(1500); //持续一会
P2=0xf0; //全部熄灭
delay(1500); //持续一会
l=0; //清变量l
for(i=0;i<4;i++)//判断是否有键按下
{
P0=a[i]; //然后比较P0和a[i],只要不等则认为有键按下
delay(30);
if(a[i]!=P0) l++;//有键按下则自增变量l
}
if(l!=0)break;//如果没键按下,继续闪烁
}break;
}
case 0xbe: //第一列的第三个键
{
while(1) //循环闪烁
{
P2=~0x1f; //对应数值亮
delay(1500); //持续一会
P2=0xf0;
delay(1500); //持续一会
l=0; //清变量l
for(i=0;i<4;i++)//判断是否有键按下
{
P0=a[i]; //然后比较P0和a[i],只要不等则认为有键按下
delay(30);
if(a[i]!=P0) l++;//有键按下则自增变量l
}
if(l!=0)break;//如果没键按下,继续闪烁
}break;
}
case 0x7e: //第一列的第四个键
{
while(1) //循环闪烁
{
P2=~0x3f; //对应数值亮
delay(1500); //持续一会
P2=0xf0;
delay(1500); //持续一会
l=0; //清变量l
for(i=0;i<4;i++)//判断是否有键按下
{
P0=a[i]; //然后比较P0和a[i],只要不等则认为有键按下
delay(30);
if(a[i]!=P0) l++;//有键按下则自增变量l
}
if(l!=0)break;//如果没键按下,继续闪烁
}break;
}
case 0xed: //第二列的第一个键
{
while(1) //循环闪烁
{
P2=~0x8f; //对应数值亮
delay(1500); //持续一会
P2=0xf0;
delay(1500); //持续一会
l=0; //清变量l
for(i=0;i<4;i++)//判断是否有键按下
{
P0=a[i]; //然后比较P0和a[i],只要不等则认为有键按下
delay(30);
if(a[i]!=P0) l++;//有键按下则自增变量l
}
if(l!=0)break;//如果没键按下,继续闪烁
}break;
}
case 0xdd: //第二列的第二个键
{
while(1) //循环闪烁
{
P2=~0xaf; //对应数值亮
delay(1500); //持续一会
P2=0xf0;
delay(1500); //持续一会
l=0; //清变量l
for(i=0;i<4;i++)//判断是否有键按下
{
P0=a[i]; //然后比较P0和a[i],只要不等则认为有键按下
delay(30);
if(a[i]!=P0) l++;//有键按下则自增变量l
}
if(l!=0)break;//如果没键按下,继续闪烁
}break;
}
case 0xbd: //第二列的第三个键
{
while(1) //循环闪烁
{
P2=~0x9f; //对应数值亮
delay(1500); //持续一会
P2=0xf0;
delay(1500); //持续一会
l=0; //清变量l
for(i=0;i<4;i++)//判断是否有键按下
{
P0=a[i]; //然后比较P0和a[i],只要不等则认为有键按下
delay(30);
if(a[i]!=P0) l++;//有键按下则自增变量l
}
if(l!=0)break;//如果没键按下,继续闪烁
}break;
}
case 0x7d: //第二列的第四个键
{
while(1) //循环闪烁
{
P2=~0xbf; //对应数值亮
delay(1500); //持续一会
P2=0xf0;
delay(1500); //持续一会
l=0; //清变量l
for(i=0;i<4;i++)//判断是否有键按下
{
P0=a[i]; //然后比较P0和a[i],只要不等则认为有键按下
delay(30);
if(a[i]!=P0) l++;//有键按下则自增变量l
}
if(l!=0)break;//如果没键按下,继续闪烁
}break;
}
case 0xeb: //第三列的第一个键
{
while(1) //循环闪烁
{
P2=~0x4f; //对应数值亮
delay(1500); //持续一会
P2=0xf0;
delay(1500); //持续一会
l=0; //清变量l
for(i=0;i<4;i++)//判断是否有键按下
{
P0=a[i]; //然后比较P0和a[i],只要不等则认为有键按下
delay(30);
if(a[i]!=P0) l++;//有键按下则自增变量l
}
if(l!=0)break;//如果没键按下,继续闪烁
}break;
}
case 0xdb: //第三列的第二个键
{
while(1) //循环闪烁
{
P2=~0x6f; //对应数值亮
delay(1500); //持续一会
P2=0xf0;
delay(1500); //持续一会
l=0; //清变量l
for(i=0;i<4;i++)//判断是否有键按下
{
P0=a[i]; //然后比较P0和a[i],只要不等则认为有键按下
delay(30);
if(a[i]!=P0) l++;//有键按下则自增变量l
}
if(l!=0)break;//如果没键按下,继续闪烁
}break;
}
case 0xbb: //第三列的第三个键
{
while(1) //循环闪烁
{
P2=~0x5f; //对应数值亮
delay(1500); //持续一会
P2=0xf0;
delay(1500); //持续一会
l=0; //清变量l
for(i=0;i<4;i++)//判断是否有键按下
{
P0=a[i]; //然后比较P0和a[i],只要不等则认为有键按下
delay(30);
if(a[i]!=P0) l++;//有键按下则自增变量l
}
if(l!=0)break;//如果没键按下,继续闪烁
}break;
}
case 0x7b: //第三列的第四个键
{
while(1) //循环闪烁
{
P2=~0x7f; //对应数值亮
delay(1500); //持续一会
P2=0xf0;
delay(1500); //持续一会
l=0; //清变量l
for(i=0;i<4;i++)//判断是否有键按下
{
P0=a[i]; //然后比较P0和a[i],只要不等则认为有键按下
delay(30);
if(a[i]!=P0) l++;//有键按下则自增变量l
}
if(l!=0)break;//如果没键按下,继续闪烁
}break;
}
case 0xe7: //第四列的第一个键
{
while(1) //循环闪烁
{
P2=~0xcf; //对应数值亮
delay(1500); //持续一会
P2=0xf0;
delay(1500); //持续一会
l=0; //清变量l
for(i=0;i<4;i++)//判断是否有键按下
{
P0=a[i]; //然后比较P0和a[i],只要不等则认为有键按下
delay(30);
if(a[i]!=P0) l++;//有键按下则自增变量l
}
if(l!=0)break;//如果没键按下,继续闪烁
}break;
}
case 0xd7: //第四列的第二个键
{
while(1) //循环闪烁
{
P2=~0xef; //对应数值亮
delay(1500); //持续一会
P2=0xf0;
delay(1500); //持续一会
l=0; //清变量l
for(i=0;i<4;i++)//判断是否有键按下
{
P0=a[i]; //然后比较P0和a[i],只要不等则认为有键按下
delay(30);
if(a[i]!=P0) l++;//有键按下则自增变量l
}
if(l!=0)break;//如果没键按下,继续闪烁
}break;
}
case 0xb7: //第四列的第三个键
{
while(1) //循环闪烁
{
P2=~0xdf; //对应数值亮
delay(1500); //持续一会
P2=0xf0;
delay(1500); //持续一会
l=0; //清变量l
for(i=0;i<4;i++)//判断是否有键按下
{
P0=a[i]; //然后比较P0和a[i],只要不等则认为有键按下
delay(30);
if(a[i]!=P0) l++;//有键按下则自增变量l
}
if(l!=0)break;//如果没键按下,继续闪烁
}break;
}
case 0x77: //第四列的第四个键
{
while(1) //循环闪烁
{
P2=0x0f; //对应数值亮
delay(1500); //持续一会
P2=0xf0;
delay(1500); //持续一会
l=0; //清变量l
for(i=0;i<4;i++)//判断是否有键按下
{
P0=a[i]; //然后比较P0和a[i],只要不等则认为有键按下
delay(30);
if(a[i]!=P0) l++;//有键按下则自增变量l
}
if(l!=0)break;//如果没键按下,继续闪烁
}break;
}
}
}
}
}
//主函数
void main()
{
P2=0xf0; //初始化P2口
delay(2500);
delay(25);
checkkeys(); //调用函数checkkeys()
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -