初学单片机,编程不太熟悉,51单片机根据开关状态输出高低电平,有逻辑判断,请教编程思路,用C语言!
1.单片机的P1.0-P1.3接4个发光管,指示开关状态,低电平亮;2.单片机的P1.4-P1.7口接4个开关,默认高电平,按下后为低电平;3.单片机的P2.5-P2.7...
1.单片机的P1.0-P1.3接4个发光管,指示开关状态,低电平亮;
2.单片机的P1.4-P1.7口接4个开关,默认高电平,按下后为低电平;
3.单片机的P2.5-P2.7是3个输出,根据按键的状态输出高低电平;
按键和输出口的逻辑关系是:
a.任意1个按键按下后(低电平),有一个对应的指示灯点亮,如:P1.4为0,P1.0为0;依次类推!
b
按键状态 指示灯 输出状态
P1.4=0 P1.0=0 P2.7=0
P1.5=0 P1.1=0 P2.6=0
P1.6=0 P1.2=0 P2.6=0 P2.7=0
P1.7=0 P1.3=0 P2.5=0 P2.6=0 P2.7=0
逻辑关系如上,我现在可以写出单一的按键判断的程序,但是感觉后两种状态的时候有冲突,不知道从编程角度,类似这个逻辑关系,用C语言该如何写呢?如果能够给出例程程序,就深表感谢了!采纳的,我送50分给各位!
感谢各位回答!
上面没写全,还有一个按键判断,
如果P1.4-P1.7任意2个或者以上按键按下(低电平),P2.5=0 P2.6=0 P2.7=0 展开
2.单片机的P1.4-P1.7口接4个开关,默认高电平,按下后为低电平;
3.单片机的P2.5-P2.7是3个输出,根据按键的状态输出高低电平;
按键和输出口的逻辑关系是:
a.任意1个按键按下后(低电平),有一个对应的指示灯点亮,如:P1.4为0,P1.0为0;依次类推!
b
按键状态 指示灯 输出状态
P1.4=0 P1.0=0 P2.7=0
P1.5=0 P1.1=0 P2.6=0
P1.6=0 P1.2=0 P2.6=0 P2.7=0
P1.7=0 P1.3=0 P2.5=0 P2.6=0 P2.7=0
逻辑关系如上,我现在可以写出单一的按键判断的程序,但是感觉后两种状态的时候有冲突,不知道从编程角度,类似这个逻辑关系,用C语言该如何写呢?如果能够给出例程程序,就深表感谢了!采纳的,我送50分给各位!
感谢各位回答!
上面没写全,还有一个按键判断,
如果P1.4-P1.7任意2个或者以上按键按下(低电平),P2.5=0 P2.6=0 P2.7=0 展开
3个回答
展开全部
编程思路:每次都是将P1口的值读取进来,再屏蔽低4位,仅对高4位进行判断
{
#define INPUTMASK 0xF0
char ReadPort = 0;
ReadPort = P1 & INPUTMASK;
switch(ReadPort)
{
case 0xf0: break; /* 没有任何按键按下,跳出 */
case 0x10: Subfunction1();break; /* P1.4按下,跳转到子函数1 */
case 0x20: Subfunction2();break; /* P1.5按下,跳转到子函数2 */
case 0x40: Subfunction3();break; /* P1.6按下,跳转到子函数3 */
case 0x80: Subfunction4();braak; /* P1.7按下,跳转到子函数4 */
default:
Subfunction5();braak; /* 任意2个或以上按键按下,跳转到子函数5 */
}
}
在switch case函数中采用模块块编程,这里的子函数,即在相应的按键状态下其它端口的状态实现,不再赘述。
{
#define INPUTMASK 0xF0
char ReadPort = 0;
ReadPort = P1 & INPUTMASK;
switch(ReadPort)
{
case 0xf0: break; /* 没有任何按键按下,跳出 */
case 0x10: Subfunction1();break; /* P1.4按下,跳转到子函数1 */
case 0x20: Subfunction2();break; /* P1.5按下,跳转到子函数2 */
case 0x40: Subfunction3();break; /* P1.6按下,跳转到子函数3 */
case 0x80: Subfunction4();braak; /* P1.7按下,跳转到子函数4 */
default:
Subfunction5();braak; /* 任意2个或以上按键按下,跳转到子函数5 */
}
}
在switch case函数中采用模块块编程,这里的子函数,即在相应的按键状态下其它端口的状态实现,不再赘述。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用CASE来选择处理过程就可以啦。
【如果P1.4-P1.7任意2个或者以上按键按下(低电平),P2.5=0 P2.6=0 P2.7=0】
程序循环最后段加上,任意2个或者以上按键按下,,P2.5=0 P2.6=0 P2.7=0
void main()
{
int k;
while(1)
{
k=0
while(!p14)
{p10=0;P2=0x7f;k=k+1;}
while(!p15)
{p11=0;P2=0xbf;k=k+1;}
while(!p16)
{p12=0;P2=0x3f;k=k+1;}
while(!p17)
{p13=0;P2=0x1f;k=k+1;}
{if (k>1);P2=0x1f;}
}
}
【如果P1.4-P1.7任意2个或者以上按键按下(低电平),P2.5=0 P2.6=0 P2.7=0】
程序循环最后段加上,任意2个或者以上按键按下,,P2.5=0 P2.6=0 P2.7=0
void main()
{
int k;
while(1)
{
k=0
while(!p14)
{p10=0;P2=0x7f;k=k+1;}
while(!p15)
{p11=0;P2=0xbf;k=k+1;}
while(!p16)
{p12=0;P2=0x3f;k=k+1;}
while(!p17)
{p13=0;P2=0x1f;k=k+1;}
{if (k>1);P2=0x1f;}
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
从你给的逻辑上看不出要求判断两个按键同时按下时有什么要求。
看样子各部分独立存在,不相影响。
看样子各部分独立存在,不相影响。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询