按键冲突了如何解决?
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;
sbit led6=P1^5;
sbit led7=P1^6;
sbit led8=P1^7;
sbit s1=P3^2;//外部中断IO口
sbit s2=P3^3;//LED触发
sbit s3=P3^4;//模式选择,S3=1 模式1,S3=0 模式2
//延时函数
void delay_ms(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
//主程序
void main()
{
uchar num,num1;
num=0; num1=0;
led1=1; led2=1; led3=1; led4=1;
led5=1; led6=1; led7=1; led8=1;
P1=0xff; P0=0xff;
while(1)//大循环
{
num1=0;
if(s3==0)//模式选择 模式2
{
delay_ms(5);
P1=0xff; P0=0xff;
if(s3==0)//模式选择 模式2
{
/*********************LED触发***************************************/
if(s2==0)//LED触发
{
delay_ms(5);
if(s2==0)//LED触发
{
num++;//模式2变量
if(num==9)
{
led8=1;
num=0;
}
while(!s2);//等待按键释放
}
}
/*********************LED触发***************************************/
switch(num)
{
case 1: led1=0; led8=1;
break;
case 2: led2=0; led1=1;
break;
case 3: led3=0; led2=1;
break;
case 4: led4=0; led3=1;
break;
case 5: led5=0; led4=1;
break;
case 6: led6=0; led5=1;
break;
case 7: led7=0; led6=1;
break;
case 8: led8=0; led7=1;
break;
}
while(!s3);//等待按键释放
}
}
else //模式选择 模式1
{
num=0;
P0=0xff; P1=0xff;
while(s3)
{
/*********************LED触发***************************************/
if(s2==0)//LED触发
{
delay_ms(5);
if(s2==0)//LED触发
{
num1++;//模式2变量
if(num1==5)
{
led7=1; led8=1;
num1=0;
}
while(!s2);//等待按键释放
}
}
/*********************LED触发***************************************/
switch(num1)
{
case 1: led7=1; led8=1;
led1=0; led2=0;
break;
case 2: led1=1; led2=1;
led3=0; led4=0;
break;
case 3: led3=1; led4=1;
led5=0; led6=0;
break;
case 4: led5=1; led6=1;
led7=0; led8=0;
break;
}
}
}
}
这个项目要求是这样的,S3为模式选择开关(带自锁),S2为触发按键,当S3接通时为工作模式2,每触发一次S2,一个LED灯向右移动一次,依次循环;当S3断开时为工作模式1,每触发一次S2,两个LED向右移动一次,依次循环。可就是出现了一个小问题!就是S3按下自锁时,也就意味着一直给IO口3.4给低电平,这个时候每次按下S2的时候都要等手松开才LED灯才会亮!
我是新手,我来学习
程序怎么只有一半?
你这程序没发全? 我是暂时没看出来