单片机四个独立按键控制led的问题
时间:10-02
整理:3721RD
点击:
我想实现的是:比如说 按键2 按下,led灯亮,这时候如果再按下按键1 按键2 和按键3 程序会判为无效,一直到按下 停止键 时,灯灭,这时候才能按按键1或者2 或者3
我写了个程序 按那个键 都不执行。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit gwjr=P3^0; //按键0
sbit gwgz=P3^1; //按键1
sbit gwpc=P3^2; //按键2
sbit tz=P3^3; //停止键
sbit tsj=P1^0; //led0
sbit clq=P1^1; //led1
sbit blq=P1^2; //led2
sbit cfj=P1^3; //led3
uint key;
void delay(uint key);
void Key_Scan(key) //扫描按键
{
if(gwjr==0)
delay(20);
while(gwjr==0);
if(gwjr==0)key=1;
while(gwjr==0);
if(gwgz==0)
delay(20);
while(gwgz==0);
if(gwgz==0)key=2;
while(gwgz==0);
if(gwpc==0)
delay(20);
while(gwpc==0);
if(gwpc==0)key=3;
while(gwpc==0);
if(tz==0)
delay(20);
while(tz==0);
if(tz==0)key=0;
while(tz==0);
}
void main()
{
Key_Scan(key);
switch(key)
{case 1:delay(10);
while(key==1);
tsj=~tsj;
delay(200);
clq=~clq;break;
case 2:delay(10);
while(key==2);
tsj=~tsj;
delay(200);
clq=~clq;
delay(200);
blq=~blq;
delay(200);
cfj=~cfj;break;
case 3:delay(10);
while(key==3);
tsj=~tsj;
delay(200);
clq=~clq;
delay(200);
blq=~blq;break;
case 0:delay(10);
while(key==0);
tsj=tsj;
clq=clq;
blq=blq;
cfj=cfj;break;
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=1248;y>0;y--){}
}
}
