找回密码
 立即注册

QQ登录

只需一步,快速开始

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

新手制作心形灯 附单片机源程序+原理图+仿真

  [复制链接]
ID:260280 发表于 2017-12-18 19:41 | 显示全部楼层 |阅读模式
单片机心形灯仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
电路图.jpg
2.jpg
两张图 也是效果图 也可以跟着焊接

原理图 和程序在压缩包里
适合初学者学习

0.jpg

单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. uchar flag=200;
  4. ///////////////////////////////////////////////////////////////////////
  5. uchar code Tab1[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xFF};//暗中左移  向下
  6. uchar code Tab2[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF};//暗中右移  向上
  7. uchar code Tab3[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00};//亮中左移         向下
  8. uchar code Tab4[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x00};//亮中右移  向上
  9. uchar code Tab11[]={0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0xff};//暗中左移  向下
  10. uchar code Tab22[]={0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0xff};
  11. ////////////////////////////////////////////////////////////////////
  12. uchar code Tab33[]={0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};
  13. uchar code Tab44[]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
  14. uchar code Tab55[]={0x08,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff};
  15. uchar code Tab5[]={0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xff};
  16. uchar code Tab6[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xff};
  17. uchar code Tab7[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  18. uchar code Tab8[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  19. ////////////////////////////////////////////////////////////////
  20. void shansuo();
  21. void xl();
  22. ///////////////////////////////////////////////////////////////
  23. void delay(void)   
  24. {
  25.    unsigned char m,n;
  26.          for(m=0;m<flag;m++)
  27.           for(n=0;n<250;n++)          
  28.            ;
  29. }
  30. ///////////////////////////////////
  31. void hy1(void)  //点亮状态逆时针旋转90度(一个一个灭)
  32. {
  33.   unsigned char i;
  34.   for(i=0;i<8;i++)
  35.     {
  36.                 P0=Tab11[i];P1=Tab22[i];
  37.            P2=Tab11[i];P3=Tab22[i];
  38.                 delay();
  39.          }
  40.   for(i=0;i<8;i++)
  41.     {
  42.                 P0=Tab44[i];P1=Tab55[i];
  43.            P2=Tab44[i];P3=Tab55[i];
  44.                 delay();
  45.          }
  46. }
  47. ///////////////////////////////////////////
  48. void hy2(void)  //暗中逆时针转360。(一个一个点亮)
  49. {
  50.   unsigned char i;
  51. for(flag=250;flag>0;flag=flag-50)
  52.   {
  53.         P0=0xff;P1=0xff;P2=0xff;P3=0xff;
  54.         for(i=0;i<8;i++)
  55.     {
  56.                 P0=Tab11[i];
  57.                 delay();
  58.          }
  59.   for(i=0;i<8;i++)
  60.     {
  61.            P2=Tab11[i];
  62.                 delay();
  63.          }
  64.   for(i=0;i<8;i++)
  65.     {
  66.                 P3=Tab22[i];
  67.                 delay();
  68.          }
  69.   for(i=0;i<8;i++)
  70.     {
  71.            P1=Tab22[i];
  72.                 delay();
  73.          }
  74.         }
  75. flag=250;
  76. }
  77. ////////////////////////////////////////////////
  78. void hy3(void)  //点亮中逆时针转360°(一个一个灭)
  79. {
  80.   unsigned char i;
  81.                 flag=50;
  82.                 P0=0x00;P1=0x00;P2=0x00;P3=0x00;
  83.   for(i=0;i<8;i++)
  84.     {
  85.                 P0=Tab44[i];
  86.                 delay();
  87.          }
  88.   for(i=0;i<8;i++)
  89.     {
  90.            P2=Tab44[i];
  91.                 delay();
  92.          }
  93.   for(i=0;i<8;i++)
  94.     {
  95.                 P3=Tab33[i];
  96.                 delay();
  97.          }
  98.   for(i=0;i<8;i++)
  99.     {
  100.            P1=Tab33[i];
  101.                 delay();
  102.          }
  103.     flag=150;
  104. }
  105. ///////////////////////////////////////////////////
  106. void hy4(void)  //点亮状态顺时针旋转90度(一个一个灭)
  107. {
  108.   unsigned char i;
  109.   for(i=0;i<8;i++)
  110.     {
  111.                 P1=Tab11[i];P0=Tab22[i];
  112.            P3=Tab11[i];P2=Tab22[i];
  113.                 delay();
  114.          }
  115.   for(i=0;i<9;i++)
  116.     {
  117.                 P1=Tab6[i];P0=Tab5[i];
  118.            P3=Tab6[i];P2=Tab5[i];
  119.                 delay();
  120.          }
  121. }
  122. /////////////////////////////////////////
  123. void hy2_1(void)  //暗中逆时针转90度。(一个一个点亮)
  124. {
  125.   unsigned char i;
  126.                 flag=200;
  127.                 P0=0xff;P1=0xff;P2=0xff;P3=0xff;
  128.   for(i=0;i<9;i++)
  129.     {
  130.                 P0=Tab11[i];
  131.                 delay();
  132.          }
  133.                 flag=110;
  134.   for(i=0;i<9;i++)
  135.     {
  136.            P2=Tab11[i];
  137.                 delay();
  138.          }
  139.                 flag=80;
  140.   for(i=0;i<9;i++)
  141.     {
  142.                 P3=Tab22[i];
  143.                 delay();
  144.          }
  145.                 flag=80;
  146.   for(i=0;i<9;i++)
  147.     {
  148.            P1=Tab22[i];
  149.                 delay();
  150.          }
  151. }
  152. ////////////////////////////////////////////////
  153. void hy2_2(void)  //暗中逆时针转180度。(一个一个点亮)
  154. {
  155.   unsigned char i;
  156.                 P0=0xff;P1=0xff;P2=0xff;P3=0xff;
  157.   for(i=0;i<8;i++)
  158.     {
  159.                 P0=Tab11[i];
  160.                 delay();
  161.          }
  162.   for(i=0;i<8;i++)
  163.     {
  164.            P2=Tab11[i];
  165.                 delay();
  166.          }
  167.                 P0=0xff;P2=0xff;
  168.   for(i=0;i<8;i++)
  169.     {
  170.                 P3=Tab22[i];
  171.                 delay();
  172.          }
  173.   for(i=0;i<8;i++)
  174.     {
  175.            P1=Tab22[i];
  176.                 delay();
  177.          }
  178.                 P1=0xff;P3=0xff;
  179. }
  180. ///////////////////////////////////////////////////
  181. void hy2_3(void)  //暗中向下180。(一个一个点亮)
  182. {
  183.   unsigned char i;
  184.                 P0=0xff;P1=0xff;P2=0xff;P3=0xff;
  185.   for(i=0;i<8;i++)
  186.     {
  187.                 P0=Tab11[i];
  188.            P1=Tab11[i];
  189.                 delay();
  190.          }
  191.   for(i=0;i<8;i++)
  192.     {
  193.            P2=Tab11[i];
  194.                 P3=Tab11[i];
  195.                 delay();
  196.          }
  197. ///////////////////////
  198.     flag=100;
  199.   for(i=0;i<8;i++)
  200.     {
  201.                 P2=Tab33[i];
  202.            P3=Tab33[i];
  203.                 delay();
  204.          }
  205.   for(i=0;i<8;i++)
  206.     {
  207.            P0=Tab33[i];
  208.                 P1=Tab33[i];
  209.                 delay();
  210.     flag=200;
  211.          }
  212. }
  213. ///////////////////////////////////////////////////
  214. void hy2_4(void)  //暗中逆时针转360。(一个一个点亮)
  215. {
  216.   unsigned char i;
  217.                 P0=0xff;P1=0xff;P2=0xff;P3=0xff;
  218.   for(i=0;i<8;i++)
  219.     {
  220.                 P0=Tab11[i];
  221.                 P3=Tab22[i];
  222.                 delay();
  223.          }
  224.   for(i=0;i<8;i++)
  225.     {
  226.            P2=Tab11[i];
  227.                 P1=Tab22[i];
  228.                 delay();
  229.          }
  230. ///////////////////////
  231.     flag=100;
  232. for(i=0;i<8;i++)
  233.     {
  234.                 P0=Tab44[i];
  235.                 P3=Tab5[i];
  236.                 delay();
  237.          }
  238.   for(i=0;i<8;i++)
  239.     {
  240.            P2=Tab44[i];
  241.                 P1=Tab5[i];
  242.                 delay();
  243.          }
  244.     flag=200;
  245. }

  246. ///////////////////////////////////

  247. void hy5(void)  //先向下伸展,然后向上伸展逐渐点亮
  248. {
  249.   unsigned char i;
  250.   for(i=0;i<8;i++)
  251.     {
  252.                 P0=Tab8[i];
  253.                 P1=Tab8[i];
  254.                 delay();
  255.          }
  256.         P0=0xff;
  257.         P1=0xff;
  258.   for(i=0;i<8;i++)
  259.     {
  260.                 P2=Tab8[i];
  261.                 P3=Tab8[i];
  262.                 delay();
  263.          }
  264.         P2=0xff;
  265.         P3=0xff;
  266.   for(i=0;i<8;i++)
  267.     {
  268.                 P2=Tab7[i];
  269.                 P3=Tab7[i];
  270.                 delay();
  271.          }
  272.         P2=0xff;
  273.         P3=0xff;
  274.   for(i=0;i<8;i++)
  275.     {
  276.                 P0=Tab7[i];
  277.                 P1=Tab7[i];
  278.                 delay();
  279.          }
  280.         P0=0xff;
  281.         P1=0xff;
  282. }
  283. /////////////////////////////
  284. void jr(void)//聚拢
  285. {
  286.   unsigned char i;
  287.   for(i=0;i<9;i++)  //8位控制码
  288.     {
  289.            P0=Tab1[i];P1=Tab1[i];
  290.            P2=Tab2[i];P3=Tab2[i];           
  291.                 delay();
  292.          }  
  293.   for(i=0;i<9;i++)
  294.     {
  295.            P0=Tab2[i];P1=Tab2[i];
  296.              P2=Tab1[i];P3=Tab1[i];
  297.                 delay();
  298.          }           
  299. ///////////////////////////
  300.   for(i=0;i<9;i++)  
  301.     {
  302.            P0=Tab1[i];P1=Tab1[i];
  303.            P2=Tab2[i];P3=Tab2[i];           
  304.                 delay();
  305.          }
  306.   for(i=0;i<9;i++)
  307.     {
  308.            P0=Tab2[i];P1=Tab2[i];
  309.              P2=Tab1[i];P3=Tab1[i];
  310.                 delay();
  311.          }
  312.         xl(); //星星眨眼
  313.         xl(); //星星眨眼
  314. ///////////////////////////
  315.   for(i=0;i<9;i++)
  316.     {
  317.            P0=Tab3[i]; P1=Tab3[i];
  318.            P2=Tab4[i]; P3=Tab4[i];
  319.                 delay();
  320.          }
  321.   for(i=0;i<9;i++)
  322.     {
  323.            P0=Tab4[i];P1=Tab4[i];
  324.              P2=Tab3[i];P3=Tab4[i];
  325.                 delay();
  326.          }
  327. ////////////////////////////////
  328.   for(i=0;i<9;i++)
  329.     {
  330.            P0=Tab1[i];P1=Tab1[i];
  331.            P2=Tab2[i]; P3=Tab2[i];           
  332.                 delay();
  333.          }
  334.           
  335.   for(i=0;i<9;i++)  
  336.     {
  337.            P0=Tab4[i];P1=Tab4[i];
  338.              P2=Tab3[i];P3=Tab3[i];
  339.                 delay();           
  340.          }
  341. /////////////////////////////
  342.   for(i=0;i<9;i++)
  343.     {
  344.            P0=Tab3[i]; P1=Tab3[i];
  345.              P2=Tab4[i];P3=Tab4[i];
  346.                 delay();
  347.          }
  348.   for(i=0;i<9;i++)
  349.     {
  350.            P0=Tab2[i];P1=Tab2[i];
  351.              P2=Tab1[i];P3=Tab1[i];
  352.                 delay();
  353.          }
  354. }
  355. ////////////////////////////////////
  356. void azzy(void)  //暗中向下
  357. {
  358.   unsigned char i;
  359.         flag=200;
  360.   for(i=0;i<8;i++)
  361.     {
  362.                 P2=0xff;P3=0xff;
  363.            P1=Tab1[i];P0=Tab1[i];
  364.                 delay();           
  365.           }
  366.   for(i=0;i<9;i++)
  367.     {
  368.                 P1=0xff;P0=0xff;
  369.            P2=Tab1[i];P3=Tab1[i];
  370.                 delay();
  371.           }
  372. }
  373. /////////////////////////////////
  374. void azyy(void)  //暗中you移
  375. {
  376.   unsigned char i;
  377.   for(i=0;i<8;i++)
  378.     {
  379.                 P0=0xff;P1=0xff;
  380.            P2=Tab2[i];P3=Tab2[i];
  381.                 delay();
  382.           }
  383.   for(i=0;i<9;i++)
  384.     {
  385.            P0=Tab2[i];P1=Tab2[i];
  386.                 delay();
  387.           }
  388. }
  389. //////////////////////////////////
  390. void led_flow1(void)  
  391. {
  392.   unsigned char i;
  393.   for(i=0;i<9;i++)
  394.     {
  395.                 P2=0;P3=0;
  396.            P1=Tab3[i];P0=Tab3[i];
  397.                 delay();           
  398.           }
  399.   for(i=0;i<9;i++)  
  400.     {
  401.            P2=Tab3[i];P3=Tab3[i];
  402.                 delay();
  403.           }
  404. }
  405. ///////////////////////////////////
  406. void lzyy(void)  //亮中右移
  407. {
  408.   unsigned char i;
  409.   for(i=0;i<9;i++)  
  410.     {
  411.                 P0=0x00;P1=0x00;
  412.            P2=Tab4[i];P3=Tab4[i];
  413.                 delay();           
  414.           }
  415.   for(i=0;i<9;i++)  
  416.     {
  417.            P0=Tab4[i];P1=Tab4[i];
  418.                 delay();
  419.           }
  420. }
  421. //////////////////////////////////
  422. void shansuo(void)//全部灯闪烁
  423.         {
  424. uchar i;
  425. for(i=0;i<3;i++)
  426. {
  427. P0=0xff;        P1=0xff;        P2=0xff;        P3=0xff;
  428. delay();        delay();
  429. P0=0x00;        P1=0x00;        P2=0x00;        P3=0x00;
  430. delay();        delay();
  431. }
  432.         }

  433. void xl(void)//相邻俩个变换
  434. {
  435. uchar i;
  436. for(i=0;i<3;i++)
  437. {
  438. P0=0xAA;P1=0xAA;P2=0xAA;P3=0xAA;
  439. delay();delay();
  440. P0=0x55;P1=0x55;P2=0x55;P3=0x55;
  441. delay();delay();
  442. }
  443. }
  444. //////////////////////////////
  445. void sxb(void)//上下半
  446. {
  447.   unsigned char i;
  448. P0=0xff;P1=0xff;
  449. P2=0x00;P3=0x00;
  450. delay();delay();delay();delay();
  451.   for(i=0;i<8;i++)
  452.     {
  453.                 P0=Tab11[i];
  454.            P1=Tab11[i];
  455.                 delay();
  456.          }
  457.   for(i=0;i<8;i++)
  458.     {
  459.                 P0=Tab11[i];
  460.            P1=Tab11[i];
  461.                 delay();
  462.          }
  463.   for(i=0;i<8;i++)
  464.     {
  465.                 P0=Tab11[i];
  466.            P1=Tab11[i];
  467.                 delay();
  468.          }
  469. for(i=0;i<3;i++)
  470. {
  471. P0=0x00;P1=0x00;
  472. delay();delay();
  473. P0=0xff;P1=0xff;
  474. delay();delay();
  475. }
  476. }
  477. //////////////////////////////
  478. void jc(void)//
  479. {
  480. uchar i;
  481.   for(i=0;i<3;i++)
  482. {
  483. P0=0x00;
  484. P3=0x00;
  485. P1=0xff;
  486. P2=0xff;
  487. delay();delay();delay();delay();
  488. P1=0x00;
  489. P2=0x00;
  490. P0=0xff;
  491. P3=0xff;
  492. delay();delay();delay();delay();
  493. }
  494. }
  495. /////////////////////////////////
  496. void azzy_1(void)  //暗中向下
  497. {
  498.   unsigned char i,i1;
  499. for(flag=80;flag>0;flag=flag-10)
  500.   {
  501.   for(i=0;i<8;i++)
  502.     {
  503.                 P2=0xff;P3=0xff;
  504.            P1=Tab1[i];P0=Tab1[i];
  505.                 delay();           
  506.           }
  507.   for(i=0;i<9;i++)
  508.     {
  509.                 P1=0xff;P0=0xff;
  510.            P2=Tab1[i];P3=Tab1[i];
  511.                 delay();
  512.           }
  513.         }
  514.         flag=10;
  515.   for(i1=0;i1<30;i1++)
  516.   {
  517.   for(i=0;i<8;i++)
  518.     {
  519.                 P2=0xff;P3=0xff;
  520.            P1=Tab1[i];P0=Tab1[i];
  521.                 delay();           
  522.           }
  523.   for(i=0;i<9;i++)
  524.     {
  525.                 P1=0xff;P0=0xff;
  526.            P2=Tab1[i];P3=Tab1[i];
  527.                 delay();
  528.           }
  529.         }
  530.                 flag=200;
  531.   }
  532. /////////////////////////////
  533. void js(void)//结束
  534. {
  535. uchar i;
  536. hy2_3();
  537. for(i=0;i<3;i++)
  538. {
  539. P0=0xff;P2=0xff;
  540. delay();delay();
  541. P0=0x00;P2=0x00;
  542. delay();delay();
  543. }
  544. ///////////////////
  545. for(i=0;i<3;i++)
  546. {
  547. P1=0xff;P3=0xff;
  548. delay();delay();
  549. P1=0x00;P3=0x00;
  550. ……………………

  551. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
作品3 心形流水灯程序及电路.rar (287.24 KB, 下载次数: 281)

评分

参与人数 2黑币 +55 收起 理由
214shiyanshi + 5 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:372089 发表于 2018-7-15 18:12 | 显示全部楼层
电路图元器件是一个一个摆的??还是有什么模型
回复

使用道具 举报

ID:261725 发表于 2018-12-18 20:51 | 显示全部楼层
我试试看,能不能实现
回复

使用道具 举报

ID:556058 发表于 2019-6-5 22:24 | 显示全部楼层
谢谢大佬分享
回复

使用道具 举报

ID:428743 发表于 2019-6-7 18:24 | 显示全部楼层
能否用stc12c5a60s2


回复

使用道具 举报

ID:558829 发表于 2019-6-10 20:03 | 显示全部楼层
靠谱,大家可以参考一下
回复

使用道具 举报

ID:580 发表于 2019-6-17 17:58 来自手机 | 显示全部楼层
我试试看,能不能实现
回复

使用道具 举报

ID:564933 发表于 2019-6-17 20:26 | 显示全部楼层
程序好多啊
回复

使用道具 举报

ID:610016 发表于 2019-9-10 15:32 | 显示全部楼层
这也太长了吧
回复

使用道具 举报

ID:260280 发表于 2019-9-11 15:10 | 显示全部楼层

控制灯的闪烁有好几种所以程序比较多
回复

使用道具 举报

ID:260280 发表于 2019-9-11 15:11 | 显示全部楼层
wyc77 发表于 2019-6-7 18:24
能否用stc12c5a60s2

这个是51的
回复

使用道具 举报

ID:618083 发表于 2019-9-29 17:16 | 显示全部楼层
牛逼,大神
回复

使用道具 举报

ID:716490 发表于 2020-3-26 20:45 | 显示全部楼层
想试试
回复

使用道具 举报

ID:756183 发表于 2020-5-20 00:02 | 显示全部楼层
厉害啊,太牛了啊
回复

使用道具 举报

ID:837480 发表于 2020-11-1 20:58 | 显示全部楼层
上了几轮51单片课,刚看到这么有趣的资料
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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