完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
//主程序 void main() { init(); while(1) { if(key1==0)//流水灯按钮 { delay_ms(10); if(key1==0) { flag=0; while(!key1); } } if(key2==0)//继电器按钮 { delay_ms(10); if(key2==0) { flag1=0; while(!key2); } } if(flag==0)//流水灯程序 { led1=0; delay_ms(500); led2=0; delay_ms(500); led3=0; delay_ms(500); led4=0; delay_ms(500); led1=1; led2=1; led3=1; led4=1; delay_ms(500); flag=1; } if(flag1==0)//继电器程序 { rel1=0; delay_ms(1000); rel1=1; delay_ms(1000); flag1=1; } } } 大家好,这是一段两个按钮分别控制流水灯和继电器的程序,其中key1控制流水灯,key2控制继电器。我这个程序并没有达到预期的效果,两个按钮在执行过程中会冲突,比如先按下key1时,执行流水灯程序,此时再按key2无效,必须要等流水灯程序中的flag=1(即退出if(flag==0)//流水灯程序以后)再按key2才有效。先按key2也一样,必须要等flag1=1 (即退出if(flag1==0)//流水灯程序以后)再按key1才有效。请问如何更改程序才能使其不受制约?我要达到的目的是任何时候按下key1或key2都会执行各自的程序,相互间不受制约?请各位网友多指点,谢谢。
|
|
相关推荐
10个回答
|
|
|
单片机是循环运行,你的逻辑就是从上到下按顺序进行,要实现你的情况有两种方法,一个是key之间相互嵌套,另一个是用UCOS操作系统
|
|
|
|
|
|
你可以用case 结构,key1==0时flag=0,key2==0时flag=1.再switch(flag),case 0的时候运行流水灯程序,break;case 1的时候运行继电器程序,break。
|
|
|
|
|
|
因为你的流水灯和继电器在运行的时候并不进行按键检测,所以你按下去没反应
|
|
|
|
|
|
尽量少用程序延时,你的程序用了太多延时了,占用了太多CPU,用你现在这种方法很难实现。用定时器延时和改一下你亮灯的算法,不要一位一位来,用移位来实现
|
|
|
|
|
|
我改了一下你的程序,因为我没有硬件在这里,就懒得编译了,不知有没有语法错误,你拷进去看行不行,大概思路就是这样子了
void timer0()interrupt 1 { unsigned char tcount,tcount1; TH0=0X54; //定时时间随便定的,楼主可以根据自己需要更改 TL0=0x92; if(!flag)tcount++; if(tcount==10)led1=0; if(tcount==20)led2=0; if(tcount==30)led3=0; if(tcount==40)led4=0; if(tcount==50)tcount=0,led1=1,led2=1,led3=1,led4=1,flag=1; if(!flag1)rel1=0;tcount1++; if(tcount1>100)rel1=1;tcount1=0,flag1=1; } void main() { IE=0x82; //开定时器中断 PT0=1; TMOD=0X01; TH0=0X54; //定时时间随便定的,楼主可以根据自己需要更改 TL0=0x92; TR0=1; //开定时器0 init(); while(1) { if(key1==0)//流水灯按钮 { // delay_ms(10); 后面有松手检测,前面就没必要消抖了,下面的同理 // if(key1==0) // { flag=0; while(!key1); // } } if(key2==0)//继电器按钮 { flag1=0; while(!key2); } } } |
|
|
|
|
|
更多细节楼主看着改吧
|
|
|
|
|
|
|
|
|
用tiny吧,哈哈
|
|
|
|
|
|
|
|
|
1 条评论
|
|
|
由于你的延时很长!~~~
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
435 浏览 0 评论
464 浏览 0 评论
450 浏览 0 评论
806 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
748 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
17012 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-12 08:15 , Processed in 1.132030 second(s), Total 103, Slave 82 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3912