完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
哪位大神帮忙解答一下,我这个程序运行的时候,按键按下去,灯亮一次,再按多少次灯都不变化,但是改成 #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long #include ***it P10 = P1^0; //头文件中没有定义的IO 就要自己来定义了 ***it P11 = P1^1; ***it P12 = P1^2; ***it P13 = P1^3; ***it K1= P3^2; bit ldelay=0; //长定时溢出标记,预置是0 uchar speed=10; //设置一个变量保存默认的跑马灯的移动速度 uchar speedlever=0; //保存当前的速度档次 //用外中断方式读按键K1,点亮一个LED void delay(void) { uint i; for (i=3000;i>0;i--); } void main(void) // 主程序 { IT0=1; //外中断跳变产生中断 EX0=1; EA=1; //打开总中断 while(1) {if (!K1) { delay(); ldelay=~ldelay; while(!K1) delay() ; P10=ldelay; } } } 这个程序后就正常了,为什么呢?急急急急 |
|
相关推荐
13个回答
|
|
|
|
|
|
这回真是对了,那为什么,下面那个程序{if (!K1)
{ delay(); ldelay=~ldelay; while(!K1) delay() ; P10=ldelay; } 这地方不加延时为什么可以呢 |
|
|
|
|
|
|
|
在上面程序中没有用中断,只是先做了按键去抖的实验
|
|
|
|
|
|
|
|
这次明白了,就是不是之前发现的P10=light,后面需要加延时才行,而是这句话要放到if (!K1){}的大括号里面。我参考的那个第一个程序是错误的。谢谢 |
|
|
|
我理解的去抖就是读取-延迟-再读取-确认-防松手死循环-松手-输出
|
|
|
|
那你理解的程序是什么样的?为什么读取,延迟完了,还要再读取,确认,然后再放松手死循环,松手,输出,好像跟我看到的程序不一样 |
|
|
|
第一次读取,假如是1,延迟以后再读取仍然是1的话,那就说明确定按下了,最后加个简单的while防松手死循环,目的是松手以后再输出,否则一直停留在读取延迟读取中。。。 |
|
|
|
你可以试试在if(!k1)前面加个K1=1;
|
|
|
|
|
|
不错,顶一下楼主,值得收藏
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
238 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
629 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
552 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
552 浏览 0 评论
1074 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11765 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 10:05 , Processed in 0.847255 second(s), Total 100, Slave 81 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号