51 紅外遙控RGB流水燈基礎版--帶源碼原理圖,分享給有興趣的你們。大家一起發(fā)動腦筋改出炫酷的亮燈方式,歡迎你們改好后帶程序回來交流哈哈哈
請看附件源代碼,歡迎回帖互相探討哈
電路原理圖如下:
SCH.png (597.17 KB, 下載次數(shù): 52)
下載附件
2020-3-15 18:05 上傳
1f190b80b09fcb59520fc93a9a2552c.png (68.88 KB, 下載次數(shù): 36)
下載附件
2020-3-15 18:05 上傳
單片機源程序如下:
- #include<STC89C5xRC_RDP.h>
- //為復雜類型定義別名
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit IRIN=P4^3;
- unsigned char table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff};///
- unsigned char table2[]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};////高位到低位逐個熄滅////
- unsigned char table3[]={0x80,0xc0,0xe0,0xf0};/////高4位依次點亮每個燈P1口//////
- unsigned char table4[]={0x01,0x03,0x07,0x0f};//////低4位依次點亮每個燈P1口///
- unsigned char table5[]={0x81,0xc3,0xe7,0xff};//////高和低位往中間亮P1口,逐個點亮/////
- unsigned char table6[]={0xff,0xfe,0xfc,0xf8,0xe0,0xc0,0x80,0x00};/////低位到高位逐個熄滅/////
- unsigned char table7[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};/////依次高位到低位每個點燈亮/////
- unsigned char table8[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};/////依次低位到高位每個點燈亮/////
- unsigned char table9[]={0xff,0x7e,0x3c,0x18,0x00};//////高和低位往中間亮P1口,逐個熄滅/////
- //uchar num;//全局按鍵變量
- uchar a;
- uint k;
- uchar IrValue[6];
- uchar Time;
- //延時
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=80;y>0;y--);//////Y=110///////
- }
- /*******************************************************************************
- * 函 數(shù) 名 : delay
- * 函數(shù)功能 : 延時函數(shù),i=1時,大約延時10us
- *******************************************************************************/
- void delay_r(uchar i)
- {
- while(i--);
- }
- /*******************************************************************************
- /*
- interrupt 6===INT2--P4.3
- interrupt 7===INT3--P4.2
- */
- void LSall()
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- P3=table7[i];
- P2=0x00;
- P1=0x00;
- P0=0x00;
- delay(50);
- }
- for(i=0;i<8;i++)
- { P3=0xff;
- P2=table7[i];
- P1=0x00;
- P0=0x00;
- delay(50);
- }
- for(i=0;i<8;i++)
- { P3=0xff;
- P2=0xff;
- P1=table7[i];
- P0=0x00;
- delay(50);
- }
- for(i=0;i<8;i++)
- { P3=0xff;
- P2=0xff;
- P1=0xff;
- P0=table7[i];
- delay(50);
-
-
- /////////P2,P1,P0,高位到低位依次每個點亮,循環(huán)2次/////////////
- for(i=0;i<8;i++)
- {
- P0=table8[i];
- P1=0x00;
- P2=0x00;
- P3=0x00;
- delay(50);
- }
- for(i=0;i<8;i++)
- { P0=0xff;
- P1=table8[i];
- P2=0x00;
- P3=0x00;
- delay(50);
- }
- for(i=0;i<8;i++)
- { P0=0xff;
- P1=0xff;
- P2=table8[i];
- P3=0x00;
- delay(50);
- }
- for(i=0;i<8;i++)
- { P0=0xff;
- P1=0xff;
- P2=0xff;
- P3=table8[i];
- delay(50);
- }
- /////////P0,P1,P2,低位到高位依次每個點亮,循環(huán)/////////////
- for(i=0;i<8;i++)
- {
- P0=table8[i];
- P1=0x00;
- P2=0x00;
- delay(50);
- }
- for(i=0;i<8;i++)
- {
- P0=0xff;
- P1=table8[i];
- P2=0x00;
- delay(50);
- }
- for(i=0;i<8;i++)
- {
- P0=0xff;
- P1=0xff;
- P2=table8[i];
- delay(50);
- }
- for(i=0;i<8;i++)
- {
- P0=0xff;
- P1=0xff;
- P2=0xff;
- P3=table8[i];
- delay(50);
- }
- }
- ////////////////兩側(cè)往下流,先左后右流//////////
- for(i=0;i<8;i++)
- {
- P0=table8[i];
- P1=0x00;
- P2=0x00;
- P3=0x00;
- delay(200);
- }
- for(i=0;i<4;i++)
- {
- P0=0xff;
- P1=table4[i];
- P2=0x00;
- delay(200);
- }
- for(i=0;i<4;i++)
- {
- P1=0x0f;
- delay(200);
- }
- for(i=0;i<8;i++)
- {
- P3=table7[i];
- P2=0x00;
- P1=0x00;
- P0=0x00;
- delay(200);
- }
- for(i=0;i<8;i++)
- { P3=0xff;
- P2=table7[i];
- P1=0x00;
- P0=0x00;
- delay(200);
- }
- for(i=0;i<4;i++)
- { P3=0xff;
- P2=0xff;
- P1=table3[i];
- delay(200);
- }
- for(i=0;i<4;i++)
- {
- P1=0xf0;
- delay(200);
- }
- /////////////////兩側(cè)循環(huán)閃爍4次///////////
- for(a=0;a<=3;a++)/////循環(huán)4次////
- {
- for(i=0;i<8;i++)
- {
- P3=0xff;
- P2=0xf0;
- P1=0x0f;
- P0=0x00;
- delay(100);
- }
- for(i=0;i<8;i++)
- {
- P0=0xff;
- P1=0xf0;
- P2=0x0f;
- P3=0x00;
- delay(100);
- }
- }
- ////////////////兩側(cè)往下逐個點亮////////
- for(a=0;a<=1;a++) //////////循環(huán)次數(shù)(a<=1)4次///////
- {
- for(i=0;i<8;i++)
- {
- P0=table8[i];
- P3=table7[i];
- P1=0x00;
- P2=0x00;
- delay(200);
- }
- for(i=0;i<4;i++)
- { P3=0xff;
- P0=0xff;
- P2=0xff;
- P1=table5[i];
- delay(200);
- }
- }
- /////////////////兩側(cè)往下逐個熄滅/////////
- for(a=0;a<=1;a++) //////////循環(huán)次數(shù)(a<=1)2次///////
- {
- for(i=0;i<8;i++)
- {
- P3=table2[i];
- P0=table6[i];
- P2=0xff;
- P1=0xff;
- delay(100);
- }
- for(i=0;i<5;i++)
- { P3=0x00;
- P2=0x00;
- P1=table9[i];
- P0=0x00;
- delay(100);
- }
- }
-
- ///////////////P0,P1,P2,全亮逐個熄滅/////////****//
- for(i=0;i<8;i++)
- {
- P0=table6[i];
- P1=0xff;
- P2=0xff;
- P3=0xff;
- delay(100);
- }
- for(i=0;i<8;i++)
- {
- P0=0x00;
- P1=table6[i];
- P2=0xff;
- P3=0xff;
- delay(100);
- }
- for(i=0;i<8;i++)
- {
- P0=0x00;
- P1=0x00;
- P2=table6[i];
- P3=0xff;
- delay(100);
- }
- ///////////////P2,P1,P0,全亮逐個熄滅/////////
- for(i=0;i<8;i++)
- {
- P3=table2[i];
- P2=0xff;
- P1=0xff;
- P0=0xff;
- delay(100);
- }
- for(i=0;i<8;i++)
- { P3=0x00;
- P2=table2[i];
- P1=0xff;
- P0=0xff;
- delay(100);
- }
- for(i=0;i<8;i++)
- { P3=0x00;
- P2=0x00;
- P1=table2[i];
- P0=0xff;
- delay(100);
- }
- for(i=0;i<8;i++)
- { P3=0x00;
- P2=0x00;
- P1=0x00;
- P0=table2[i];
- delay(100);
- }
- }
- void LS6()
- {
- uchar i;
- ////////////////兩側(cè)往下流,先左后右流//////////
- for(i=0;i<8;i++){P0=table8[i];P1=0x00;P2=0x00;P3=0x00;delay(200);}
- for(i=0;i<4;i++){P0=0xff;P1=table4[i];P2=0x00;delay(200);}
- for(i=0;i<4;i++){P1=0x0f;delay(200);}
- for(i=0;i<8;i++){P3=table7[i];P2=0x00;P1=0x00;P0=0x00;delay(200);}
- for(i=0;i<8;i++){P3=0xff;P2=table7[i];P1=0x00;P0=0x00;delay(200);}
- for(i=0;i<4;i++){P3=0xff;P2=0xff;P1=table3[i];delay(200);}
- for(i=0;i<4;i++){P1=0xf0;delay(200);}
- }
- void LS5()
- {
- uchar i;
- /////////////////兩側(cè)循環(huán)閃爍4次///////////
- for(a=0;a<=3;a++)/////循環(huán)4次////
- {for(i=0;i<8;i++){P3=0xff;P2=0xf0;P1=0x0f;P0=0x00;delay(100);}
- for(i=0;i<8;i++){P0=0xff;P1=0xf0;P2=0x0f;P3=0x00;delay(100);}
- }}
- void LS4()
- {
- uchar i;
- ///////////////P0,P1,P2,全亮逐個熄滅/////////****//
- for(i=0;i<8;i++){P0=table6[i];P1=0xff;P2=0xff;P3=0xff;delay(100);}
- for(i=0;i<8;i++){P0=0x00;P1=table6[i];P2=0xff;P3=0xff;delay(100);}
- for(i=0;i<8;i++){P0=0x00;P1=0x00;P2=table6[i];P3=0xff;delay(100);}
- ///////////////P2,P1,P0,全亮逐個熄滅/////////
- for(i=0;i<8;i++){P3=table2[i];P2=0xff;P1=0xff;P0=0xff;delay(100);}
- for(i=0;i<8;i++){P3=0x00;P2=table2[i];P1=0xff;P0=0xff;delay(100);}
- for(i=0;i<8;i++){P3=0x00;P2=0x00;P1=table2[i];P0=0xff;delay(100);}
- for(i=0;i<8;i++){P3=0x00;P2=0x00;P1=0x00;P0=table2[i];delay(100);}
- }
- void LS3()
- {
- uchar i;
- ///////////////兩側(cè)往下逐個點亮////////
- for(a=0;a<=1;a++) //////////循環(huán)次數(shù)(a<=1)4次///////
- {for(i=0;i<8;i++){P0=table8[i];P3=table7[i];P1=0x00;P2=0x00;delay(200);}
- for(i=0;i<4;i++){ P3=0xff;P0=0xff;P2=0xff;P1=table5[i];delay(200);}}
- /////////////////兩側(cè)往下逐個熄滅/////////
- for(a=0;a<=1;a++) //////////循環(huán)次數(shù)(a<=1)2次///////
- {for(i=0;i<8;i++){P3=table2[i];P0=table6[i];P2=0xff;P1=0xff;delay(100);}
- for(i=0;i<5;i++){ P3=0x00;P2=0x00;P1=table9[i];P0=0x00;delay(100);}}}
- void LS2()
- {
- ////////////////兩側(cè)往下逐個點亮////////
- uchar i;
- for(a=0;a<=1;a++) //////////循環(huán)次數(shù)(a<=1)4次///////
- { for(i=0;i<8;i++){P0=table8[i];P3=table7[i];P1=0x00;P2=0x00;delay(200);}
- for(i=0;i<4;i++){ P3=0xff;P0=0xff;P2=0xff;P1=table5[i];delay(200);}}
- }
- void LS1()
- {
- uchar i;
- for(i=0;i<8;i++)
- {P3=table7[i];P2=0x00;P1=0x00;P0=0x00;delay(50);}
- for(i=0;i<8;i++)
- {P3=0xff;P2=table7[i];P1=0x00;P0=0x00;delay(50);}
- for(i=0;i<8;i++)
- {P3=0xff;P2=0xff;P1=table7[i];P0=0x00;delay(50);}
- for(i=0;i<8;i++)
- {P3=0xff;P2=0xff;P1=0xff;P0=table7[i];delay(50);}
- }
- void IrInit()
- {
- IT2=1;//下降沿觸發(fā)
- EX2=1;//打開中斷0允許
- EA=1; //打開總中斷
- IRIN=1;//初始化端口
- }
- /*******************************************************************************
- * 函數(shù)名 : ReadIr()
- * 函數(shù)功能 : 讀取紅外數(shù)值的中斷函數(shù)
- * 輸入 : 無
- * 輸出 : 無
- *******************************************************************************/
- void ReadIr() interrupt 6
- {
- uchar j,k;
- uint err;
- Time=0;
- delay_r(700); //7ms
- if(IRIN==0) //確認是否真的接收到正確的信號
- {
-
- err=1000; //1000*10us=10ms,超過說明接收到錯誤的信號
- /*當兩個條件都為真是循環(huán),如果有一個條件為假的時候跳出循環(huán),免得程序出錯的時
- 侯,程序死在這里*/
- while((IRIN==0)&&(err>0)) //等待前面9ms的低電平過去
- {
- delay_r(1);
- err--;
- }
- if(IRIN==1) //如果正確等到9ms低電平
- {
- err=500;
- while((IRIN==1)&&(err>0)) //等待4.5ms的起始高電平過去
- {
- delay_r(1);
- err--;
- }
- for(k=0;k<4;k++) //共有4組數(shù)據(jù)
- {
- for(j=0;j<8;j++) //接收一組數(shù)據(jù)
- {
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
51 IR_RGB.rar
(646.68 KB, 下載次數(shù): 65)
2020-3-15 18:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|