找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 16357|回复: 14
收起左侧

STC单片机简易呼吸灯的制作

  [复制链接]
ID:113472 发表于 2016-4-13 19:26 | 显示全部楼层 |阅读模式
STC学习笔记1-简易呼吸灯的制作视频:


介绍:只需要三个元件做一个简易的呼吸灯,可以随意调整呼吸的时间和呼/吸时间比。
比模拟电路搭的呼吸灯简洁并且成本低很多,但是可控性绝对比模拟电路制作的好。

材料:
STC15F104E单片机一片
100Ω电阻一个
LED一个,颜色随意
1013162rggmm9n61hg8ish.jpg

还有必备的一个STC单片机程序下载器,这个可以参考官网的MAX232串口下载器
204648oz5w5grg1ip8yw81.jpg

或者购买的成品USB下载线。
需要引出四个引脚VCC,TX,RX,GND即可。

电路原理图:
224322qixnyocqf9yx9lqq.gif

其中P3.0和P3.1接下载线下载。虽然可以在工作状态下载,不过避免干扰,我们尽量少使用P3.0和P3.1引脚。

编写以下程序:
有两个版本,一个是单纯的渐亮渐灭;第二个是亮灭时间比不同的,更接近实际的呼吸曲线。

版本1,渐亮渐灭时间一样,但是肉眼看上去效果不好:
  1.     #include
  2.     sbit Pin = P3 ^ 3;
  3.     int bright = 0;
  4.     void Delay10us(unsigned int a)
  5.     {
  6.         unsigned int i;
  7.         while( a-- != 0)
  8.         {
  9.             for(i = 0; i < 6; i++) {};
  10.         }
  11.     }
  12.     main()
  13.     {
  14.         int i;
  15.             bit mark=0;
  16.         while(1)
  17.         {
  18.             if(bright == 255||bright==0) mark=!mark;
  19.                     (mark==1)?(bright++):(bright--);
  20.             for(i = 0; i < 255; i++)
  21.             {
  22.                 if(i < bright)
  23.                 {
  24.                     Pin = 0;
  25.                     Delay10us(2);
  26.                 }
  27.                 else
  28.                 {
  29.                     Pin = 1;
  30.                     Delay10us(2);
  31.                 }
  32.             }
  33.         }
  34.     }
复制代码

版本2,渐亮渐灭时间不一致,但是视觉效果比较好(亮灭时间比9:4,灭到尽的时候等待500ms。):
  1.     /*
  2.     STC15F104E 呼吸灯
  3.     时钟频率5.004MHz
  4.     灯在P3.3引脚
  5.     By:Ansifa 2012-1-25
  6.     */
  7.     #include
  8.     sbit Pin = P3 ^ 3;
  9.     void Delay(unsigned int a)
  10.     {
  11.         while( a-- != 0)
  12.         {
  13.         }
  14.     }
  15.     void Delay2(unsigned long a)
  16.     {
  17.         while( a-- != 0)
  18.         {
  19.         }
  20.     }
  21.     main()
  22.     {
  23.         int i, delaytime;
  24.         bit mark = 0;
  25.         int bright = 0;
  26.         while(1)
  27.         {
  28.             if(bright == 0) Delay2(50000);
  29.             if(bright == 255 || bright == 0) mark = !mark;
  30.             if(mark == 1)
  31.             {
  32.                 bright++;
  33.                 delaytime = 9;
  34.             }
  35.             else
  36.             {
  37.                 bright--;
  38.                 delaytime = 4;
  39.             }
  40.      
  41.      
  42.             for(i = 0; i < 255; i++)
  43.             {
  44.                 if(i < bright)
  45.                 {
  46.                     Pin = 0;
  47.                     Delay(delaytime);
  48.                 }
  49.                 else
  50.                 {
  51.                     Pin = 1;
  52.                     Delay(delaytime);
  53.                 }
  54.             }
  55.         }
  56.     }
复制代码

用Keil uVersion2编辑编译。
2339158jnsokn82827ujkk.gif

用STC-ISP下载程序下载程序。


注意,是先按STC-ISP软件上的按钮,然后关闭单片机电源,再打开,才能进行开始下载:
如果使用USB下载线下载,但是软件一直卡死在等待连接单片机的话,先检查TX,RX有没接反。还有单片机有没电源。
然后降低下载软件波特率:“最低波特率”=1200和“最高波特率”=1200,一般就能下载,如果不行的话,要考虑换一个下载线。
上图的MAX232串口下载线是最稳定的。在任何速率都能使用。

215723ci003cbzczuac5g1.jpg

呼吸灯工程文件.rar

1.55 KB, 下载次数: 67, 下载积分: 黑币 -5

回复

使用道具 举报

ID:47652 发表于 2016-4-14 13:24 | 显示全部楼层
好像在哪里见过此贴
回复

使用道具 举报

ID:166535 发表于 2017-2-25 09:53 | 显示全部楼层
这个,找了好久了!
回复

使用道具 举报

ID:166535 发表于 2017-2-25 13:56 | 显示全部楼层
当今的奋斗史的
回复

使用道具 举报

ID:47286 发表于 2017-2-25 16:39 | 显示全部楼层
本帖最后由 dzbj 于 2017-2-25 16:43 编辑

效果不错 可有个疑问 这么写 一个片子只能干一件事 其它什么也干不了 效率太低了 还不如用555直接搭个电路啊 成本也会比这样低很多啊 不考虑生产 只是自己做东西也有成本顾虑啊 再考虑到资源的占用 一个int一个long 消耗太大了 我是能用bit就不用char 能用char就不用int long到现在还没用过 惭愧
我也不会写呼吸灯 想过也没什么头绪 一直在找比较好的呼吸灯程序想学
回复

使用道具 举报

ID:165792 发表于 2017-2-26 13:07 | 显示全部楼层
效果不错
回复

使用道具 举报

ID:161933 发表于 2017-2-26 13:16 | 显示全部楼层
STC单片机简易呼吸灯的制作 [复制链接]
回复

使用道具 举报

ID:166771 发表于 2017-2-26 18:09 | 显示全部楼层
感觉还不错
回复

使用道具 举报

ID:263311 发表于 2017-12-18 19:39 | 显示全部楼层
跟着图焊了一个不带电阻的,检测了焊接没什么问题,但是烧写的时候检测不到单片机,请问这是什么原因?
回复

使用道具 举报

ID:334550 发表于 2018-5-28 13:36 | 显示全部楼层
请问楼主,这是用一个小LED灯 如果用12V多个LED灯的时候,单片机电流会超,那得用什么方汉来控制LED,最好能给低点电路图,谢谢了
回复

使用道具 举报

ID:95809 发表于 2018-5-28 17:08 来自手机 | 显示全部楼层
bosschen 发表于 2018-5-28 13:36
请问楼主,这是用一个小LED灯 如果用12V多个LED灯的时候,单片机电流会超,那得用什么方汉来控制LED,最好 ...

加扩流电路,比如最常用的三极管。
回复

使用道具 举报

ID:414583 发表于 2019-3-9 20:42 | 显示全部楼层
通过调节延时参数来达到亮度控制吗?
回复

使用道具 举报

ID:656370 发表于 2019-12-4 22:57 | 显示全部楼层
感谢大神指导
回复

使用道具 举报

ID:546335 发表于 2019-12-6 15:47 | 显示全部楼层
很简单实用的一个制作
回复

使用道具 举报

ID:627534 发表于 2020-6-5 10:57 | 显示全部楼层
我去实验试一下,扩展10个LED小灯看一下效果。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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