
J5跳帽接到2~3引脚,使s4-s7的另一端接地,形成4个独立按键。在独立按键扫描的过程中,发现有接触信号,先进行去抖动处理(延时),当确实按键按下时,才进行功能处理。
基本操作:
s7控制点亮led1,松开熄灭;
s6控制点亮led2,松开熄灭;
s5控制点亮led3,松开熄灭;
s4控制点亮led4,松开熄灭;
程序编译
#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;
void selecthc573(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--);
}
void skey_alone()
{
if(s7 == 0)
{
delayk(600);
if(s7 == 0)
{
l1 = 0;
while(s7 == 0);
l1 = 1;
}
}
if(s6 == 0)
{
delayk(600);
if(s6 == 0)
{
l2 = 0;
while(s6 == 0);
l2 = 1;
}
}
if(s5 == 0)
{
delayk(600);
if(s5 == 0)
{
l3 = 0;
while(s5 == 0);
l3 = 1;
}
}
if(s4 == 0)
{
delayk(600);
if(s4 == 0)
{
l4 = 0;
while(s4 == 0);
l4 = 1;
}
}
}
void main()
{
selecthc573(4);
while(1)
{
skey_alone();
}
}