注意:将J5处的跳帽接到2~3引脚,使按键S4~S7四个按键的另外一端接地从而成为4个独立键盘。在扫描按键的过程中,发现有按键触发信号后,先做去抖动处理,当确认为按键按下时,才进行相应的功能处理。
实验1、按下S7点亮L1指键熄灭。S6点亮L2指示灯,S5点亮L3指示灯,S4点亮L4指示灯,都是松开熄灭。按键均作去抖。
代码部分:
1、74HC573及延时函数
void HC138_state(unsigned char channel)
{
switch(channel)
{
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 DelayK(unsigned char t)
{
while (t--);
}
2、按键部分 (只编写了按下S7点亮L1,松开熄灭其余同理)
void Key_Proc()
{
if(S7 == 0)
{
DelayK(100); //去抖动
if(S7 == 0)
{
L1 = 0;
while(S7 ==0);
L1 = 1;
}
}
}
全部代码展示:
/***********************************************************
将J5处的跳帽接到2~3引脚,使按键S4~S7四个按键的另外一端接地
从而成为4个独立键盘。在扫描按键的过程中,发现有按键触发信号
后,先做去抖动处理,当确认为按键按下时,才进行相应的功能处理。
1、按下S7点亮L1指键熄灭。S6点亮L2指示灯,S5点亮L3指示灯,
S4点亮L4指示灯,都是松开熄灭。按键均作去抖。
************************************************************/
#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;
sbit L5 = P0^4;
sbit L6 = P0^5;
sbit L7 = P0^6;
void DelayK(unsigned char t)
{
while (t--);
}
void HC138_state(unsigned char channel)
{
switch(channel)
{
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 Key_Proc()
{
if(S7 == 0)
{
DelayK(100);//去抖动
if(S7 == 0)
{
L1 = 0;
while(S7 ==0);
L1 = 1;
}
}
}
//初始化关外设
void InitSystem()
{
HC138_state(4);
P0=0x00; //蜂鸣器,继电器都关闭
}
void main()
{
// InitSystem();
HC138_state(4);
while(1)
{
Key_Proc();
}
}