找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1217|回复: 3
收起左侧

请教关于比较长的单片机子函数中及时跳出的问题

[复制链接]
ID:619118 发表于 2019-10-9 10:30 | 显示全部楼层 |阅读模式
最近琢磨给高达模型加灯,一开始想在那个宝上找一些跑马灯、呼吸灯的成品,但是花样都不是我想要的。
偶尔看到有一家店买C51单片机控制的心形灯。作为野生码农,就决定自己搞搞,用C51来控制花样切换等等。
作为单片机零基础的人,在论坛看了不少范例,借鉴了论坛上 http://www.51hei.com/bbs/dpj-153979-1.html (谢谢该程序的作者)的代码自己写了一个,用了P1和P2两组IO,总共16个灯组(每组等1-4个灯不等),灯的样式有3个花样,各个样式通过按钮(p3.2 int0)切换
花样1:所有灯按顺序渐亮,LED1逐渐点亮,然后LED2逐渐点亮,最终所有灯全亮,耗时大概5、6秒
花样2:所有灯循环呼吸灯,一个循环大概1秒
花样3:所有灯一直全亮

3个样式我都实现了,但是切换按钮有点问题。
如果处于花样1、花样2,按下按钮后不会马上切换,而是要等花样执行完之后才会切换。

后来经过研究、对比,发现是因为花样1和花样2的耗时太长,需要等执行完了再回去判断花样代码才会调整花样。

然后我就在花样1、花样2的每个delay函数前加一个if,来判断是否有按按键,如果有就终止花样重新判断花样代码,并执行相应的花样。最终实现了我要的效果,花样切换很及时。

但是这样的话,就有很多if语句,整个代码看起来很不美光。

请问各位大佬,在主循环或子函数需要执行很多指令或耗时比较长,在执行过程中因为某些情况需要终止当前循环或者函数时,你们是怎么处理的呢?谢谢。
回复

使用道具 举报

ID:94031 发表于 2019-10-9 16:32 | 显示全部楼层
按键用中断输入就可以解决你的问题。
回复

使用道具 举报

ID:621335 发表于 2019-10-9 20:00 来自手机 | 显示全部楼层
外部中断
回复

使用道具 举报

ID:619118 发表于 2019-10-10 08:07 | 显示全部楼层

楼上两位,我试过用按键中断,如果在中断子程序中切换花式的话,会等到花式执行完毕才响应下面的中断的,不能实时响应、切换花式。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表