4x4按键P3口控制(独立只需用到S4~S7,也就是p3.0~p3.3,con3接3和2)
点灯需要的硬件再这里也需要用到,如译码器,或非门,数据选择器。
#include "STC15F2K60S2.h" 单片机头文件名,定义一些特殊的数据寄存器0.0,如#include "reg51.h",是在打单片机程序前需要打出来的,如c语言的#include "stdio.h"
每次检测按键按下时需要有延时去抖,因为在按下按键时按键其实是接触分离了很多次然后才稳定下来的,所以在接触分离时需要延迟程序要避过,然后再次检测稳定时的状态是什么,延时最好设定为一毫秒,长了反应慢,短了反应太快。
#include "STC15F2K60S2.h"
sbit LED1=P0^0;
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
delay(unsigned int MS)
{//延时程序
unsigned int i,j;
for(i=0;i<MS;i++)
for(j=0;j<MS;j++);
}
void main()
{
In();
P2=0x80;//开启Y4C
LED1=1;LED2=1;LED3=1;LED4=1;
while(1)
{
if((P3&0x0f)!=0x0f)
{//检测按键是否按下
delay(500);//延时去抖
if((P3&0x01)!=0x01)//再次检测
{
LED1=!LED1;//点亮或者熄灭L1
while((P3&0x01)!=0x01);//检查是否放开按键
}
if((P3&0x02)!=0x02)
{
LED2=!LED2;
while((P3&0x02)!=0x02);
}
if((P3&0x04)!=0x04)
{
LED3=!LED3;
while((P3&0x04)!=0x04);
}
if((P3&0x08)!=0x08)
{
LED4=!LED4;
while((P3&0x08)!=0x08);
}
else;
}
}
}