我刚刚开始接触单片机,算还没完全入门呢。实验板的例程也研究的似懂非懂的。
题目是:
有4个按钮开关S1-S4,分别对应4个LED灯,L1-L4,(或对应4个继电器J1-J4)。
要求实现:
当按一S1时,L1亮,再按一下S1时,L1灯灭(或是继电器J1断开)。
如果还是按S1时,还是L1亮(或是继电器J1吸合)。
这时若是按下S2,原来亮的L1熄灭(或是继电器J1断开),
L2亮(或是继电器J2吸合)。
若再按S2,L2灭(或是继电器J2开)。
依次类推,开关的按下没有顺序规定。
今天搞了一下午,没有成功,我只会做到按下S1,L1亮,按下S2,L1灭,L2亮。。。。。。
无法做到,按过S1,L1亮后,再按一下S1能让L1灭掉。
请大侠们不吝赐教,程序思路怎么样,怎样做到判断再次按下S1时,灯是否是亮的。
如果可能的,大侠们能帮忙编一段程序吗?
这个很简单啊,把下面的代码烧入51hei开发板,按S5按钮立刻看到效果,按一次亮再按一次灭……,希望对你有帮助
#include < at89x51.H> //包含文件 void delay10ms(void) //延时函数 { unsigned char i,j; for(i=20;i>0;i--) //用循环的方法延时 for(j=248;j>0;j--); } void main(void) {P1_4=0; //开led使能 while(1) //死循环 {if(P3_7==0)//以下3行是消除抖动 {delay10ms(); //延时大约10毫秒 if(P3_7==0) { while(P3_7==0); //松手检测,如果没有松手则一直循环 P0_0=~P0_0; //如果松手则把p1.0取反后送P1.0 } } } }
太感谢了,一句P0_0=~P0_0,让人豁然开朗,我今天下午实现了题目要求的功能,谢谢。
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |