微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 按键冲突了如何解决?

按键冲突了如何解决?

时间:10-02 整理:3721RD 点击:

#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灯才会亮!



我是新手,我来学习

程序怎么只有一半?

你这程序没发全?  我是暂时没看出来

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top