找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4503|回复: 1
收起左侧

4X4X4光立方制作(含全套设计资料)有焊接视频 单片机代码

[复制链接]
ID:449590 发表于 2018-12-23 16:44 | 显示全部楼层 |阅读模式
这是一个4x4x4的光立方,附件内有源程序和原理图,制作较为简单。

元件名称               数量
万用板                   1
红蓝双色超高亮长脚LED        70
40P圆排母               2
5MMLED 间隔柱              5
5MM七彩LED                4
15MM铜柱                  4
DC005线                   1
DC005座                  1
25V470UF电解电容           1
1K电阻                  4
40P芯片底座              1
STC12C5A60S              1
22P 瓷片电容              3
11.0592M晶振              1
单芯导线               1

整形LED ,每个LED都整形如下图:
444光立方LED整形1.jpg
444光立方LED支架焊接1
444光立方LED支架焊接1.jpg
444光立方LED支架焊接2
444光立方LED支架焊接3.jpg
444光立方焊接方法2
444光立方焊接方法2.jpg
器件准备
-301001917.png

制作过程1
1614011466.png
制作过程2
1431032521.png
成品
-760696838.png
原理图
QQ截图20181223162036.png QQ截图20181223164310.png
程序参考

  1. #include <stc12c5a60s2.h>
  2. #include <intrins.h>

  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define MAX_Delay  8
  6. #define MIN_Delay  1

  7. sbit S_1 = P1 ^ 1;
  8. sbit S_2 = P1 ^ 2;
  9. unsigned int pwm;
  10. unsigned char TimeDelay = 10;
  11. unsigned char Mode = 1;
  12. unsigned char code tabP2[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};  //扫描
  13. uchar  s=0;

  14. void DELAY_MS (uchar i){
  15. //        unsigned int i;
  16. //        while( --a != 0){
  17. //                for(i = 0; i < 600; i++);
  18. //        }
  19.         uchar x,j;
  20.         for(j=0;j<i;j++)
  21.         for(x=0;x<=148;x++);        
  22. }

  23. void Adc_Delay (uint a){  
  24.         uint i;                                      
  25.         while( --a != 0){
  26.                 for(i = 0; i < 600; i++);
  27.                 }
  28. }

  29. void Delay(uint z)
  30. {
  31.         uint x,y;
  32.         for(x=80;x>0;x--)
  33.         for(y=z;y>0;y--);
  34. }

  35. void timer1_init()
  36. {
  37.         TMOD |= 0x10;
  38.         TH1 = 0;
  39.         TL1 = 0;
  40.         ET1 = 1;
  41.         TR1 = 1;
  42.         EA = 1;
  43. }

  44. /*******************************************************************************
  45. **********************         AD转换函数               **************/
  46. /******************************************************************************/
  47. unsigned char Read (unsigned char CHA)
  48. {
  49.         unsigned char AD_FIN=0; //存储A/D转换标志
  50.     CHA &= 0x07;            //选择ADC的8个接口中的一个(0000 0111 清0高5位)
  51.     ADC_CONTR = 0x00;                //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)
  52.     _nop_();
  53.     ADC_CONTR |= CHA;       //选择A/D当前通道
  54.     _nop_();
  55.     ADC_CONTR |= 0x80;      //启动A/D电源
  56.     Adc_Delay(1);            //使输入电压达到稳定(1ms即可)
  57.     ADC_CONTR |= 0x08;      //启动A/D转换(0000 1000 令ADCS = 1)
  58.         _nop_();
  59.         _nop_();
  60.         _nop_();
  61.         _nop_();
  62.     while (AD_FIN ==0)
  63.         {                                                                     //等待A/D转换结束
  64.         AD_FIN = (ADC_CONTR & 0x10); //0001 0000测试A/D转换结束否
  65.     }
  66.     ADC_CONTR &= 0xE7;      //1111 0111 清ADC_FLAG位, 关闭A/D转换,
  67. return (ADC_RES);          //返回A/D转换结果(8位)
  68. }

  69. /*******************************************************************************
  70. *************     AD电容式触摸按键检测程序        ******************/
  71. /*********************************************************************************************/

  72. //bit 1表示有感应物,0表示没有感应物 S1
  73. /**********************************************************************************************/
  74. bit S1(void)
  75. {
  76.         unsigned char R,mm=0,i,j,k;
  77.         bit aa;
  78.                 j=0;k=0;
  79.                 for(i=0;i<10;i++)
  80.                 {               //一次采集数据的数量
  81.                           Adc_Delay(3);
  82.                         R=Read(1);  //读对应的口,触发对应的触摸按键

  83.                         if(R<0x2f)
  84.                         {                         //此参数可调整感应灵敏度值在0x01到0x2F
  85.                                 k++;               
  86.                         }
  87.                         if(R == 0xFF)
  88.                         {
  89.                                 j++;        
  90.                         }
  91.                 }
  92.                 if(k>1 && j>1)
  93.                 {
  94.                         mm++;
  95.                 }
  96.                 else
  97.                 {
  98.                         mm=0;
  99.                 }

  100.         if(mm>0)
  101.         {
  102.                 aa =1;
  103.         }
  104.         else
  105.         {
  106.                 aa=0;
  107.         }
  108. return(aa);
  109. }

  110. /*********************************************************************************************/
  111.                         //                  S2
  112. /**********************************************************************************************/
  113. bit S2(void)
  114. {
  115.         unsigned char R,mm=0,i,j,k;
  116.         bit aa;
  117.                 j=0;k=0;
  118.                 for(i=0;i<10;i++)
  119.                 { //一次采集数据的数量
  120.                         Adc_Delay(3);
  121.                         R=Read(2);

  122.                         if(R<0x2F)
  123.                         { //此参数可调整感应灵敏度值在0x01到0x2F
  124.                                 k++;               
  125.                         }
  126.                         if(R == 0xFF)
  127.                         {
  128.                                 j++;        
  129.                         }
  130.                 }
  131.                 if(k>1 && j>1)
  132.                 {
  133.                         mm++;
  134.                 }
  135.                 else
  136.                 {
  137.                         mm=0;
  138.                 }        

  139.         if(mm>0)
  140.         {
  141.                 aa =1;
  142.         }
  143.         else
  144.         {
  145.                 aa=0;
  146.         }
  147. return(aa);                                                                                                                        

  148. }

  149. //结束呼吸灯专用
  150. uchar code table[]={
  151. 0,0,1,2,3,4,5,6,7,8,9,10,
  152. 11,12,13,14,15,16,17,18,
  153. 19,20,21,22,23,24,25,26,27,
  154. 28,29,30,31,32,33,34,35,36,
  155. 37,38,39,40,41,42,43,44,45,
  156. 46,47,48,49,50,51,52,53,54,
  157. 55,56,57,58,59,60,61,62,63,
  158. 64,65,66,67,68,69,70,71,72,
  159. 73,74,75,76,77,78,79,80,81,82,
  160. 83,84,85,86,87,88,89,90,91,
  161. 92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,
  162. 110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,
  163. };

  164. void PwmUp(uint a, uchar c)
  165. {
  166.         uchar i;
  167.         if(c == 1)
  168.                 P3 = 0X00;
  169.         else
  170.                 P0 = 0X00;
  171.         P2 = 0X00;
  172.         i = table[a];
  173.         Delay(i);
  174.         if(c == 1)
  175.                 P3 = 0XFF;
  176.         else
  177.                 P0 = 0XFF;
  178.         P2 = 0X00;
  179.         Delay(150-i);
  180. }

  181. void PwmDown(uint a,uchar c)
  182. {
  183.         uchar i;
  184.         if(c == 1)
  185.                 P3 = 0XFF;
  186.         else
  187.                 P0 = 0XFF;
  188.         P2 = 0X00;
  189.         i = table[a];
  190.         Delay(i);
  191.         if(c == 1)
  192.                 P3 = 0X00;
  193.         else
  194.                 P0 = 0X00;
  195.         P2 = 0X00;
  196.         Delay(150-i);        
  197. }


  198. void PwmAllon(uchar c)
  199. {
  200.         int i;
  201.         for(i = 0; i < 150 ;i++)
  202.         {
  203.                 PwmDown(i,c);        
  204.         }
  205.         if(c == 1)
  206.                 P3 = 0X00;
  207.         else
  208.                 P0 = 0X00;
  209.         P2 = 0X00;
  210. }

  211. void PwmOff(uchar c)
  212. {
  213.         int i;
  214. //        P3 = 0XFF;
  215. //        P2 = 0X00;
  216. //        Delay(100);

  217.         for(i = 0; i < 150; i++)
  218.         {
  219.                  PwmUp(i,c);        
  220.         }

  221.         //P3 = 0X00;
  222. }

  223. void Allfalloff(uchar c,uchar time)  //由全亮到下落关闭只剩一排
  224. {
  225.         unsigned char code tabP0[5][8]={
  226.         {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},
  227.         {0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF},
  228.         {0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF},
  229.         {0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF},
  230.         {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  231.         };
  232.         int j,k,i;
  233.         if(c==1)
  234.                 P3 = 0X00;
  235.         else if(c==2)
  236.                 P0 = 0X00;
  237.         else
  238.                 {
  239.                         P3 = 0XFF;
  240.                         P0 = 0XFF;
  241.                 }
  242.         for(j=0;j<5;j++)
  243.         {
  244.                 for(k=0;k<15;k++)
  245.                 {
  246.                         for(i=0;i<8;i++)
  247.                         {}
  248. ............完整程序在附件
复制代码

全部资料51hei下载地址:
4X4X4光立方资料.rar (403.38 KB, 下载次数: 26)

评分

参与人数 1黑币 +80 收起 理由
admin + 80 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1061818 发表于 2023-1-30 20:16 | 显示全部楼层
工程量浩大呀!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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