RGB愛心燈仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
E%WU$AVGEX3%6{OQMHB6D2F.png (46.26 KB, 下載次數: 74)
下載附件
2020-11-22 17:00 上傳
WL$)H20~M[2M_N7~$B]BGOO.png (79.96 KB, 下載次數: 82)
下載附件
2020-11-22 17:00 上傳
單片機源程序如下(代碼注釋很詳細):
- #include<reg52.h>//52頭文件
- #include<intrins.h>//循環左右移 函數頭文件
- #define uint unsigned int
- #define uchar unsigned char
- sbit wei1=P3^4;
- sbit wei2=P3^5;
- sbit wei3=P3^6;
- sbit wei4=P3^7;
- uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//從低位往高位移一個燈
- uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//從高位往低位移一個燈
- uchar code table2[]={0xfe,0xfa,0xf8,0xf0,0xe0,0xa0,0x80,0x00};//從低位到高位逐步全部點亮
- uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//從高位到低位逐步全部點亮
- uchar code table4[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//從低位到高位逐步全部熄滅
- uchar code table5[]={0x80,0xa0,0xe0,0xf0,0xf8,0xfa,0xfe,0xff};//從高位到低位逐步全部熄滅
- uchar code table6[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//從低位到高位,滅一個燈移動
- uchar code table7[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//從高位到低位,滅一個燈移動
- uchar i;
- uint t;
- /**********************************/
- void delay(uint z) //延時函數
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=314;y>0;y--);
- }
- /************************************/
- void delay1ms(uchar a)//延時1ms
- {
- uchar x;
- while(a--)
- {
- for(x=0;x<150;x++);
- }
- }
- /**********************************/
- void delay0ms(uint z) //延時函數
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=10;y>0;y--);
- }
- /*************************************************
- //////////////////////////////////////////////////
- *************************************************/
- void deng0()//四組綠燈順時針逐步點亮
- { P0=0xff;P1=0xff;
- wei1=0;wei2=0;wei3=0;wei4=0;//打開所有位
- for(i=0;i<8;i++)
- {
- P2=table3[i];
- delay(40);
- }
- wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
- P2=0xff;
- }
- /////////////////////////////////////////
- void deng0_1()//四組紅燈順時針逐步點亮
- { P1=0xff;P2=0xff;
- wei1=0;wei2=0;wei3=0;wei4=0;//打開所有位
- for(i=0;i<8;i++)
- {
- P0=table3[i];
- delay(40);
- }
- wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
- P0=0xff;
- }
- /////////////////////////////////////////////
- void deng0_2()//四組藍燈順時針逐步點亮
- { P0=0xff;P2=0xff;
- wei1=0;wei2=0;wei3=0;wei4=0;//打開所有位
- for(i=0;i<8;i++)
- {
- P1=table3[i];
- delay(40);
- }
- wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
- P1=0xff;
- }
- ///////////////////////////////////////
- void deng1()//四組洋紅燈順時針逐步熄滅
- {
-
- wei1=0;wei2=0;wei3=0;wei4=0;//打開所有位
- P2=0xff;
- for(i=0;i<8;i++)
- {
- P0=table5[i];
- P1=table5[i];
- delay(40);
- }
- wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
- P0=0xff;P1=0xff;
-
- }
- /*****************************************************************************/
- void deng3()//紅、黃、綠、青、藍、洋紅、白、紅,順時針流動(循環左移,即高位向低位移)
- {
- uchar a,b,c;//綠、紅、藍
- a=0x8d;
- b=0x38;
- c=0xe1;
- /////////////
- wei1=0;wei2=0;wei3=0;wei4=0;//打開位
- P2=a;
- P0=b;
- P1=c;
- for(i=0;i<8;i++)
- {
- a=_cror_(a,1);//循環左移
- b=_cror_(b,1);//循環左移
- c=_cror_(c,1);//循環左移
- delay(100);//延時
- P2=a;
- P0=b;
- P1=c;
- }
- P0=0xff;P1=0xff;P2=0xff;
- wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
- }
- //////////////////////////////////////////
- void deng3_1()//藍燈亮的時候,四個洋紅燈轉一下
- {
- wei1=0;wei2=0;wei3=0;wei4=0;//打開位
- P1=0x00;P0=0xff;//藍燈全部亮
- for(i=0;i<8;i++)
- {
- P0=table1[i];
- delay(50);
- }
-
- P0=0xff;P2=0xff;
- wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
- }
- ///////////////////////////////////////////////
- void deng3_2()//綠燈亮的時候,四個紅燈轉一下
- {
- wei1=0;wei2=0;wei3=0;wei4=0;//打開位
- P1=0xff;P2=0x00;//綠燈全部亮
- for(i=0;i<8;i++)
- {
- P0=table0[i];
- delay(50);
- }
- P0=0xff;P2=0xff;
- wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
- }
- //////////////////////////////////////////////
- void deng3_3()//紅燈亮的時候,四個洋紅燈轉一下
- {
- wei1=0;wei2=0;wei3=0;wei4=0;//打開位
- P0=0x00;P2=0xff;//紅燈全部亮
- for(i=0;i<8;i++)
- {
- P1=table1[i];
- delay(50);
- }
- P0=0xff;P2=0xff;
- wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
- }
- ///////////////////////////////////////////////
- void deng3_4()//紫燈亮的時候,四個紅燈轉一下
- {
- wei1=0;wei2=0;wei3=0;wei4=0;//打開位
- P0=0x00;P1=0x00;P0=0xff;//紫燈全部亮
- for(i=0;i<8;i++)
- {
- P0=table6[i];
- delay(50);
- }
- P0=0xff;P1=0xff;
- wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
- }
- void deng3_5()//白燈亮的時候,四個青燈轉一下
- {
- wei1=0;wei2=0;wei3=0;wei4=0;//打開位
- P1=0x00;P0=0x00;P2=0x00;//白燈全部亮
- for(i=0;i<8;i++)
- {
- P0=table7[i];
- delay(50);
- }
- P0=0xff;P1=0xff;P2=0xff;
- wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
- }
- /************************************************************
- *************************************************************/
- void rled6_1()//紅,下面模塊的小函數
- {
- for(i=0;i<8;i++)
- {
- P0=table1[i];
- delay(25);
- }
- P0=0xff;
- }
- /*******************************************/
- void rled7_1()//綠,下面模塊的小函數
- {
- for(i=0;i<8;i++)
- {
- P2=table1[i];
- delay(25);
- }
- P2=0xff;
- }
- /***********************************/
- void rled8_1()//藍,下面模塊的小函數
- {
- for(i=0;i<8;i++)
- {
- P1=table0[i];
- delay(25);
- }
- P1=0xff;
- }
- /****************************************
- *****************************************/
- void deng6()//一個紅燈,順時針轉動
- {
- wei3=1;wei2=1;wei1=1;
- wei4=0;//打開左上位
- rled6_1();//一個紅燈順時針轉
- wei4=1;
- /////////////////////////////
- wei3=0;//打開右上位
- rled6_1();//一個紅燈順時針轉
- wei3=1;
- /////////////////////////////
- wei2=0;//打開右下位
- rled6_1();//一個紅燈順時針轉
- wei2=1;
- ////////////////////////////
- wei1=0;//打開左下位
- rled6_1();//一個紅燈順時針轉
- wei1=1;
- }
- /************************************/
- void deng7()//一個綠燈,順時針轉動
- {
- wei4=0;//打開左上位
- rled7_1();//一個紅燈順時針轉
- wei4=1;
- /////////////////////////////
- wei3=0;//打開右上位
- rled7_1();//一個紅燈順時針轉
- wei3=1;
- /////////////////////////////
- wei2=0;//打開右下位
- rled7_1();//一個紅燈順時針轉
- wei2=1;
- ////////////////////////////
- wei1=0;//打開左下位
- rled7_1();//一個紅燈順時針轉
- wei1=1;
- }
- /*************************************/
- void deng8()//一個藍燈,順時針轉動
- {
- /////////////////////////////
- wei2=0;//打開右下位
- rled8_1();//一個紅燈順時針轉
- wei2=1;
- /////////////////////////////
- wei3=0;//打開右上位
- rled8_1();//一個紅燈順時針轉
- wei3=1;
- /////////////////////
- wei4=0;//打開左上位
- rled8_1();//一個紅燈順時針轉
- wei4=1;
- ////////////////////////////
- wei1=0;//打開左下位
- rled8_1();//一個紅燈順時針轉
- wei1=1;
- }
- /********************************************/
- void deng9()//一位顯示黃、綠、青、藍、洋紅、紅、白,多彩流水,然后再顯示下一位
- {
- wei3=0;//打開右上位選
- wei1=0;//打開左下位選
- /****************/ //黃色流水(紅色全亮,綠色逐步點亮)
- P1=0xff;P2=0xff;
- P0=0x00;//紅色全亮
- for(i=0;i<8;i++)
- {
-
- P2=table3[i];
- delay(30);
- }
-
- /****************/ //綠色流水(綠色全亮,紅色逐步熄滅)
- P2=0x00;//綠色全亮
- for(i=0;i<8;i++ )
- {
- P0=table5[i];
- delay(30);
- }
- P0=0xff;//紅色全滅
- /****************/ //青色流水(綠色全亮,藍色逐步點亮)
- P2=0x00;//綠色全亮
- for(i=0;i<8;i++)
- {
- P1=table3[i];
- delay(30);
- }
- /**************/ //藍色流水(藍色全亮,綠色逐步熄滅)
- P1=0x00;//藍色全亮,
- for(i=0;i<8;i++)
- {
- P2=table5[i];
- delay(30);
- }
- P2=0xff;//綠色滅
- /**************/ //洋紅色流水(藍色全亮,紅色逐步點亮)
- P1=0x00;//藍色全亮
- for(i=0;i<8;i++)
- {
- P0=table3[i];
- delay(30);
- }
- wei3=1;
- wei1=1;
- //P0=0xff;P1=0xff;P2=0xff;
- wei4=0;//打開右上位選
- wei2=0;//打開左下位選
- /****************/ //黃色流水(紅色全亮,綠色逐步點亮)
- P1=0xff;P2=0xff;
- P0=0x00;//紅色全亮
- for(i=0;i<8;i++)
- {
-
- P2=table3[i];
- delay(30);
- }
-
- /****************/ //綠色流水(綠色全亮,紅色逐步熄滅)
- P2=0x00;//綠色全亮
- for(i=0;i<8;i++ )
- {
- P0=table5[i];
- delay(30);
- }
- P0=0xff;//紅色全滅
- /****************/ //青色流水(綠色全亮,藍色逐步點亮)
- P2=0x00;//綠色全亮
- for(i=0;i<8;i++)
- {
- P1=table3[i];
- delay(30);
- }
- /**************/ //藍色流水(藍色全亮,綠色逐步熄滅)
- P1=0x00;//藍色全亮,
- for(i=0;i<8;i++)
- {
- P2=table5[i];
- delay(30);
- }
- P2=0xff;//綠色滅
- /**************/ //洋紅色流水(藍色全亮,紅色逐步點亮)
- P1=0x00;//藍色全亮
- for(i=0;i<8;i++)
- {
- P0=table3[i];
- delay(30);
- }
- wei4=1;
- wei2=1;
- P0=0xff;P1=0xff;P2=0xff;
- }
- /********************************************/
- void huxideng()//呼吸燈
- {
- wei4=0;wei3=0;wei2=0;wei1=0;
- for(i=0;i<150;i++)//紅燈緩滅,綠燈緩亮
- {
- P0=0xff;
- P2=0x00;
- delay0ms(i);
- P0=0x00;
- P2=0xff;
- delay0ms(150-i);
- }
- P0=0xff;
- for(i=0;i<150;i++)//綠燈綬滅,藍燈緩亮
- {
- P2=0xff;
- P1=0x00;
- delay0ms(i);
- P2=0x00;
- P1=0xff;
- delay0ms(150-i);
- }
- P2=0xff;
- for(i=0;i<150;i++)//藍燈緩滅,紅燈緩亮
- {
- P1=0xff;
- P0=0x00;
- delay0ms(i);
- P1=0x00;
- P0=0xff;
- delay0ms(150-i);
- }
- P1=0xff;P2=0xff;P0=0xff;
- wei4=1;wei3=1;wei2=1;wei1=1;
- }
- /**************************************************
- * 主函數在此 *
- ***************************************************/
- void main()
- {
-
- while(1)
- {
-
-
- deng6();//一個紅燈順時針轉動
- deng0_1();//四組紅燈順時針逐步點亮
- deng0_2();//四組藍燈順時針逐步點亮
- deng9();//一位顯示黃、綠、青、藍、洋紅、紅、白,多彩流水,然后再顯示下一位
- deng3_2();//綠燈亮的時候,四個紅燈轉一下
- deng0_2();//四組藍燈順時針逐步點亮
- deng1();//四組綠燈順時針逐步熄滅
- deng8();//一個藍燈,順時針轉動
- deng3_4();//洋紅燈亮的時候,四個紅燈轉一下
- deng9();//一位顯示黃、綠、青、藍、洋紅、紅、白,多彩流水,然后再顯示下一位
- deng7();//一個綠燈,順時針轉動
- deng0_2();//四組藍燈順時針逐步點亮
- deng3(); //紅、黃、綠、青、藍、洋紅、白、紅,順時針流動(循環左移,即高位向低位移)
- deng0();//四組綠燈順時針逐步點亮
- deng3_1();//藍燈亮的時候,四個洋紅燈轉一下
-
- deng3_3();//紅燈亮的時候,四個洋紅燈轉一下
-
- deng3_5();//白燈亮的時候,四個青燈轉一下
- huxideng();//呼吸燈
- deng1();//四組綠燈順時針逐步熄滅
-
- }
- }
復制代碼
全部資料51hei下載地址:
rgb愛心燈.zip
(35.58 KB, 下載次數: 66)
2020-11-22 17:09 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|