题目:
按下s7点亮L1指示灯,松开按键熄灭。s6点亮L2指示灯,s5点亮L2指示灯,s5点亮L2指示灯,都是松开熄灭。按键均作去抖。
1.首先将J5处的跳帽接到2~3引脚,使按键s4~s7四个按键的另一端接地,从而成为4个独立键盘。在扫描按键的过程中,发现有按键触发信号后,先做去抖动处理,当确认为按键按下时,才进行相应的功能处理。
2.判断按键s7是否按下:读P3^0引脚,当P3^0为低电平,则s7按下
#include "reg52.h"
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;
//选择寄存器
void Select_HC573(unsigned char channel)
{
switch(channel)
{
case 4:
P2=(P2&0x1f)|0x80; //让Y4输出低电平
break;
case 5:
P2=(P2&0x1f)|0xa0; //让Y5输出低电平
break;
case 6:
P2=(P2&0x1f)|0xc0; //让Y6输出低电平
break;
case 7:
P2=(P2&0x1f)|0xe0; //让Y7输出低电平
break;
}
}
//独立按键的延时函数
void Delay_Key(unsigned char t)
{
while(t--);
}
//独立按键
void ScanKeys_Alone()
{
if(s7==0)
{
Delay_Key(100); //延时消抖
if(s7==0) //按下按键
{
L1=0; //灯亮
while(s7==0); //当s7为低电平时,L1一直亮;为高电平时,L1灭
L1=1; //灯灭
}
}
if(s6==0)
{
Delay_Key(100); //延时消抖
if(s6==0) //按下按键
{
L2=0; //灯亮
while(s6==0);
L2=1; //灯灭
}
}
if(s5==0)
{
Delay_Key(100); //延时消抖
if(s5==0) //按下按键
{
L3=0; //灯亮
while(s5==0);
L3=1; //灯灭
}
}
if(s4==0)
{
Delay_Key(100); //延时消抖
if(s4==0) //按下按键
{
L4=0; //灯亮
while(s4==0);
L4=1; //灯灭
}
}
}
void main()
{
Select_HC573(4);
while(1)
{
ScanKeys_Alone();
}
}