51单片机独立按键的基本操作
提示:
在CT107D单片机综合训练平台上,首先将J5处的跳帽接到2~3引脚,使按键S4~S7四个按键的另外一端接地从而成为4个独立键盘。在扫描按键的过程中,发现有按键触发信号后,先做去抖动处理,当确认为按键按下时,才进行相应的功能处理。
基本操作:
按下S7点亮L1指示灯,松开按键熄灭。S6点亮L2指示灯S5点亮L3指示灯S4点亮L4指示灯都是松开熄灭。按键均作去抖。
代码的实现:
//访问按键和LED的 I/O 端口
sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;
sbit L1=P0^0;
sbit L2=P0^1;
sbit L3=P0^2;
sbit L4=P0^3;
sbit L5=P0^4;
sbit L6=P0^5;
sbit L7=P0^6;
sbit L8=P0^7;
//通过译码器来实现相应功能的通道的选择
void SelectHC138(unsigned char n)
{
switch(n)
{
case 4:
P2=(P2 & 0x1f) | 0x80;
break;
case 5:
P2=(P2 & 0x1f) | 0xa0;
break;
case 6:
P2=(P2 & 0x1f) | 0xc0;
break;
case 7:
P2=(P2 & 0x1f) | 0xe0;
break;
}
}
//延时函数
void Delay(unsigned int t)
{
while(t--);
}
//功能的实现
void Scanf_KeyAlone()
{
if(S7==0)
{
Delay(100);
if(S7==0)
{
L1 = 0;
While(S7==0);//等待释放
L1 =1;
}
}
if(S6==0)
{
Delay(10);
if(S6==0)
{
L2=0;
while(S6==0);
L2=1;
}
}
if(S5==0)
{
Delay(10);
if(S5==0)
{
L3=0;
while(S5==0);
L3=1;
}
}
if(S4==0)
{
Delay(1);
if(S4==0)
{
L4=0;
while(S4==0);
L4=1;
}
}
}
//固定函数
void main()
{
//Init();
SelectHC138(4);
while(1)
{
ScanfKeys_Alone();
}
}
代码: