标题一:实现独立按键输出
标题二:实现按键输出的效果
标题三:实验总结
如图所示,S7、S6、S5、S4是独立按键一列,需要注意的是如果你的开发板独立按键和矩阵键盘是一体的如上图需要把引脚盖接到独立键盘那儿。
P30~P33是矩阵键盘和独立按键的引脚在编程时我们直接对P3口后四位进行操作,可设一个变量temp=P3&0x0f,此时temp为0000 1111 ,0000 1110(0x0e)代表S7被按下,0000 1101(0x0d)代表S6被按下...,分别令其输出为1,2,3,4,如下代码:
unsigned char key_test()
{
unsigned char test;
unsigned char key_value=0xff;
test=P3&0x0f;
switch(test)
{
case 0x0e:{key_value=1;break;}
case 0x0d:{key_value=2;break;}
case 0x0b:{key_value=3;break;}
case 0x07:{key_value=4;break;}
}
return key_value;
}
接下来是对每个按键按下后输出所达到的效果进行编程,需要一个输入独立键盘所输出的值来实现:
void key_proc(key)
{
unsigned char temp;
switch(key)
{
case 1:{P2=((P2&0x1f)|0x80);temp++;P0=temp;P2&=0x1f;}
case 2:{P2=((P2&0x1f)|0x80);temp--;P0=temp;P2&=0x1f;}
case 3:{P2=((P2&0x1f)|0x80);temp+=2;P0=temp;P2&=0x1f;}
case 4:{P2=((P2&0x1f)|0x80);temp-=2;P0=temp;P2&=0x1f;}
}
}
下面只需要补上主函数就可以了,以下是完整代码:
#include "reg52.h" //定义51单片机特殊功能寄存器
#include "absacc.h"
unsigned char temp1;
unsigned char key_test(void);
void key_proc(unsigned char key);
//关闭蜂鸣器
void cls_buzz()
{
P2=((P2&0x1f)|0xa0);
P0=0x00;
P2&=0x1f;
}
//关闭LED
void cls_led()
{
P2=((P2&0x1f)|0x80);
P0=0xff;
P2&=0x1f;
}
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 108;
j = 145;
do
{
while (--j);
} while (--i);
}
void main()
{
unsigned char temp;
cls_buzz();
cls_led();
while(1)
{
temp=key_test();
if(temp!=0xff)
{
Delay10ms(); //按键消抖
temp=key_test();
if(temp!=0xff)
{
//进入按键处理函数
key_proc(temp);
while(P3!=0xff); //等待按键释放
}
}
}
}
//按键扫描
unsigned char key_test()
{
unsigned char test;
unsigned char key_value=0xff;
test=P3&0x0f; //取后四位
switch(test)
{
case 0x0e:{key_value=1;break;}//S7
case 0x0d:{key_value=2;break;}//S6
case 0x0b:{key_value=3;break;}//S5
case 0x07:{key_value=4;break;}//S4
}
return key_value;
}
//按键处理函数
void key_proc(key)
{
switch(key)
{
case 1:{P2=((P2&0x1f)|0x80);temp1++;P0=temp1;P2=0x1f;break;}
case 2:{P2=((P2&0x1f)|0x80);temp1--;P0=temp1;P2=0x1f;break;}
case 3:{P2=((P2&0x1f)|0x80);temp1+=2;P0=temp1;P2=0x1f;break;}
case 4:{P2=((P2&0x1f)|0x80);temp1-=2;P0=temp1;P2=0x1f;break;}
}
}
实验总结: P3口后四位0000 abcd,abcd分别可操作S4、S5、S6、S7,配合对应一定的操作就可实现独立键盘对其他设备的操作。
标签:P2,case,LED,temp,Day4,unsigned,蓝桥,key,0x1f From: https://blog.csdn.net/2302_80724534/article/details/140333443