找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1751|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机编写8*8光立方功能程序 改编

[复制链接]
跳转到指定楼层
楼主
学习制作低阶光立方的参考资料,以及以前课程中制作的一些光立方参考资料,有兴趣的可以互相讨论,目前正在开发加入人机互动,智能互联功能。添加了几个自己当时在做光立方的时候的几种AD图   有pad软件的图   有疑惑可以互相讨论,或者提出意见,资料太多,无法一次传完,有兴趣的留言 交流传给你

单片机源程序如下:
  1. /*---------------------------------------------------------------------------------------------------
  2. -----------------------------------------------------------------------------------------------------
  3. * 艾罗
  4. Build target 'Target 1'
  5. compiling main.c...
  6. linking...
  7. Program Size: data=111.7 xdata=1017 code=55161
  8. creating hex file from "最新app光立方源程序"...
  9. "最新app光立方源程序" - 0 Error(s), 0 Warning(s).
  10. ------------------------------------------------------------------------------------------------------
  11. -----------------------------------------------------------------------------------------------------*/

  12. #include "STC12C5A.H"  //包含单片机的头文件使用KEIL必须添加进来否则编译不了
  13. #include "intrins.h"   //包含NOP延时头文件
  14. #include "main.h"       //主程序头文件
  15. #include "shuju.h"     //包含字模数据数组
  16. #include "flash.h"      //动画部分程序
  17. #include "hongwai.h"    //红外部分程序
  18. #include "key.h"        //按键部分程序
  19. #include "pinpu.h"      //音乐频谱部分程序
  20. #include "jiance.h"     //开机检测模式程序
  21. #include "moshi.h"      //模式控制程序          



  22. /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@定义变量@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
  23. uchar xdata display[8][8];
  24. uchar data msd=0;
  25. uint ld=700;
  26. uchar data key2=0,key3=0;
  27. uchar data xsdsq=0;
  28. uchar data sj_read_flag=0;  
  29. uchar data read_flag=0;     //电脑上位机读标记
  30. uchar data cnt=0;
  31. uchar data cot=0;
  32. uchar data cd=0,layerr=0,saom=0;
  33. uint liangdu = 400;          //亮度
  34. uint donghua_shudu=500;   //动画速度调节
  35. int date=0;         //串口2数据
  36. bit busy = 0; //串口判断标记
  37. uchar data moshi=0; // 模式
  38. bit start3 = 0; //旋转字母模式标记
  39. bit key1=0;
  40. uchar data abc_falg=0;       //旋转字母标记
  41. bit start1=1;//频谱选择标记
  42. uchar data ping=2;        //频谱选择标记
  43. uchar data dong=2;        //动画选择标记
  44. uchar data gai=2;// 选择标记
  45. uchar data gaizi=2;//选择标记
  46. bit start2=1;//        动画选择标记
  47. uchar data pingpu=0;        //选择哪个频谱动画
  48. uchar data donghua1=0; //选择哪个脱机动画
  49. bit start_shuju=0; //wifi接收数据开始标记
  50. bit abcd=0;//旋转字母
  51. bit moshi_falg=0;
  52. uchar data dhms_falg=0;
  53. uchar data ppms_falg=0;
  54. uchar data sjms_falg=0;
  55. uchar data dnms_falg=0;
  56. uchar data gzms_falg=0;
  57. uchar data ldjian_falg=0;
  58. uchar data ldjia_falg=0;
  59. uchar data sdjia_falg=0;
  60. uchar data sdjian_falg=0;
  61. uchar data gzdh3_falg=0;
  62. uchar gzdh3=0;
  63. bit gaizi1_flag=1; //开机检测有没有保存过内容
  64. bit gaizi2_flag=1;
  65. bit gaizi3_flag=1;
  66. bit gaizi4_flag=1;
  67. uchar gaizi_geshu1=0;        //改字的字数
  68. uchar gaizi_geshu2=0;
  69. uchar gaizi_geshu3=0;
  70. uchar jcount=0; //收到字母的个数
  71. bit kaiji_flag=0;//
  72. bit gaizhiflag=0;
  73. uchar gzms_falg1=0;
  74. uchar gzms_falg2=0;
  75. uchar gzms_falg3=0;
  76. uchar gzms_falg4=0;
  77. uchar gzms_falg5=0;




  78. /*##########################################################################################*/
  79. //************************************艾罗************************************
  80. //函数名称:void init();
  81. //功    能:定义IO口功能
  82. //出口参数:无
  83. //编 写 人:艾罗
  84. //编写日期:2015-08-1
  85. //修改历史:V1.0
  86. //************************************艾罗************************************
  87. void init()
  88. {
  89.         P4SW=0xff;                //定义P4口为I/O口
  90.         P0M1=0x00;                                   
  91.         P0M0=0xff;                //定义P0为强上拉输出.
  92.         P1M1=0x01;
  93.         P1M0=0xfe;                //定义P1为强上拉输出.   P1.0作为AD此时不能作为强上蜡
  94.         P2M1=0x00;
  95.         P2M0=0xff;                //定义P2为强上拉输出.
  96.         P3M1=0x00;
  97.         P3M0=0xf8;                //定义P3为强上拉输出.
  98.         P4M1=0x00;
  99.         P4M0=0xff;                //定义P4为强上拉输出.        
  100. }
  101. /********************* AD初始化************************/
  102. void ADC0_Init (void)
  103. {
  104.         uchar i;
  105.     P1ASF = 0x01;                   //Open 8 channels ADC function
  106.     ADC_RES = 0;                    //Clear previous result        清零ADC的8位数据
  107.         AUXR1 &=0xFB;                   //1111,1011, 令 ADRJ=0 (10位A/D转换结果的高8位放在ADC_RES寄存器, 低2位放在ADC_RESL寄存器)
  108.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL;//配置ADC寄存器  
  109.         for(i=0;i<24;i++)
  110.         {
  111.                 _nop_();       
  112.         }

  113. }

  114. /*##########################################################################################*/
  115. //************************************艾罗************************************
  116. //函数名称:void sinter()
  117. //功    能:中断初始化
  118. //出口参数:无
  119. //编 写 人:艾罗
  120. //编写日期:2015-08-1
  121. //修改历史:V1.0
  122. //************************************艾罗************************************
  123. void sinter()
  124. {
  125.         TCON=0x01;
  126.         TH0=0x10;
  127.         TL0=0x00;
  128.         IPH = 0xfc;                   
  129.         ET0 = 1;
  130.         TR0 = 1;       
  131. }
  132. /********************* 串口初始化************************/
  133. void init_uart(void)
  134. {
  135.          PCON |= 0x80;
  136.          SCON = 0x50;
  137.          AUXR |= 0x40;
  138.          AUXR &= 0xFE;
  139.          TMOD &= 0x0F;
  140.          TMOD |= 0x20;                                          
  141.          TL1 = 0xE8;
  142.          TH1 = 0xE8;
  143.          ET1 = 0;
  144.          TR1 = 1;
  145.          ES=1;
  146.          EA=1;
  147. }

  148. /*##########################################################################################*/
  149. //************************************艾罗************************************
  150. //函数名称:void delayus(unsigned int yanshi);
  151. //功    能:根据yanshi值的大小进行延时等待操作,1默认为2uS
  152. //入口参数:yanshi的值,范围0-65535
  153. //出口参数:无
  154. //编 写 人:艾罗
  155. //编写日期:2015-08-1
  156. //修改历史:V1.0
  157. //************************************艾罗************************************
  158. void delayus(unsigned int yanshi)
  159. {
  160.         unsigned int wmys;                 //定义延时循环控制变量
  161.         for(wmys=0;wmys<=yanshi;wmys++);        //根据延时参数进行空循环操作,达到延时功能
  162. }
  163. void delay10us(void)   //误差 -0.026765046296us STC 1T 22.1184Mhz
  164. {
  165.     unsigned char a,b;
  166.     for(b=1;b>0;b--)
  167.         for(a=2;a>0;a--);           //默认的速度为5,变速1-5-25-125
  168. }
  169. void delay5us(void)   //误差 -0.026765046296us STC 1T 22.1184Mhz
  170. {
  171.     unsigned char a,b;
  172.     for(b=1;b>0;b--)
  173.         for(a=5;a>0;a--);           //默认的速度为5,变速1-5-25-125
  174. }
  175. void delay(uint ihk)
  176. {   
  177.         if(key3==2){return;}
  178.         else
  179.     {                                                                                             
  180.             while(ihk--)
  181.                 {
  182.                          delay5us();   //12t的mcu 注释这个延时即可
  183.                         if(dong == 1){return;} if(gai == 1){return;}if(gaizhiflag==1){return;}
  184.                 }
  185.         }
  186. }

  187. void delays(int t)
  188. {
  189.         int i;
  190.         while(t--)
  191.                 for(i=0;i<700;i++);
  192. }


  193. /*##########################################################################################*/
  194. //************************************艾罗************************************
  195. //函数名称:void hansao(unsigned char hs);
  196. //功    能:根据入口参数hs的值,进行判断选择哪一行,选通1-8行的选通
  197. //入口参数:hs的值,范围0-7
  198. //出口参数:无
  199. //编 写 人:艾罗
  200. //************************************艾罗************************************
  201. void hansao(unsigned char hs)     
  202. {
  203.         if(hs<8)                          //判断hs的值是否在行扫描的值范围内,不在范围内不执行任何操作
  204.         {
  205.                 if(M_EN == 0)
  206.                 {
  207.                         if(hs==7)                  //选通第1行
  208.                         {
  209.                                
  210.                             P2=0Xfe;
  211.                                 delayus(liangdu);
  212.                                 P2 = 0xff;          //消影
  213.                                 return;
  214.                         }
  215.                         if(hs==6)                  //选通第2行
  216.                         {
  217.                              P2=0Xfd;
  218.                                  delayus(liangdu);
  219.                              P2 = 0xff;               
  220.                                  return;
  221.                         }
  222.                         if(hs==5)                  //选通第3行
  223.                         {
  224.                                 P2=0Xfb;
  225.                                 delayus(liangdu);
  226.                                 P2 = 0xff;       
  227.                                 return;
  228.                         }
  229.                         if(hs==4)                  //选通第4行
  230.                         {
  231.                             P2=0Xf7;
  232.                                 delayus(liangdu);
  233.                                 P2 = 0xff;       
  234.                                   return;
  235.                         }
  236.                         if(hs==3)                  //选通第5行
  237.                         {
  238.                                 P2=0Xef;
  239.                                 delayus(liangdu);
  240.                                 P2 = 0xff;                                                       
  241.                                 return;
  242.                         }
  243.                         if(hs==2)                  //选通第6行
  244.                         {
  245.                                 P2=0Xdf;
  246.                                 delayus(liangdu);
  247.                                 P2 = 0xff;       
  248.                                 return;
  249.                         }
  250.                         if(hs==1)                  //选通第7行
  251.                         {
  252.                                 P2=0Xbf;
  253.                                 delayus(liangdu);
  254.                                 P2 = 0xff;       
  255.                                 return;
  256.                         }
  257.                         if(hs==0)                  //选通第8行
  258.                         {
  259.                                 P2=0X7f;
  260.                                 delayus(liangdu);
  261.                                 P2 = 0xff;       
  262.                                 return;
  263.                         }
  264.                 }
  265.         }
  266. }
  267. //************************************595芯片驱动程序1 频谱模式和后面动画模式************************************
  268. void sendbyte(unsigned int num1,unsigned int num2,unsigned int num3,unsigned int num4)
  269. {   
  270.     unsigned char c;        
  271.     for(c=0;c<8;c++)                       
  272.    {
  273.       CLK=0;                                  
  274.       M_LR_DS0=num1&0x80;                         
  275.           M_LG_DS0=num2&0x80;                       
  276.           M_HR_DS0=num3&0x80;                       
  277.           M_HG_DS0=num4&0x80;                       
  278.       CLK=1;                                
  279.           num1<<=1;               
  280.       num2<<=1;               
  281.       num3<<=1;               
  282.       num4<<=1;                       
  283.     }
  284. }
  285. //************************************595芯片驱动程序2  //前面动画************************************
  286. void sendbyte1(unsigned int num1,unsigned int num2,unsigned int num3,unsigned int num4)
  287. {
  288.     unsigned char c;
  289.     for(c=0;c<8;c++)
  290.     {
  291.                 CLK=0;         //模拟时钟控制端口
  292.                 M_LR_DS0=num1&0x01;           //模拟数据发送端口
  293.                 M_LG_DS0=num2&0x01;
  294.                 M_HR_DS0=num3&0x01;
  295.                 M_HG_DS0=num4&0x01;
  296.                 CLK=1;
  297.                 num1>>=1;
  298.                 num2>>=1;
  299.                 num3>>=1;
  300.                 num4>>=1;
  301.     }
  302. }
  303. //************************************595芯片驱动程序3 上位机控制部分***********************************
  304. void sendbyteck(unsigned int num1,unsigned int num2,unsigned int num3,unsigned int num4)
  305. {
  306.     unsigned char c;
  307.     for(c=0;c<8;c++)
  308.            {
  309.                 CLK=0;
  310.                 M_LR_DS0=num1&0x01;
  311.                 M_LG_DS0=num2&0x01;
  312.                 M_HR_DS0=num3&0x01;            
  313.                 M_HG_DS0=num4&0x01;
  314.                 CLK=1;
  315.                 num1>>=1;
  316.                 num2>>=1;
  317.                 num3>>=1;
  318.                 num4>>=1;
  319.     }
  320. }

  321. void fvb()                //电脑上位机数据处理
  322. {
  323.         if(read_flag)
  324.         {
  325.                 read_flag=0;
  326.                 for(saom=0;saom<8;saom++)
  327.                 {
  328.                         displayck[saom+0]=((shuzu8X8[saom*8]>>7)&0x01)+(((shuzu8X8[saom*8+1]>>7)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>7)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>7)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>7)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>7)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>7)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>7)&0x01)<<7);       
  329.                         displayck[saom+8]=((shuzu8X8[saom*8]>>6)&0x01)+(((shuzu8X8[saom*8+1]>>6)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>6)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>6)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>6)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>6)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>6)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>6)&0x01)<<7);       
  330.                         displayck[saom+16]=((shuzu8X8[saom*8]>>5)&0x01)+(((shuzu8X8[saom*8+1]>>5)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>5)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>5)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>5)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>5)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>5)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>5)&0x01)<<7);       
  331.                         displayck[saom+24]=((shuzu8X8[saom*8]>>4)&0x01)+(((shuzu8X8[saom*8+1]>>4)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>4)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>4)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>4)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>4)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>4)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>4)&0x01)<<7);       
  332.                         displayck[saom+32]=((shuzu8X8[saom*8]>>3)&0x01)+(((shuzu8X8[saom*8+1]>>3)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>3)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>3)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>3)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>3)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>3)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>3)&0x01)<<7);       
  333.                         displayck[saom+40]=((shuzu8X8[saom*8]>>2)&0x01)+(((shuzu8X8[saom*8+1]>>2)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>2)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>2)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>2)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>2)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>2)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>2)&0x01)<<7);       
  334.                         displayck[saom+48]=((shuzu8X8[saom*8]>>1)&0x01)+(((shuzu8X8[saom*8+1]>>1)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>1)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>1)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>1)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>1)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>1)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>1)&0x01)<<7);       
  335.                         displayck[saom+56]=((shuzu8X8[saom*8]>>0)&0x01)+(((shuzu8X8[saom*8+1]>>0)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>0)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>0)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>0)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>0)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>0)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>0)&0x01)<<7);       
  336.                 }
  337.         }
  338.         for(layerr=0;layerr<8;layerr++)
  339.         {               
  340.                 key_baihei_scan();  
  341.                 hansao(layerr);
  342.                 sendbyteck(~displayck[layerr*8+0],~displayck[layerr*8+2],~displayck[layerr*8+4],~displayck[layerr*8+5]);
  343.                 sendbyteck(~displayck[layerr*8+3],~displayck[layerr*8+1],~displayck[layerr*8+6],~displayck[layerr*8+7]);
  344.                 SUO=0;                //模拟锁存信号端口             
  345.                 _nop_();
  346.                 SUO=1;         
  347.                   M_EN=0;       
  348.                 hansao(layerr);                               
  349.                 delayus(ld);            
  350.                 M_EN=1;                               
  351.                 if(key2==1||key2==2||key2==4||key2==5)
  352.                 {
  353.                         break;
  354.                 }           
  355.         }
  356. }
  357. void zhen(uchar *a,uchar v)         //前面动画数据处理
  358. {
  359.          char layer;
  360.          while(v--)
  361.          {       
  362.                   for(layer=0;layer<8;layer++)
  363.                   {
  364.                                  if(xsdsq==1){;}
  365.                                 else
  366.                                 {
  367.                                         key_baihei_scan();
  368.                                         if(msd==2||msd==6)
  369.                                         {
  370.                                                 if(key2==1||key2==3||key2==5||key2==4)  
  371.                                                 {
  372.                                                         key3=1;       
  373.                                                         M_EN=1;                                  
  374.                                                         break;
  375.                                                 }
  376.                                         }
  377.                                         if(msd==4)
  378.                                         {
  379.                                                 if(key2==1||key2==3||key2==5||key2==2)  
  380.                                                 {
  381.                                                         key3=1;       
  382.                                                         M_EN=1;                  
  383.                                                         break;
  384.                                                 }
  385.                                         }
  386.                                 }       
  387.                                 sendbyte1(~a[layer*8+7],~a[layer*8+5],~a[layer*8+3],~a[layer*8+2]);
  388.                                 sendbyte1(~a[layer*8+4],~a[layer*8+6],~a[layer*8+1],~a[layer*8+0]);
  389.                                 SUO=0;                             
  390.                                 _nop_();
  391.                                 SUO=1;
  392.                                 M_EN=0;       
  393.                                 hansao(7-layer);                     
  394.                                 delayus(donghua_shudu);                    
  395.                                 M_EN=1;                       
  396.                                 if(dong == 1){ break;}         
  397.                                 if(abcd == 1){break;}
  398.                                 if(gai == 1){break;}
  399.                   }
  400.                   delays(2);                  
  401.          }
  402. }

  403. void W_side(uchar *tab,char num,char v)
  404. {
  405.         uchar a[64]={0};
  406.         int i,j;
  407.         for(j=0;j<num;j++)
  408.         {
  409.                 for(i=0;i<8;i++)
  410.                         a[i*8+7]=tab[j*8+i];       
  411.                 if(key3==1){break;}
  412.                 else{zhen(a,v);}
  413.                 delay(50);
  414.         }
  415. }

  416. /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  主函数  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
  417. void main()
  418. {
  419.         unsigned char p=0,k=0,l=0;          //定义
  420.         init();       
  421.         start_shuju = 1;
  422.         IDelay(100);
  423.         IRInit();
  424.         ADC0_Init();
  425.         clear(0);
  426.         PWM_LED();//开启PWM呼吸灯功能
  427.     moshi = 0;
  428.         key2 = 0;
  429.         ping=2;       
  430.         dong=2;
  431.         gai=2;
  432.         gaizi=0;
  433.         pingpu = 0;
  434.         donghua1 = 0;
  435.         start1 = 1;
  436.         start2 = 1;
  437.         turn_on(10);
  438.         H_scan(10); // 左向右扫描检测
  439.         V_scan(10); //下向上扫描检测
  440.         W_scan(10); //前向后扫描检测
  441.         PWM_POW=0;  //打开电源指示灯
  442.         sinter();
  443.         TR0=0;           //关闭定时器显示扫描         相当于关闭频谱模式显示和后面部分动画显示       
  444.         while(1)        //开机检测模式
  445.         {
  446.                 H_scan(40); // 左向右扫描检测   
  447.                 V_scan(40); //下向上扫描检测
  448.                 W_scan(40); //前向后扫描检测
  449.                 if(key1 == 1)
  450.                 {
  451.                         msd=2;
  452.                         break;       
  453.                 }
  454.                 if(key2==3||key2==1||key2==4||key2==5||key2==2)
  455.                 {
  456.                         if(key2==3)
  457.                         {
  458.                                 msd=3;break;
  459.                         }
  460.                         else
  461.                         {
  462.                                 if(key2==1)
  463.                                 {
  464.                                         msd=1;break;
  465.                                 }
  466.                                 if(key2==4)
  467.                                 {
  468.                                         msd=4;
  469.                                         break;       
  470.                                 }
  471.                                 if(key2==5)
  472.                                 {
  473.                                         msd=5;
  474.                                         break;       
  475.                                 }
  476.                                 if(key2==2)
  477.                                 {
  478.                                         msd=2;
  479.                                         break;       
  480.                                 }
  481.                         }
  482.                 }
  483.         }
  484.         delay(10); //如果是前面动画和上机模式需要延时下
  485.         while(1)  /*play list*/
  486.         {      
  487.                 kaiji_flag = 1; //开机后  
  488.                 yinyue_moshi();//音乐频谱模式
  489.                 donghua_moshi();//动画模式
  490.                 shangweiji_moshi();        //上位机模式
  491.                 xiugaidonghua_moshi(); //显示文字动画                  
  492.         }
  493. }

  494. /************************************串口中断1************************************/
  495. void serial (void) interrupt 4 using 1
  496. {
  497.         uchar tempbuff;ES=0;
  498.         if(RI)
  499.         {
  500.                 RI=0;tempbuff=SBUF;
  501.                 switch(cnt)
  502.                 {
  503.                         case 0:if(tempbuff==0xf2)cnt=1;else {cnt=0;}break;
  504.                         case 1:shuzu8X8[cd++]=tempbuff;
  505.                         if(cd==64)
  506.                         {
  507.                                 cnt=0;
  508.                                 cd=0;
  509.                                 read_flag=1;
  510.                         }
  511.                         else
  512.                         {
  513.                                 break;
  514.                         }
  515.                         default:break;
  516.                 }
  517.         }
  518.         ES=1;
  519. }
  520. /************************************定时中断1************************************/
  521. void print1() interrupt 1
  522. {
  523.         static uchar layert=0;
  524.         TR0 = 0;
  525.         ET0= 0;

  526.         if(msd==1)          //频谱模式
  527.         {               
  528.                          sendbyte(~display[layert][0],~display[layert][2],~display[layert][4],~display[layert][5]);
  529.                          sendbyte(~display[layert][3],~display[layert][1],~display[layert][6],~display[layert][7]);
  530.                          SUO=0;
  531.                          _nop_();
  532.                          SUO=1;
  533.                          M_EN=0;
  534.                          hansao(7-layert);          
  535.                          delayus(ld);
  536.                          M_EN=1;                                 
  537.                   if (layert<7)
  538.                        layert++;
  539.                   else
  540.                        layert=0;
  541.                     key_baihei_scan();        
  542.                         if(msd==1)
  543.                         {
  544.                                 if(key2==2||key2==3||key2==4||key2==5)
  545.                                 {
  546.                                         key3=2;       
  547.                                         return;                       
  548.                                 }       
  549.                         }                          
  550.                          TH0=0xef;
  551.                  TL0=0x00;
  552.         }
  553.         if(msd==2)         //后部分动画
  554.         {                       
  555.                          sendbyte(~display[layert][0],~display[layert][2],~display[layert][4],~display[layert][5]);
  556.                          sendbyte(~display[layert][3],~display[layert][1],~display[layert][6],~display[layert][7]);
  557.        
  558.                          SUO=0;
  559.                          _nop_();
  560.                          SUO=1;
  561.                          M_EN=0;
  562.                          hansao(layert);
  563.                          delayus(donghua_shudu);
  564.                          M_EN=1;                                 
  565.                   if (layert<7)
  566.                        layert++;
  567.                   else
  568.                        layert=0;       
  569.                      key_baihei_scan();
  570.                         if(msd==2)
  571.                         {
  572.                                 if(key2==1||key2==3||key2==4||key2==5)
  573.                                 {
  574.                                         key3=2;
  575.                                         return;                       
  576.                                 }       
  577.                         }  
  578.                          TH0=0xef;
  579.                  TL0=0x00;
  580.         }
  581.         if(msd==4)         //文字动画部分
  582.         {                       
  583.                          sendbyte(~display[layert][0],~display[layert][2],~display[layert][4],~display[layert][5]);
  584.                          sendbyte(~display[layert][3],~display[layert][1],~display[layert][6],~display[layert][7]);
  585.        
  586.                          SUO=0;
  587.                          _nop_();
  588.                          SUO=1;
  589.                          M_EN=0;
  590.                          hansao(layert);
  591.                          delayus(donghua_shudu);
  592.                          M_EN=1;                                 
  593.                   if (layert<7)
  594.                        layert++;
  595. ……………………

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

2.png (52.06 KB, 下载次数: 47)

2.png

3.png (57.67 KB, 下载次数: 40)

3.png

4.png (81.66 KB, 下载次数: 40)

单片机pcb pdf布线以及连线图 仅供参考

单片机pcb pdf布线以及连线图 仅供参考

资料.zip

1.69 MB, 下载次数: 11, 下载积分: 黑币 -5

另外的光立方布板

app.zip

3.37 MB, 下载次数: 6, 下载积分: 黑币 -5

度娘寻找的app上位机 仅供学习

光立方带引脚注解.7z

175.18 KB, 下载次数: 7, 下载积分: 黑币 -5

程序 中包含成熟的引脚设置以及程序描述

评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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