注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
凔海的个人空间 https://home.eeworld.com.cn/space-uid-641902.html [收藏] [复制] [分享] [RSS]
日志

凔海笔记之单片机(三):满眼LED多闪烁

已有 930 次阅读2016-3-8 14:06

        敦煌曲子词《浣溪沙》中有诗一首,即“满眼风光多闪烁,看山恰似走来迎。”曾是经典的中学物理题,今天就借用一下人家的诗,来瞧瞧满眼LED多闪烁”。上一节咱说了如何亮一个灯,现在让这个的闪起来。笔者有一个闪的办法,看图:

       只要我把开关不断的进行断开闭合,这样就开始闪了,有没有觉得我很聪明。我想你一定会说:

       也对哦,也只有小时候才会那么好奇和天真,如今咱用的是单片机,可原理却是一样的,就是让那个led进行不断的开断操作。若开断时间一样,那就是按规律的闪烁,那个规律叫做频率。开断时间不一样长,那没准就是称摩斯密码。那么用单片机如何实现开断呢?

很简单,‘
当P1.1为高电平时,亮!
当P1.1为低电平时,灭!
所以当P1.1先等于1,再等于0,那它就亮了。哈哈~
                led=1;
                led=0;
      可是,下载到单片机发现,灯根本不亮。为什么?它应该循环的两灭呀?确实循环执行了,可是你确看不清,因为太快了,要知道,100HZ的闪烁人眼看到的根部不在闪,而单片机执行的频率可不止100HZ,怎么说也得翻个一二百倍吧。所以,为了让我们能看得到闪烁,需要让led亮了,然后等等再让它灭,这个操作叫做延时。也就是led=1;延时led=0;延时。
      延时,说白了就是等待,让上一个操作停那么一会,或者说延缓下一步的执行时间。那么,延时程序怎么写?
void delaynms(unsigned char i)
{unsigned char j;   
        while(i) {
                for(j=125;j>0;j--);
                }}
     这个是大概1ms延时,把它写在程序里,并对该延时函数进行调用,这个灯就闪了。那为什么是1ms,先让我酝酿酝酿。

       然而我比较土豪,有八个灯,我想玩转八个LED,怎么搞?其实让他一个一个的亮,那就是流水灯,如果改变延时的快慢,没准还会有拖尾的效果。这就是满眼LED多闪烁 。
下面就对一个稍微有些花样LED流水灯阐述一下。

频率逐增或减就是通过递增或递减改变延时的时间。

减暗就是通过递增LED灯暗的时间
拖尾嘛?流水灯是亮一个灭一个,拖尾就是亮一个,前一个变暗,再前一个更暗,也是不负责的。
这个流水效果并不是很好,待我做好送给她的那个再来嘚瑟嘚瑟
一节流水犹未尽,下节接着说废话,学识浅薄出拙文,如察错误望赐教,小弟在此感涕零。


本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章