完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
如何让正在运行单片机程序暂停:就比如一个流水灯程序,主函数是几个动画效果flash。程序段如下:
void main() { init() // 各种初始化 while(1) { flash_1(); flash_2(); flash_3(); } } 中断函数:void time() interrupt 1{.....}//往IO口送数据。 但是现在我想加一个按键实现暂停效果:按键按下一次程序暂停保留当前效果(就是保留着哪盏灯亮哪盏灯不亮),单按键第二次按下从当前效果继续往下运行。下面是我修改后的代码,功能却无法实现,请各位大神指点一二 uchar keyscan() { if(key==0) { delay(50); if(key==0) { keym++; TR0=0; if(keym=1) button=0; if(keym=2) button=1; if(keym>2) keym=1; while(!key); } } else button=1; return(button); } void main() { init() // 各种初始化 keyscan(); while(button) { flash_1(); flash_2(); flash_3(); } } 中断函数未改动!!!暂停功能无法实现。 此思路是否正确?如果再用一个中断来处理那么又是怎样解决呢?请大神指点一二!!! |
|
相关推荐
6个回答
|
|
完整程序贴出来看看啊,不知道你中断怎么调用的
|
|
|
|
中断嘛,就是停下当前做的事去做另一件事,当做完后接着之前的事继续运行,你就中断是把IO口的收据输出即可,这样不是暂停了吗?程序你在想想!
|
|
|
|
这是我在做光立方的的时候碰到的问题!!中断完整函数如下 void time() interrupt 1 { uchar i; static uchar layer=0; P1=0; for (i=0;i<8;i++) { P2=1< delay(3); P0=display[layer]; delay(3); } P1=1< if (layer<7) layer++; else layer=0; TH0=0xc0; TL0=0; } |
|
|
|
|
|
|
|
如此说来我上面的思路就是错误的了?必须得在开一个外部中断,但是在中断里面有如何让flash停下来呢 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
298 浏览 1 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
309 浏览 0 评论
826 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1911 浏览 2 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1427 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12031 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 01:26 , Processed in 0.546062 second(s), Total 51, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号