51单片机一个独立按键怎么同时控制一个LED灯移位(按第一次k1,D1亮;然后按K2,led移位;按第二次k1,D1再次亮;再按K2,两个灯一起移位)
#include <REGX52.H>
void main(){
while(1){
if(P3_1==0){
P2_0=0;
}
else{
P2_0=1;
}
}
}
#include <REGX52.H>
void Delay(unsigned int xms)
{
unsigned char i, j;
while (xms){
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main(){
while(1){
if(P3_1==0){
Delay(20);
while(P3_1==0);
Delay(20);
P2_0=~P2_0;
}
}
}
浅答一下,题主可以通过记录按键按下次数来实现。程序思路如下
uint8 gKey1Count = 0; // 记录按键k1按下次数变量
uint8 gKey2Count = 0; // 记录按键k2按下次数变量
// 按下k1
// 等于1还是0取决于按键电路设计
if (k1 == 0)
{
delay(10); // 延时消抖
// 按键k1第一次被按下
if (k1 == 0 && gKey1Count == 0)
{
// 等于0还是1取决于LED电路设计
D1 =0; // D1点亮
gKey1Count = gKey1Count + 1; // 按键k1按下次数加1
}
// 按键k1第二次被按下
if (k1 == 0 && gKey1Count == 1)
{
// 等于0还是1取决于LED电路设计
D1 =0; // D1点亮
gKey1Count = 0; // 清零计数变量
}
// 按下k2
// 等于1还是0取决于按键电路设计
if (k2 == 0)
{
delay(10); // 延时消抖
// 按键k2第二次被按下
if (k2 == 0 && gKey2Count == 0)
{
// LED位移不知道具体意思
gKey2Count = gKey2Count + 1; // 按键k2按下次数加1
}
// 按键k2第二次被按下
if (k2 == 0 && gKey2Count == 1)
{
// 两个灯一起点亮
gKey2Count = 0; // 清零计数变量
}
}
}
有帮助请采纳!谢谢!