打印

新手问题

[复制链接]
1091|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhengwenfeng|  楼主 | 2016-9-27 20:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教个新手问题,我第一次编这个,目的是用四个灯标识两个按键的状态
如果两件都没按下,led1闪烁,如果两个同时按下,led2闪烁,led3和led4表示两个按键的状态
如果只按一个键,led1和led2不亮,led5亮起

目前的状况是循环不知道怎么跳出来,要么就是不停循环led5怎么也不亮,要么不循环直接顺序
执行,led5自己就亮了

请高手指点

#include <reg52.h>

sbit key1=P3^4;       //定义按键的输入端S2键
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;

void time500ms(void) //延时程序
{
        unsigned int i,j;
        for(i=200;i>0;i--)
        for(j=248;j>0;j--);
}
void time100ms(void) //延时程序
{
        unsigned int i,j;
        for(i=40;i>0;i--)
        for(j=248;j>0;j--);
}

key(jj)           //按键判断程序
{
jj=1;
time100ms();
if(key2==0&&key1==1)
{led1=1;jj=0;};
if(key2==1&&key1==0)
{led2=1;jj=0;};
if(key1==0&&key2==1)
{led1=1;jj=0;};
if(key1==1&&key2==0)
{led2=1;jj=0;};
if(key1==key2&&key1==0)
led2=0;
if(key1==key2&&key1==1)
led1=0;

return(jj);}
     



main()
{

int i=1,j;
//判断抽样选择是否正确,都没选择,灯1亮,都选择了灯2亮,选择正确下一步
do{
key(i);
time500ms();
led3=key1;
led1=1;
led4=key2;
led2=1;
time500ms();
}while(i>0);
led5=0;
}

相关帖子

沙发
heishe1989| | 2016-9-27 20:19 | 只看该作者
编程还是要讲求思路清晰,你那个按键程序设计的那么复杂自然不好找原因,最好的办法是在main函数里用几个这样的语句

while(判断按键)
{相应的灯闪烁}

这样程序就清晰多了

使用特权

评论回复
板凳
zhengwenfeng|  楼主 | 2016-9-27 20:25 | 只看该作者
heishe1989 发表于 2016-9-27 20:19
编程还是要讲求思路清晰,你那个按键程序设计的那么复杂自然不好找原因,最好的办法是在main函数里用几个这 ...

哦,对哈,我的确实分析好复杂,头都大了

谢谢!

我再重新设计个方案

使用特权

评论回复
地板
zhengwenfeng|  楼主 | 2016-9-27 20:41 | 只看该作者
heishe1989 发表于 2016-9-27 20:19
编程还是要讲求思路清晰,你那个按键程序设计的那么复杂自然不好找原因,最好的办法是在main函数里用几个这 ...

#include <reg52.h>

sbit key1=P3^4;       //定义按键的输入端S2键
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;

void time500ms(void) //延时程序
{
        unsigned int i,j;
        for(i=200;i>0;i--)
        for(j=248;j>0;j--);
}
void time100ms(void) //延时程序
{
        unsigned int i,j;
        for(i=40;i>0;i--)
        for(j=248;j>0;j--);
}

main()
{

if(key1==key2&&key1==0)led1=0;
if(key1==key2&&key1==1)led2=0;
while(key1==0&&key2==1)
{
led1=1;
led2=1;
led3=0;
led4=1;
led5=0;
}
;
while(key1==1&&key2==0)
{led1=1;
led2=1;
led3=1;
led4=0;
led5=0;
}
time500ms();
led1=1;
led2=1;
led3=1;
led4=1;
led5=1;

}

使用特权

评论回复
5
zhengwenfeng|  楼主 | 2016-9-27 20:42 | 只看该作者
heishe1989 发表于 2016-9-27 20:19
编程还是要讲求思路清晰,你那个按键程序设计的那么复杂自然不好找原因,最好的办法是在main函数里用几个这 ...

问题解决了,太感谢了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

6

帖子

0

粉丝