完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#define uint unsigned int #define uchar unsigned char unsigned char KeyValue=0; ***it key1=P3^0; ***it key2=P3^1; ***it key3=P3^2; ***it key4=P3^3; ***it LED=P2^0; void delay(uint count) { uint i,j; for(i=0;i for(j=0;j<110;j++); } void main() { while(1) { if(!key1) { delay(10); //去抖动 if(!key1) //检测按键确实按下,进行按键处理 { LED=0; delay(200); LED=1; delay(200); LED=0; delay(200); LED=1; delay(200); LED=0; delay(200); LED=1; delay(200); LED=0; delay(6000); LED=1; delay(700); } } if(!key2) { delay(10); //去抖动 if(!key2) //检测按键确实按下,进行按键处理 { LED=0; delay(700); LED=1; delay(700); LED=0; delay(700); LED=1; delay(700); LED=0; delay(5000); LED=1; delay(700); } } if(!key3) { delay(10); //去抖动 if(!key3) //检测按键确实按下,进行按键处理 { LED=0; delay(1200); LED=1; delay(700); LED=0; delay(700); LED=1; delay(700); LED=0; delay(1200); LED=1; delay(700); } } if(!key4) { delay(10); //去抖动 if(!key4) //检测按键确实按下,进行按键处理 { LED=1; while(!key4); //松手检测 LED=1; } } } } 我需要用四个独立按键控制一个LED灯,按下KEY1时执行一段程序循环执行,按下KEY2时执行一段程序循环执行,KEY3时执行一段程序循环执行,KEY4时执行一段程序循环执行。当执行key1的程序时我按下key2迅速从key1程序,四个按键的程序可以随意按下切换。 我自己写的,按下后不能循环,执行一次就灭了。如果给每段加上while(1)就死循环了,出不来了。如果用外部中断,外部中断不够。后面我还想再加2个按键2段程序 ,别人说我,框架弄的有问题。求云汉大神,给我写一段让我学习学习。 |
|
相关推荐
14个回答
|
|
|
|
|
|
刚加了。谢谢您能帮助我。
|
|
|
|
|
|
|
|
根据和楼主的沟通,我写新的程序:
#include #define uint unsigned int #define uchar unsigned char unsigned char KeyValue=0; ***it key1=P3^0; ***it key2=P3^1; ***it key3=P3^2; ***it key4=P3^3; ***it LED=P2^0; void delay(uint count) { uint i,j; for(i=0;i for(j=0;j<110;j++); } void main() { uint key_num = 0; uint key_flg = 0; while(1) { LED = 1; if(!key1) { delay(10); //??? if(!key1) //????????,?????? { key_num ++ ; key_flg = 0; } } if(( key_num == 1) && !key_flg )//????????,?????? { key_flg = 1; LED=0; delay(200); LED=1; delay(200); LED=0; delay(200); LED=1; delay(200); LED=0; delay(200); LED=1; delay(200); LED=0; delay(6000); LED=1; delay(700); } if((key_num == 2)&& !key_flg ) //????????,?????? { key_flg = 1; LED=0; delay(700); LED=1; delay(700); LED=0; delay(700); LED=1; delay(700); LED=0; delay(5000); LED=1; delay(700); } if((key_num == 3)&& !key_flg ) { key_flg = 1 ; LED=0; delay(1200); LED=1; delay(700); LED=0; delay(700); LED=1; delay(700); LED=0; delay(1200); LED=1; delay(700); } if((key_num == 4) && !key_flg ) //????????,?????? { key_flg = 1; LED=0; delay(1200); LED = 1 ; key_num = 0; } } } |
|
|
|
那你能帮我写一下吗。因为就只会io口操作,才学了这么点。
|
|
|
|
不对。我试了。
|
|
|
|
哪里不对,请详细说明你的需求。
|
|
|
|
不好意思,中午去测绘了个东西,3点才回来。刚在QQ上给你发消息了。
怎么说呢,功能是:k1-k4四个按键,k1键对应一段程序(ps:就是控制led闪烁的频率) k2键对应一段程序, k3键对应一段程序, k4键对应一段程序, 开发板上电,默认led灯是熄灭的。然后我按下k1,此时执行k1键所对应的程序,而且是重复循环执行。当我按下k2键或者k3,k4键的时候,能从k1的程序中快速跳出执行其他键的程序。 闪烁的频率就是我之前写的那么个频率。我以前以为要用外部中断,但是我的按键太多外部中断也不够用,后来别人给我说:直接设置一个变量k……四个按键分别让k等于1,2,3,4……然后主函数用一个循环,switch~k就行了 以我的水平实在是理解不了,更写不出来 |
|
|
|
中断可以共用的。
|
|
|
|
云汉达人
按键不用中断也是可以的,你会用定时器么?你这按键里面等的闪烁用函数延时会很有问题的,会导致你按键的时候可能正好在执行延时程序,所以你的按键会相应不了,用定时器延时去控制闪烁,效果会好很多。我有时间帮你弄个吧…… |
|
|
|
代码这么多,其实这个用状态机做最好了, switch(key) {case 1: 程序段1;break;case 2: 程序段2;break;case3: 程序段3;break;case 4: 程序段1;break;}
|
|
|
|
云汉达人
正好有时间帮你写了一下,用定时器实现的,你看下写的对不对,由于上传不了代码,只能传图片跟附件给你了,希望能帮助到你,有问题欢迎常来提问(源代码见最后附件): 源代码: |
|
|
|
这样做比较浪费接口啊,推荐使用ZLG7290或者加一片3-8线的74138
|
|
|
|
这样做比较浪费接口啊,推荐使用ZLG7290或者加一片3-8线的74138
|
|
|
|
只有小组成员才能发言,加入小组>>
695 浏览 0 评论
1106 浏览 1 评论
2473 浏览 5 评论
2808 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2646 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
655浏览 9评论
651浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
783浏览 6评论
631浏览 5评论
671浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 03:55 , Processed in 1.288882 second(s), Total 109, Slave 88 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号