作业帮 > 综合 > 作业

单片机中开关K1,K2,K3,K4分别接P1.0到P1.4口,灯D1接P2.0口,K1,K2,K3中一个开关闭合灯亮,断

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/01 09:58:49
单片机中开关K1,K2,K3,K4分别接P1.0到P1.4口,灯D1接P2.0口,K1,K2,K3中一个开关闭合灯亮,断开灭,
K4只灭灯.灭后,K1,K2,K3还可以开,帮忙写下程序啊,
sbit Key1 = P0^1;
sbit Key2 = P0^2;
sbit Key3 = P0^3;
sbit Key4 = P0^4;
sbit LED = P2^0;
#define ON 1
#define OFF 0
unsigned char flag;
int main(void)
{
flag = OFF;
while (1)
{
if ((Key1|Key2|Key3)&& (flag == OFF)) ///灯处于熄灭状态时 任何按键可以点亮
{
LED = 1;
flag = ON;
}else{
LED = 0;
flag = OFF;
}
if (Key4 &&(flag == ON)) ///按下key4时 熄灭灯,且任何按键无法点亮灯
{
LED = 0;
flag = ON;
}
if (!Key4) ///松开 key4 可以灯可以重新被点亮
{
flag = OFF;
}
}
}
你的描述不是很清楚,我按照我的理解写的.
再问: 真心非常感谢你的回答。也许是我说的不清楚。你上面回答的 if (Key4 &&(flag == ON)) ///按下key4时 熄灭灯,且任何按键无法点亮灯 我想要的是Key4灭灯后,不动,KEY1,2,3都可以再点亮,KEY4可再灭。KEY4可否用点动的来控制,能帮忙再改下程序吗
再答: sbit Key1 = P0^1; sbit Key2 = P0^2; sbit Key3 = P0^3; sbit Key4 = P0^4; sbit LED = P2^0; #define ON 1 #define OFF 0 unsigned char flag1; bit key1o,key2o,key3o; int main(void) { flag1 = 0; key1o = Key1; ///记录按键状态 初始时按键保证为断开 否则第一次按键闭合将失效 key2o = Key2; key3o = Key3; while (1) { if ((Key1 != key1o)&&(Key1)) ///k1 是从断开到闭合 { key1o = Key1; ///记录当前状态 保证按键断开不动作 flag1 = ON; } if ((Key2 != key2o)&&(Key2)) { key2o = Key2; flag1 = ON; } if ((Key3 != key3o)&&(Key3)) { key3o = Key3; flag1 = ON; } if (Key4) ///k4 点动 关闭灯 { flag1 = OFF; } if (flag1 == ON) ///判断当前状态 处理灯 { LED = 1; }else{ LED = 0; } } } 这个程序应该是可以的了。