|
光立方制作教程源碼!!!
0.png (50.98 KB, 下載次數(shù): 22)
下載附件
2018-12-22 01:31 上傳
FFT頻譜測試源碼
MT10-單色app程序源碼
MT10-單色上位機恒流
wifi通訊程序源碼
上位機通訊測試源碼
雙色光立方貪吃蛇程序
呼吸燈程序源碼
按鍵程序測試源碼
點亮光立方程序測試源碼
紅外遙控程序源碼
脫機動畫程序源碼
藍(lán)牙APP通訊源碼
語音APP萌萌游戲
全部資料51hei下載地址:
通用程序源碼.zip
(17.13 MB, 下載次數(shù): 66)
2018-12-21 09:53 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
單片機源程序如下:
- #include <STC12C5A60S2.H>//包含頭文件 STC12C5A60S2.H
- //STC單片機的頭文件可以使用STC-ISP下載軟件添加到Keil編譯軟件中使用(參考STC官方下程序下載軟件使用手冊載)
- #define uchar unsigned char
- #define uint unsigned int
- uchar data buffer[8]; //數(shù)組
- uchar display[8][8];
- sbit RR=P3^6;//紅
- sbit GG=P2^2;//綠
- sbit BB=P2^4;//藍(lán)
- sbit k1=P0^4;//播放、暫停
- sbit k2=P0^5;//音量減
- sbit k3=P0^6;//音量加
- sbit ABL=P4^3;//亮度
- uchar data rxcnt=0;
- char data bb,cheng,yanse; //sa串口中斷,bb延時變量,
- unsigned char cube_frame[73];//一幀cube_frame數(shù)據(jù)73字節(jié),當(dāng)然這里的數(shù)組替換為你程序中的相應(yīng)數(shù)組
- unsigned char byte_cnt=0;//接受到的字節(jié)數(shù)
- unsigned char cmd_type=0;//接受到命令類型,可能是動畫下載,進入音頻模式等..
- bit receive_sta=0; //接受狀態(tài),表示數(shù)據(jù)是否接受完成
- void disp_cube(unsigned char DZ_data[64]);
- void timer0init(void)
- {
- TMOD=0X12;
- EX1=0;
- ET1=1;//定時器1開中斷
- EA=1;
- IPH|=0X01;
- PX0=1;
- IT0=1;
- P0M0=0xf8; //P0口開漏輸出
- P0M1=0xf0;
- P3M0=0x00; //P3準(zhǔn)雙向輸出
- P3M1=0X00;
- P2M0=0x00; //P2準(zhǔn)雙向輸出
- P2M1=0X00;
-
- }
- /*************************************************************************************************************************/
- void delay(int i)// 延時 bb速度控制
- {
- char b;
- while (i--)
- {
- b=bb;
- while(b--);
- }
- }
- void delay2(uint t)
- {
- int i;
- while(t--)
- for(i=0;i<5;i++);
- }
- /*************************************************************************************************************************/
- /******************************************74HC595數(shù)據(jù)發(fā)送函數(shù)************************************************************/
- /*************************************************************************************************************************/
- sbit SH_CP = P3^4; //SCK
- sbit ST_CP = P3^3;//RCK
- sbit DS = P3^5;//SER
- sbit SH_CP2 = P2^6; //SCK2
- sbit ST_CP2 = P2^5;//RCK2
- sbit DS2 = P2^3;//SER2
- void initial595() //列掃描74HC595初始化
- {
- SH_CP = 0;
- ST_CP = 0;
- DS = 0;
- }
- void initial5952() //行掃描74HC595初始化
- {
- SH_CP2 = 0;
- ST_CP2 = 0;
- DS2 = 0;
- }
- /*--------------- 發(fā)送數(shù)據(jù) ---------------*/
- void send_data(unsigned char d)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- DS = d&0x80; //發(fā)送最高位
- SH_CP = 1;
- SH_CP = 0; //移位寄存器移位
- d = d<<1; //數(shù)據(jù)移位f
- }
- }
- void xiansi1() //列掃描74HC595數(shù)據(jù)輸出
- {
- send_data(buffer[0]); //u8
- send_data(buffer[1]); //u7
- send_data(buffer[2]); //u6
- send_data(buffer[3]); //u5
- send_data(buffer[4]); //u4
- send_data(buffer[5]); //u3
- send_data(buffer[6]); //u2
- send_data(buffer[7]); //u1
- }
- void InitUart()
- {
- EADC=0; //AD中斷關(guān)
- //sa=1;
- // BRT獨立波特率發(fā)生器的溢出率= SYSclk / ( 256 - BRT )
- //11.0592M晶振 57600波特率
- PCON &= 0x7f; //波特率不倍速
- SCON = 0x50; //8位數(shù)據(jù),可變波特率
- BRT = 0xF3; //設(shè)定獨立波特率發(fā)生器重裝值 0xFA
- AUXR |= 0x04; //獨立波特率發(fā)生器時鐘為Fosc,即1T
- AUXR |= 0x01; //串口1選擇獨立波特率發(fā)生器為波特率發(fā)生器
- AUXR |= 0x10; //啟動獨立波特率發(fā)生器
- ES = 1; //充許串口1中斷
- }
- //***********************************************************************************************
- void disp_cube(unsigned char DZ_data[64])
- { unsigned char i;
- for(i=0;i<64;i++)
- {
- display[0][i]=DZ_data[i];//這里的代碼自己實現(xiàn)
- }
- }
- void shangwei()
- {
- while(1)
- {
- if(receive_sta)//接受完成
- {
- receive_sta=0;//清除接受成功標(biāo)志,這步很重要
- }
- disp_cube(cube_frame+9);//如果接受命令時就時時刷新原來的點陣數(shù)據(jù)
- }
- }
- void main()
- { InitUart();
- initial595(); //初始化調(diào)用
- initial5952(); //初始化調(diào)用
- timer0init(); //初始化調(diào)用
- TR1=1;//啟動定時器1
- BB=0;
- bb=3;
- ABL=0;
-
- shangwei();
-
-
- }
- /*********************************************************************************************************************************************/
- void print1() interrupt 3 //定時器1中斷函數(shù)
- {
- uchar i;
- static uchar layer=0;
- for (i=0;i<8;i++)
- {
- buffer[i]=~display[layer][i];
- }
- xiansi1();
-
- cheng=0x01<<layer;
- DS2 = ~cheng&0x01; //發(fā)送最低位
- SH_CP2 = 1;
- SH_CP2 = 0;
- ST_CP=1;
- ST_CP=0; //移位寄存器移位
- ST_CP2=1;
- ST_CP2=0;
- if (layer<7)
- layer++;
- else
- layer=0;
- TH1=0xf0;
- TL1=0xf0;
- delay(2);
-
- // TR1=1;//啟動定時器1
- }
- /***************************************************************************************************************************************/
- /*******************************************************************************************************************************************/
- void UartIntterupt() interrupt 4
- {
- unsigned char res=0;
- if(RI==1)//進入到接受中斷
- {
- RI=0;
- if(receive_sta==1)return;//如果接受完成啦就直接退出,等待main函數(shù)將數(shù)據(jù)給顯示完
- res=SBUF;
- if(byte_cnt==0)cmd_type=res;//第一個字節(jié)為命令類型
- switch(cmd_type)
- {
- case 0xf5: //動畫下載
- cube_frame[byte_cnt]=res;
- byte_cnt++;
- if(byte_cnt==73)
- { byte_cnt=0;
- receive_sta=1;//表示接受完成
- }
- break;
-
- case 0xf1: //動畫音量增加
- k3=0;
- delay2(50000);
- delay2(50000);
- delay2(50000);
- delay2(50000);
- k3=1;
- receive_sta=1;
- break;
- case 0xf0: //動畫音量減小
- k2=0;
- delay2(50000);
- delay2(50000);
- delay2(50000);
- delay2(50000);
- k2=1;
- receive_sta=1;
- break;
- case 0xef: //上一曲
- k2=0;
- delay2(20000);
- k2=1;
- receive_sta=1;
- break;
- case 0xee: //下一曲
- k3=0;
- delay2(20000);
- k3=1;
- receive_sta=1;
- break;
- case 0xed: //eq音樂類型,搖滾,爵士,流行
- k1=0;
- delay2(20000);
- k1=1;
- receive_sta=1;
- break;
- case 0xec: //暫停與播放
- k1=0;
- delay2(20000);
- k1=1;
- receive_sta=1;
- break;
-
- case 0xea: //進入待機
- IAP_CONTR=0x20;
- case 0xD2: //亮度
- ABL=~ABL;
- receive_sta=1;
- break;
- case 0xD3: //模式切換
- k3=0;
- delay2(20000);
- k3=1;
- delay2(10000);
- k3=0;
- delay2(20000);
- k3=1;
- receive_sta=1;
- break;
- default:break;//藍(lán)牙的連接成功或者斷開連接消息
- }
- }
- }
復(fù)制代碼
|
評分
-
查看全部評分
|