找回密码
 立即注册

QQ登录

只需一步,快速开始

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

蓝牙APP,红外遥控光立方制作单片机源码

[复制链接]
跳转到指定楼层
楼主
光立方制作教程源码!!!


FFT频谱测试源码
MT10-单色app程序源码
MT10-单色上位机恒流
wifi通讯程序源码
上位机通讯测试源码
双色光立方贪吃蛇程序
呼吸灯程序源码
按键程序测试源码
点亮光立方程序测试源码
红外遥控程序源码
脱机动画程序源码
蓝牙APP通讯源码
语音APP萌萌游戏

全部资料51hei下载地址:
通用程序源码.zip (17.13 MB, 下载次数: 66)

单片机源程序如下:
  1. #include <STC12C5A60S2.H>//包含头文件 STC12C5A60S2.H
  2. //STC单片机的头文件可以使用STC-ISP下载软件添加到Keil编译软件中使用(参考STC官方下程序下载软件使用手册载)
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar data buffer[8]; //数组
  6. uchar display[8][8];
  7. sbit RR=P3^6;//红
  8. sbit GG=P2^2;//绿
  9. sbit BB=P2^4;//蓝
  10. sbit k1=P0^4;//播放、暂停
  11. sbit k2=P0^5;//音量减
  12. sbit k3=P0^6;//音量加
  13. sbit ABL=P4^3;//亮度
  14. uchar data rxcnt=0;
  15. char data bb,cheng,yanse;  //sa串口中断,bb延时变量,
  16. unsigned char cube_frame[73];//一帧cube_frame数据73字节,当然这里的数组替换为你程序中的相应数组
  17. unsigned char byte_cnt=0;//接受到的字节数
  18. unsigned char cmd_type=0;//接受到命令类型,可能是动画下载,进入音频模式等..
  19. bit receive_sta=0;        //接受状态,表示数据是否接受完成
  20. void disp_cube(unsigned char DZ_data[64]);        
  21. void timer0init(void)
  22. {
  23.                         TMOD=0X12;                                         
  24.                         EX1=0;
  25.                         ET1=1;//定时器1开中断                                
  26.                         EA=1;               
  27.                         IPH|=0X01;
  28.                         PX0=1;
  29.                         IT0=1;
  30.                         P0M0=0xf8;        //P0口开漏输出
  31.                         P0M1=0xf0;        
  32.                         P3M0=0x00;        //P3准双向输出
  33.                         P3M1=0X00;
  34.                         P2M0=0x00;        //P2准双向输出
  35.                         P2M1=0X00;
  36.                         
  37. }

  38. /*************************************************************************************************************************/
  39. void delay(int i)// 延时 bb速度控制
  40. {                                                                                       
  41.         char b;
  42.         while (i--)
  43.         {
  44.            b=bb;
  45.            while(b--);
  46.         }
  47. }

  48. void delay2(uint t)
  49. {
  50.         int i;
  51.         while(t--)
  52.         for(i=0;i<5;i++);
  53. }
  54. /*************************************************************************************************************************/
  55. /******************************************74HC595数据发送函数************************************************************/
  56. /*************************************************************************************************************************/
  57. sbit SH_CP = P3^4; //SCK
  58. sbit ST_CP = P3^3;//RCK
  59. sbit DS    = P3^5;//SER
  60. sbit SH_CP2 = P2^6; //SCK2
  61. sbit ST_CP2 = P2^5;//RCK2
  62. sbit DS2    = P2^3;//SER2
  63. void initial595()        //列扫描74HC595初始化
  64. {
  65.         SH_CP = 0;
  66.         ST_CP = 0;
  67.         DS = 0;
  68. }
  69. void initial5952() //行扫描74HC595初始化
  70. {
  71.         SH_CP2 = 0;
  72.         ST_CP2 = 0;
  73.         DS2 = 0;
  74. }
  75. /*---------------   发送数据   ---------------*/
  76. void send_data(unsigned char d)
  77. {
  78.         unsigned char i;
  79.         for(i=0;i<8;i++)
  80.         {
  81.                 DS = d&0x80;         //发送最高位
  82.                 SH_CP = 1;
  83.                 SH_CP = 0;                 //移位寄存器移位
  84.                 d = d<<1;                 //数据移位f
  85.         }
  86. }

  87. void xiansi1()                                  //列扫描74HC595数据输出
  88. {        
  89.         send_data(buffer[0]);          //u8
  90.         send_data(buffer[1]);          //u7
  91.         send_data(buffer[2]);          //u6
  92.         send_data(buffer[3]);          //u5
  93.         send_data(buffer[4]);          //u4
  94.         send_data(buffer[5]);          //u3
  95.         send_data(buffer[6]);          //u2
  96.         send_data(buffer[7]);          //u1

  97. }
  98. void InitUart()
  99. {
  100.             EADC=0; //AD中断关
  101.             //sa=1;
  102.                      // BRT独立波特率发生器的溢出率= SYSclk / ( 256 - BRT )
  103.              //11.0592M晶振 57600波特率
  104.             PCON &= 0x7f;  //波特率不倍速   
  105.                 SCON = 0x50;   //8位数据,可变波特率
  106.             BRT = 0xF3;    //设定独立波特率发生器重装值        0xFA
  107.             AUXR |= 0x04;  //独立波特率发生器时钟为Fosc,即1T
  108.             AUXR |= 0x01;  //串口1选择独立波特率发生器为波特率发生器
  109.             AUXR |= 0x10;  //启动独立波特率发生器   
  110.             ES = 1;         //充许串口1中断
  111. }
  112. //***********************************************************************************************
  113. void disp_cube(unsigned char DZ_data[64])
  114. {           unsigned char i;
  115.                 for(i=0;i<64;i++)
  116.            {
  117.                  display[0][i]=DZ_data[i];//这里的代码自己实现
  118.                 }
  119. }

  120.   void shangwei()
  121. {           
  122.                 while(1)
  123.                 {           
  124.                           if(receive_sta)//接受完成
  125.               {                    
  126.                             receive_sta=0;//清除接受成功标志,这步很重要
  127.               }
  128.                         disp_cube(cube_frame+9);//如果接受命令时就时时刷新原来的点阵数据
  129.                 }                  
  130. }        

  131. void main()
  132. {                     InitUart();
  133.                                 initial595();  //初始化调用
  134.                                 initial5952(); //初始化调用
  135.                                 timer0init();  //初始化调用
  136.                             TR1=1;//启动定时器1
  137.                                 BB=0;                                                   
  138.                                 bb=3;
  139.                                 ABL=0;
  140.                                  
  141.                                   shangwei();
  142.                                  
  143.                
  144. }
  145. /*********************************************************************************************************************************************/
  146. void print1() interrupt 3         //定时器1中断函数
  147. {            
  148.         uchar i;               
  149.         static uchar layer=0;                 
  150.        for (i=0;i<8;i++)
  151.        {
  152.         buffer[i]=~display[layer][i];
  153.        }                                       
  154.                         xiansi1();
  155.                                                   
  156.                 cheng=0x01<<layer;
  157.             DS2 = ~cheng&0x01;         //发送最低位
  158.                 SH_CP2 = 1;
  159.                 SH_CP2 = 0;
  160.             ST_CP=1;        
  161.             ST_CP=0;                 //移位寄存器移位        
  162.                 ST_CP2=1;        
  163.             ST_CP2=0;               
  164.                 if (layer<7)
  165.                         layer++;
  166.                     else
  167.                         layer=0;      
  168.                                     TH1=0xf0;
  169.                                     TL1=0xf0;
  170.                                         delay(2);
  171.                                    
  172.                    //          TR1=1;//启动定时器1
  173. }         
  174. /***************************************************************************************************************************************/
  175. /*******************************************************************************************************************************************/
  176. void UartIntterupt() interrupt 4
  177. {
  178.    unsigned char res=0;
  179.         if(RI==1)//进入到接受中断
  180.         {        
  181.                  RI=0;
  182.                 if(receive_sta==1)return;//如果接受完成啦就直接退出,等待main函数将数据给显示完            
  183.                 res=SBUF;
  184.                 if(byte_cnt==0)cmd_type=res;//第一个字节为命令类型
  185.                 switch(cmd_type)
  186.                 {
  187.                    case 0xf5: //动画下载
  188.                      cube_frame[byte_cnt]=res;
  189.                          byte_cnt++;
  190.                          if(byte_cnt==73)
  191.                          { byte_cnt=0;
  192.                            receive_sta=1;//表示接受完成        
  193.                            }
  194.                      break;
  195.                  
  196.                    case 0xf1: //动画音量增加
  197.                                 k3=0;
  198.                                         delay2(50000);
  199.                                         delay2(50000);
  200.                                         delay2(50000);
  201.                                         delay2(50000);                                
  202.                                         k3=1;
  203.                                    receive_sta=1;
  204.                      break;
  205.                    case 0xf0: //动画音量减小
  206.                             k2=0;
  207.                                         delay2(50000);
  208.                                         delay2(50000);
  209.                                         delay2(50000);
  210.                                         delay2(50000);                                                               
  211.                                         k2=1;
  212.                         receive_sta=1;
  213.                      break;
  214.                    case 0xef: //上一曲
  215.                             k2=0;
  216.                                         delay2(20000);
  217.                                         k2=1;
  218.                         receive_sta=1;
  219.                      break;
  220.                    case 0xee: //下一曲
  221.                                     k3=0;
  222.                                         delay2(20000);
  223.                                         k3=1;
  224.                         receive_sta=1;
  225.                          break;
  226.                    case 0xed: //eq音乐类型,摇滚,爵士,流行
  227.                                     k1=0;
  228.                                         delay2(20000);
  229.                                         k1=1;
  230.                         receive_sta=1;
  231.                      break;
  232.                    case 0xec: //暂停与播放
  233.                                     k1=0;
  234.                                         delay2(20000);
  235.                                         k1=1;
  236.                         receive_sta=1;
  237.                      break;
  238.                  
  239.                    case 0xea: //进入待机                                       
  240.                                              IAP_CONTR=0x20;                  
  241.                    case 0xD2: //亮度
  242.                             ABL=~ABL;
  243.                                         receive_sta=1;                                
  244.                                     break;
  245.                   case 0xD3: //模式切换
  246.                             k3=0;
  247.                                         delay2(20000);
  248.                                         k3=1;
  249.                                         delay2(10000);
  250.                                         k3=0;
  251.                                         delay2(20000);
  252.                                         k3=1;
  253.                                         receive_sta=1;                                
  254.                                     break;
  255.                    default:break;//蓝牙的连接成功或者断开连接消息
  256.                 }
  257.         }

  258. }
复制代码



评分

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

查看全部评分

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

使用道具 举报

沙发
ID:422885 发表于 2019-1-1 10:23 | 只看该作者
感谢分享,如果有电路图就更完美
回复

使用道具 举报

板凳
ID:518116 发表于 2019-4-21 23:36 | 只看该作者
感谢分享,拿来借鉴借鉴
回复

使用道具 举报

地板
ID:146045 发表于 2024-9-2 20:05 | 只看该作者
感谢分享,资料不错
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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