ag真人试玩平台-ag真人网站

 
 立即注册
1
返回列表
查看: 1355|回复: 37

diy 16路led电子萤火虫(stc版/开源) -ag真人试玩平台

[复制链接]
发表于 2023-8-23 17:49:37 | 显示全部楼层 |
这个是1年半前做的了,今天才想起来没发过,发上来。在 坛友的代码上适当改动,把6led的增加到16led,用贴片stc15w408as控制。



sop-20封装的单片机焊在转接板上


0603的led两头焊漆包线



焊16个,并点亮,确定每个都能亮


准备microusb


木塞上给microusb开口


装入瓶中的效果



点亮

效果视频:
(2.44 mb, 下载次数: 1)

下面是代码
  1. #include                                                 
  2. #define one_cycle_step        33   //led多了,该值要调小,不然频闪                         100 35mhz                 33 11.0592mhz
  3. #define        port1 p3        
  4. #define port2 p1
  5. #define        led_cnt                16        //定义输出口的端口数1-8        4代表使用0-3口输出
  6. #define        script_cnt        6        //定义脚本数

  7. //萤火虫结构
  8. struct firefly{
  9.         unsigned int        brightness;                        //最大亮度值0-255
  10.         unsigned int        timecell;                        //时间间隔0-65535
  11.         unsigned int        count;                                //运行控制变量:当前计数
  12.         unsigned char        bn;                                        //运行控制变量:当前亮度
  13. };

  14. //定义每个输出端口的执行脚本
  15. //每个端口将执行script_cnt次,然后不断循环执行
  16. struct firefly code fireflyscript[][script_cnt] = {
  17.                                                 {{150,500,0,0},{0,600,0,0},{100,700,0,0},{0,600,0,0},{50,400,0,0},{150,800,0,0}},                 //1
  18.                                                 {{0,300,0,0},{100,400,0,0},{0,700,0,0},{200,300,0,0},{0,700,0,0},{150,700,0,0}},                                 //2
  19.                                                 {{90,300,0,0},{0,400,0,0},{110,600,0,0},{0,1200,0,0},{100,400,0,0},{0,500,0,0}},                                 //3
  20.                                                 {{0,500,0,0},{0,300,0,0},{200,600,0,0},{0,1000,0,0},{100,1000,0,0},{0,300,0,0}},                 //4
  21.                                                 {{0,900,0,0},{130,600,0,0},{100,200,0,0},{0,1200,0,0},{80,500,0,0},{0,1000,0,0}},                         //5
  22.                                                 {{60,700,0,0},{150,600,0,0},{0,800,0,0},{0,1000,0,0},{100,200,0,0},{0,100,0,0}},                 //6
  23.                                                 {{0,600,0,0},{180,500,0,0},{110,200,0,0},{50,100,0,0},{0,600,0,0},{160,100,0,0}},                         //7
  24.                                                 {{0,750,0,0},{255,300,0,0},{150,200,0,0},{0,1000,0,0},{255,1500,0,0},{150,100,0,0}},                         //8


  25.                                                 {{0,600,0,0},{120,700,0,0},{115,800,0,0},{0,900,0,0},{90,300,0,0},{0,100,0,0}},                                         //9
  26.                                                 {{137,200,0,0},{0,500,0,0},{0,600,0,0},{130,600,0,0},{40,350,0,0},{0,1200,0,0}},                         //10
  27.                                                 {{113,600,0,0},{0,760,0,0},{90,534,0,0},{0,500,0,0},{128,500,0,0},{0,500,0,0}},                                 //11
  28.                                                 {{0,700,0,0},{0,500,0,0},{139,900,0},{0,500,0,0}, {60,700,0,0},{0,400,0,0}},                         //12
  29.                                                 {{0,700,0,0},{50,700,0,0},{60,400,0,0},{0,500,0,0},{40,800,0,0},{150,540,0,0}},                         //13
  30.                                             {{0,500,0,0},{65,700,0,0},{0,900,0,0},{30,800,0,0},{98,300,0,0},{130,600,0,0}},                         //14
  31.                                                 {{0,250,0,0},{148,600,0,0},{70,600,0,0},{0,900,0,0},{85,500,0,0},{0,1200,0,0}},                         //15
  32.                                                 {{80,100,0,0},{60,600,0,0},{0,800,0,0},{0,400,0,0},{116,1000,0,0},{135,900,0,0}}                         //16
  33.                                        
  34. };

  35. //定义led_cnt只萤火虫
  36. struct firefly fireflies[led_cnt];

  37. //每只萤火虫的脚本计数器
  38. unsigned char ffscript[led_cnt];

  39. //预先计算好的余弦函数表,pwm输出模拟函数曲线效果更好
  40. unsigned char code cosvalue[]={
  41.                                         0,0,0,0,0,0,0,0,1,1,1,2,2,3,3,4,4,5,6,6,7,8,
  42.                                         9,10,11,11,12,13,14,16,17,18,19,20,21,23,24,
  43.                                         25,27,28,29,31,32,34,35,37,39,40,42,44,45,47,
  44.                                         49,50,52,54,56,58,60,62,63,65,67,69,71,73,75,
  45.                                         77,80,82,84,86,88,90,92,94,97,99,101,103,105,
  46.                                         107,110,112,114,116,119,121,123,125,127,130,
  47.                                         132,134,136,139,141,143,145,148,150,152,154,
  48.                                         156,158,161,163,165,167,169,171,173,175,178,
  49.                                         180,182,184,186,188,190,191,193,195,197,199,
  50.                                         201,203,205,206,208,210,211,213,215,216,218,
  51.                                         220,221,223,224,226,227,228,230,231,232,234,
  52.                                         235,236,237,238,239,241,242,243,244,244,245,
  53.                                         246,247,248,249,249,250,251,251,252,252,253,
  54.                                         253,254,254,254,255,255,255,255,255,255,255,
  55.                                         255,255,255,255,255,255,255,255,254,254,254,
  56.                                         253,253,252,252,251,251,250,249,249,248,247,
  57.                                         246,245,244,244,243,242,241,239,238,237,236,
  58.                                         235,234,232,231,230,228,227,226,224,223,221,
  59.                                         220,218,216,215,213,211,210,208,206,205,203,
  60.                                         201,199,197,195,193,192,190,188,186,184,182,
  61.                                         180,178,175,173,171,169,167,165,163,161,158,
  62.                                         156,154,152,150,148,145,143,141,139,136,134,
  63.                                         132,130,128,125,123,121,119,116,114,112,110,
  64.                                         107,105,103,101,99,97,94,92,90,88,86,84,82,
  65.                                         80,77,75,73,71,69,67,65,64,62,60,58,56,54,52,
  66.                                         50,49,47,45,44,42,40,39,37,35,34,32,31,29,28,
  67.                                         27,25,24,23,21,20,19,18,17,16,14,13,12,11,11,
  68.                                         10,9,8,7,6,6,5,4,4,3,3,2,2,1,1,1,0,0,0,0,0,0,0,
  69.                                         0
  70.                                 };

  71. //计时器中断计数变量
  72. unsigned int time0count_0;

  73. /*
  74. //---------------------------------------
  75. //名称        :两组io口合成一组十六位io口
  76. //参数        :
  77. //返回        :
  78. //---------------------------------------
  79. void segment_out(unsigned int dat){
  80.         p3=dat&0x00ff;
  81.         p1=dat&0xff00;
  82. }
  83. */
  84. //---------------------------------------
  85. //名称        :定时器0中断服务程序
  86. //                :timer0
  87. //参数        :
  88. //返回        :
  89. //---------------------------------------
  90. void timer0(void) interrupt 1
  91. {                          
  92.         unsigned long cell;                //计算用临时变量
  93.         unsigned int i,p,h;


  94.         //一个周期结束,检查脚本以及下一个周期的占空比
  95.         if( time0count_0>one_cycle_step)
  96.         {
  97.                 time0count_0 = 0;
  98.                 //n路信号分别处理
  99.                 for(i = 0;i
  100.                 {
  101.                         //一个脚本执行完毕,装入下一个脚本
  102.                         if( fireflies[i].count>fireflies[i].timecell)
  103.                         {
  104.                                 ffscript[i] ;
  105.                                 ffscript[i] = ffscript[i] % script_cnt;
  106.                                 fireflies[i] = fireflyscript[i][ffscript[i]];
  107.                         }
  108.                         //计算下一个周期的占空比和亮度
  109.                         cell = fireflies[i].count;
  110.                         cell *=360;
  111.                         cell /= fireflies[i].timecell;
  112.                         fireflies[i].bn = (cosvalue[cell]*fireflies[i].brightness)/255;
  113.                         //准备点亮某个led
  114.                         p=1<
  115.                         h=p;
  116.                         h=h>>8;
  117.                         //如果亮度值不为0则点亮
  118.                         if(fireflies[i].bn != 0)
  119.                         {
  120.                                 port1 |= p;
  121.                                 port2 |= h;
  122.                         }
  123.                         else
  124.                         {
  125.                                 port1 &= ~p;
  126.                                 port2 &= ~h;
  127.                         }
  128.                 }
  129.         }
  130.         //每个输出口占空比达到后输出低电平关闭led
  131.         for(i = 0; i
  132.         {
  133.                 p=1<
  134.                 h=p;
  135.                 h=h>>8;
  136.                 if(time0count_0==fireflies[i].bn){
  137.                         port1 &= ~p;
  138.                         port2 &= ~h;
  139.                 }
  140.         }
  141. }

  142. void main()
  143. {
  144.         unsigned        i;

  145.         //关闭所有led
  146.         port1=0;
  147.         port2=0;

  148.         //初始化所有萤火虫和执行脚本
  149.         for(i = 0; i
  150.         {
  151.                 fireflies[i] = fireflyscript[i][0];
  152.                 ffscript[i] = 0;
  153.         }

  154.         //***定时器timer0初始化*** 十六位自动重装
  155.         tmod&=0xf0;            //将tmod的低4位定时器0控制部分清零
  156.         tl0=0xe8;              //设置定时器0初值低8位
  157.         th0=0xff;              //设置定时器0初值高8位
  158.         tr0=1;                 //启动定时器0
  159.         et0=1;                 //timer0中断允许
  160.         
  161.         //***开全局中断设置****
  162.         //定时器timer0设置了中断允许,此处要开全局中断
  163.         ea=1;                  //开全局中断
  164.         
  165.         while(1);               //死循环,单片机初始化后,将一直运行这个死循环
  166. }

复制代码


附件里是完整工程下载:
,

45.97 kb, 下载次数: 3, 下载积分: 家元 -55

打赏

家元 120 理由
亲爱的混蛋 30
jf201006 30 謝謝分享
兔包公 30 以資鼓勵
zhkrid 30 優秀文章
发表于 2023-8-23 18:31:50 | 显示全部楼层
不错。挺漂亮的
发表于 2023-8-23 19:20:22 | 显示全部楼层
关灯后效果不错。
发表于 2023-8-23 19:42:14 来自手机浏览器 | 显示全部楼层
本帖最后由 兔包公 于 2023-8-23 19:47 编辑

你这不能飞,我找找,见过油管有个老外做了个飞起来的,似乎是用zvc感应电的

打赏

家元 36 理由
30
游泳的鸟儿 6 歡迎探討
发表于 2023-8-23 20:02:25 | 显示全部楼层
手工牛批的要做个记号,有空了慢慢看看
发表于 2023-8-23 20:29:28 | 显示全部楼层
感觉铜线用的有点粗

打赏

家元 6 理由
游泳的鸟儿 6 太细了在瓶中不好固定住
发表于 2023-8-23 23:52:55 | 显示全部楼层
有规律点,好看
发表于 2023-8-24 02:44:07 | 显示全部楼层
不错。挺漂亮的
发表于 2023-8-24 07:35:30 | 显示全部楼层
建议加一个震动电机,随机震动
发表于 2023-8-24 08:31:31 | 显示全部楼层

谢谢分享 学习一下
发表于 2023-8-24 08:56:24 | 显示全部楼层
led有些绿了,黄绿色是不是好些
发表于 2023-8-24 10:27:24 | 显示全部楼层
不错,挺好玩的。
发表于 2023-8-24 10:53:45 | 显示全部楼层
哈哈~羡慕动手能力强的大佬。。。
发表于 2023-8-24 11:16:33 | 显示全部楼层
这个萤火虫在全黑的环境里怎么看着有点渗人!
发表于 2023-8-24 12:03:11 | 显示全部楼层
挺漂亮的,软硬能手
发表于 2023-8-24 12:31:35 | 显示全部楼层
有创意,感觉漆包线确实有点粗...
发表于 2023-8-24 13:24:08 | 显示全部楼层
估计夜晚效果更漂亮!
发表于 2023-8-24 14:33:52 | 显示全部楼层
效果不 错,挺漂 亮
发表于 2023-8-24 14:55:47 | 显示全部楼层
做的漂亮,有才
1
返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

app||小黑屋|关于ag真人试玩平台|联系ag真人网站|法律条款|ag真人试玩平台-ag真人网站

gmt 8, 2023-9-5 19:49 , processed in 0.218400 second(s), 12 queries , redis on.

powered by

© 2006-2023 smzj.net

返回列表
网站地图