返回该小组首页 回复主题
cat_li

cat_li

小组等级:     E币:2408  (E币换礼)

#1楼主:[转帖] 出个题目,别以为流水灯实验简单!想挑战的请进!

文章发表于:2007-12-13 02:41

    这个是在51c51上看到的,觉得不错,转帖过来看看谁有兴趣做,我准备下周下一下看看,呵呵

   原帖网址: http://www.51c51.com/bbs/dispbbs.asp?boardID=6&ID=21466&page=1

 

这个题目由热心会员daron同学提出, 很有新意! 特别设立一个奖项, 对于第一个全部做出的朋友,请把源程序发到斑竹信箱sxj1974@163.com 本站奖励ep51编程器全套散件一套。

要求:1,程序必须调试通过!2 有注释。3 汇编,c不限,4先到先得!

   单片机初学者几乎都做的一个实验就是流水灯实验,因为大家都做,所以就觉得很简单,很多人对这个实验几乎不屑。其实要彻底的玩转这个实验也是很不简单的事情,不信看看你能不能应付我下面的实验题:

    硬件前提:用51的P1口控制8个LED,1 点亮,0 熄灭。

    (1)第1,3,5,7个灯半亮,其余的全亮。

     (2)第1个亮1/8,第2个亮2/8,第3个亮3/8,第4个亮4/8,第5个亮5/8,第6个亮6/8,第7个亮7/8,第8个全亮。

     (3)来点小难的,所有的灯逐渐从暗到全亮,再由全亮到暗。

     (4)最难的:8个灯从第一个开始依次渐亮,直到最后一个。再从最后一个起渐暗,直到第一个。如此循环往复。这才是真正的流水灯。

^_^,反响还挺好的!

      昨天才上传的东东,没想到大家的反响还挺好的。在这里首先要谢谢斑竹了。

      首先解释一下,这个题目呢实际中是常用到的。最早我在念书的时候做过,不过当时也是菜鸟一个,怎么也没搞明白是怎么一回事。后来工作后,有个客户要做LED七彩显示的灯,他要求搞各种各样乱七八糟的花样,其中就有这个个渐亮渐灭的功能,我就帮他写了一下,做好之后发现,如果灯用各种颜色的来显示,那效果是相当的漂亮的。当时我用的是Sonix的一款单片机写的,没办法,人家说51太贵了,一片要5、6块钱,Sonix的才1块3左右,我就花了半个月时间把人家的仿真器来过来做了这个项目。(现在最便宜的单片机据说台湾有个十速的,一片才8、9毛钱,不知是真是假)

      做这个题目,首先要理一下思路,单片机是只能输出数字信号的,没有半高不低的电平的,所以应采用脉宽调制的办法来实现,即PWM控制。PWM即固定周期,改变占空比,英文叫做:Pulse width modulate。

       其次,大家可以做一下实验。输入下面的一段程序:

              ORG     000H

              Ajmp     Main

              ORG     0030H

Main:      Mov      SP,#07H                              ;Init system stack

               Clr        P1.0

MainLp:  CPL      P1.0

               Sjmp     MainLp         

END

         问题是,用万用表的直流电压档测量P1.0口的电平,会显示多少?

         答案是2.5V左右,因为P1.0口输出的是高低各一半的脉冲,在频率够高的情况下,万用表直流档测出的应当是平均的电压。回过头来,对于这个题目,要想得到LED各种不同的亮度,也只要在一定的频率范围内调整高电平的宽度就可以了。高电平的宽度不同,即相当于得到的平均电压就不同,平均电压不同,LED的亮度自然也就不同了。频率太低和太高都不好,太低了灯闪的厉害,太高了可供调整的高电平的范围就小了,实际的效果就不好,可能忽的一下就全亮了,再忽的一下就全暗了,渐亮的效果就不明显了。以前我做的频率大概在150Hz左右,大家可以参考一下。

       编程的时候,可以用定时器T0或者T1来做,先固定好频率,然后每隔一段时间调整占空比。如果调整的次数和总时间合适的话,你就可以看到很漂亮的LED的渐亮和渐暗了。

       真正想学单片机的朋友,强烈建议动动手和动动脑做一下这个实验,思路已经都提供了,还等什么呢?而且斑竹的悬赏令都出了,大家加油啊!

 

 

billowtust

   小组等级:    E币:433  (E币换礼)

#2

文章发表于:2007-12-16 15:16

初等难度,如果你觉得做这个也难,那说明你的功力还不够

cat_li

   小组等级:    E币:2408  (E币换礼)

#3

文章发表于:2007-12-16 20:17

呵呵,我才开始学没多久,觉得这个题目不错,综合了挺多知识,有点意思,多多指教

wang1jin

   小组等级:    E币:305  (E币换礼)

#4

文章发表于:2007-12-17 14:37

我来看看...哈哈...

我编程非常菜...

wang1jin

   小组等级:    E币:305  (E币换礼)

#5

文章发表于:2007-12-17 14:39

哈哈.这个要用到PWM了...有时间玩下.哈哈...

l0p0c

   小组等级:    E币:2718  (E币换礼)

#6

文章发表于:2007-12-17 15:17

有空看看!

觉得时间不够啊!

o(∩_∩)o...

wang1jin

   小组等级:    E币:305  (E币换礼)

#7

文章发表于:2007-12-17 23:12

写了试了一下.在示波器上看这二个都没有问题...

但实际上在LED中点亮...很难分得出这个效果...

可能是时间不合适...

promcu

   小组等级:    E币:6809  (E币换礼)

#8

文章发表于:2007-12-18 11:23

除了程序上的配合,还需要实际根据人的视觉效果来调节,就像声音,最完美的电子音乐(用频率合成)却不是听觉最美的音乐,因为人不是机器,不能那么准确分辨,像题目里的半亮,本来IO输出是5V,那么半亮就是输出2.5V拉,但给人的效果未必就是半亮,只是举个例子说说

wayne.mai

   小组等级:    E币:185  (E币换礼)

#9

文章发表于:2007-12-20 08:31

做过三色灯调十二种颜色的,这个原理也应该一样,不过人眼真的很难分辨。

zcl

   小组等级:    E币:119  (E币换礼)

#10

文章发表于:2007-12-20 22:27

这个是8级渐变

l0p0c

   小组等级:    E币:2718  (E币换礼)

#11

文章发表于:2007-12-21 15:41

没有时间弄!

不过还是有些意思的!

2【下一页】总共 , 当前 /

快速回复主题--如果想加入编辑器功能,建议使用 [高级回复]

您目前还不是小组成员,请先加入

回复贴子区

用户名:    您没有注册?

密码:    忘记了密码?

内容:

  • DesignDesign
  • HTMLHTML

浏览该小组的用户还看过...

设计资源与分销