微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机四个独立按键控制led的问题

单片机四个独立按键控制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--){}
}
}


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

网站地图

Top