本帖最后由 渤海三叠浪 于 2012-9-19 18:47 编辑
用51单片机搞。共有10个灯。
第一个灯每隔150ms闪烁一次(当然时间要求不可能太准确了。可以考虑有2ms的误差)
第二个灯每隔 250ms闪烁一次
第三个灯每隔 500ms闪烁一次
第四个灯每隔 1500ms闪烁一次
第5个灯每隔 2500ms闪烁一次。。。。
第6个灯每隔 700ms闪烁一次
第7个灯每隔 770ms闪烁一次
第6个灯每隔 900ms闪烁一次
第8个灯每隔 300ms闪烁一次
第9个灯每隔 200ms闪烁一次
第10个灯每隔 1000ms闪烁一次
并且任意两个不同的灯闪烁间隔大于10ms。
==========================觉得简单那就
再出一个题(注意 这里的闪烁就是状态变一下,就是由亮变灭 或者 由灭变亮)
--------------------------------------------------------------------------------------------------
用51单片机搞。共有10个灯。
第一个灯每隔 150ms闪烁一次
第二个灯每隔 250ms闪烁一次
第三个灯每隔 500ms闪烁一次
第四个灯每隔 1500ms闪烁一次
第5个灯每隔 2500ms闪烁一次。。。。
第6个灯每隔 700ms闪烁一次
第7个灯每隔 770ms闪烁一次
第6个灯每隔 900ms闪烁一次
第8个灯每隔 300ms闪烁一次
第9个灯每隔 200ms闪烁一次
第10个灯每隔 1000ms闪烁一次
并且任意两个不同的灯闪烁间隔大于10ms。
给每个灯添加1个按键(一一对应)。
按一下键,对应的灯 状态变一下(但是必须离该灯上一次状态变的相隔至少50ms)。
-----------------------------------------------------------------------------------------------------
还是举个例子来说吧。要用文字讲不大容易表达 清楚。比如仅仅考虑灯1(这时候就不用考虑“两个不同的灯闪烁间隔大于10ms”,因为仅有一个灯),假设在时间点8ms时刻亮,那么就会在158ms时刻灭(因为周期要求是150ms),那么若在170ms时刻按键时,就会在158+50=208ms时刻亮灯(这是因为170-150=20,20小于50,因为要求相隔至少50ms。可以看出在150ms周期的范围内,在有键按下的情况下,就不用满足150ms的周期。不过该灯下一次亮的周期从208时刻开始算起),然后在208+150=358ms灭,那么在490ms毫秒时刻按键时,就是会490ms时刻亮灯(因为490-358=132,132大于50而小于150),然后在490+150ms=640ms时刻灭灯。
如果有多个灯,那么在本灯状态改变时,就要考虑本灯改变时刻与前一个亮的灯时刻之差至少大于10ms。
==============================================
这道题的实际意义是这样的:就拿RS485通信来说,假设通信速度500K,一个主,10个从。
灯状态改变一次表示主发送一帧数据。
每个灯的周期不同,表示对数据通信要求不同,有消息或相对实时一点的。
任意两个不同的灯闪烁间隔大于10ms,是为了帧不碰撞,让从帧有充足时间响应主。
有按键按下,表示帧的内容发生变化,需要以更快的速度发出去。但是要满足“离该灯上一次状态变的相隔至少50ms”,是考虑到万一同时有多个按键按下(就是多个帧的数据都发生变化),防止总线负载过高,防止冲突。
今天看了QQ**牌的规则,规则写的很全面。而我这个题目规则表达的不好。
|