Altium Designer畫的51單片機貼片心形燈原理圖和PCB圖如下:(51hei附件中可下載工程文件)
51hei.png (178.76 KB, 下載次數: 51)
下載附件
2022-5-15 04:29 上傳
51hei.png (62.23 KB, 下載次數: 44)
下載附件
2022-5-15 04:28 上傳
單色心形燈CAD亞克力外殼設計圖
51hei.png (2.79 KB, 下載次數: 42)
下載附件
2022-5-15 04:29 上傳
單片機源程序如下:
- /*******************************************************************/
- /* 作品:單色心形流水燈
- /* 主控采用STC89c52RC單片機 晶振12M
- /*******************************************************************/
-
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED從低位往高位移
- uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED從高位往低位移
- uchar code table2[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//LED從1個亮到8個都點亮(從低位往高位)
- uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//LED從1個亮到8個都點亮(從高位往低位)
- uchar code table4[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//LED從8個全亮到一個都不亮(從低位往高位)
- uchar code table5[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//LED從8個全亮到一個都不亮(從高位往低位)
- uchar code table6[]={0xfe,0xfc,0xfa,0xf6,0xee,0xde,0xbe,0x7e};//LED從低位往高位移(最低位始終為0)
- uchar code table7[]={0x7f,0x3f,0x5f,0x6f,0x77,0x7b,0x7d,0x7e};//LED從高位往低位移(最高位始終為0)
- uchar code Tab1[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xFF};//暗中左移 向下
- uchar code Tab2[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF};//暗中右移 向上
- uchar code Tab3[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00};//亮中左移 向下
- uchar code Tab4[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x00};//亮中右移 向上
- uchar code Tab11[]={0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0xff};//暗中左移 向下
- uchar code Tab22[]={0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0xff};
- uchar code Tab33[]={0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};
- uchar code Tab44[]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
- uchar code Tab55[]={0x08,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff};
- uchar code Tab5[]={0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xff};
- uchar code Tab6[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xff};
- uchar code Tab7[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
- uchar code Tab8[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- uchar i,j,flag=200; //定義循環變量
- uint tt=70,temp,cycle=350,xunhuan; //定義時間指數
- void shansuo();
- void xl();
- void delay()
- {
- uchar m,n;
- for(m=0;m<flag;m++)
- for(n=0;n<250;n++);
-
- }
- void delay1(uint z) //延時函數
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void delay2(uint x) //延時函數,要足夠快,否則燈會閃爍,而不是慢慢變化。
- {
- uint i;
- for(i=x;i>0;i--);
-
- }
- void liushuideng1()
- {
- for(xunhuan=0;xunhuan<2;xunhuan++)
- {
- for(temp=0;temp<cycle;temp++) //由暗到亮(燈的亮度是亮和滅保持時間的平均值)
- {
- P0=P1=P2=P3=0x00;
- delay2(temp); //延時逐漸加大,led=0(亮)保持的時間越來越長,亮度隨之變大。
- P0=P1=P2=P3=0xff;
- delay2(cycle-temp); //延時減短,led=1(滅)保持的時間越來越短,結合上一句,整體亮度變大
- }
-
- for(temp=cycle;temp>0;temp--)//由亮到暗
- {
- P0=P1=P2=P3=0x00;
- delay2(temp); //延時逐漸減短,led=0(亮)保持的時間越來越短,亮度隨之變小。
- P0=P1=P2=P3=0xff;
- delay2(cycle-temp); //延時增長,led=1(滅)保持的時間越來越長,結合上一句,整體亮度變小
- }
- }
- }
- void liushuideng2()
- {
- P0=P1=P2=P3=0x00;
- delay1(600);
- for(xunhuan=0;xunhuan<2;xunhuan++)
- {
- for(temp=0;temp<cycle;temp++) //由暗到亮(燈的亮度是亮和滅保持時間的平均值)
- {
- P0=P1=P2=P3=0x55;
- delay2(temp); //延時逐漸加大,led=0(亮)保持的時間越來越長,亮度隨之變大。
- P0=P1=P2=P3=0xaa;
- delay2(cycle-temp); //延時減短,led=1(滅)保持的時間越來越短,結合上一句,整體亮度變大
- }
- delay1(600);
- for(temp=cycle;temp>0;temp--)//由亮到暗
- {
- P0=P1=P2=P3=0xaa;
- delay2(temp); //延時逐漸減短,led=0(亮)保持的時間越來越短,亮度隨之變小。
- P0=P1=P2=P3=0x55;
- delay2(cycle-temp); //延時增長,led=1(滅)保持的時間越來越長,結合上一句,整體亮度變小
- }
-
- delay1(600);
- }
-
- }
- void liushuideng3()
- {
- delay1(1000);
- for(xunhuan=0;xunhuan<2;xunhuan++)
- {
- for(temp=0;temp<cycle;temp++) //由暗到亮(燈的亮度是亮和滅保持時間的平均值)
- {
- P0=P1=P2=P3=0x0f;
- delay2(temp); //延時逐漸加大,led=0(亮)保持的時間越來越長,亮度隨之變大。
- P0=P1=P2=P3=0xf0;
- delay2(cycle-temp); //延時減短,led=1(滅)保持的時間越來越短,結合上一句,整體亮度變大
- }
- delay1(600);
- for(temp=cycle;temp>0;temp--)//由亮到暗
- {
- P0=P1=P2=P3=0xf0;
- delay2(temp); //延時逐漸減短,led=0(亮)保持的時間越來越短,亮度隨之變小。
- P0=P1=P2=P3=0x0f;
- delay2(cycle-temp); //延時增長,led=1(滅)保持的時間越來越長,結合上一句,整體亮度變小
- }
- delay1(600);
-
- }
-
- }
- void liushuideng4()
- {
- for(xunhuan=0;xunhuan<1;xunhuan++)
- {
- for(temp=0;temp<cycle;temp++) //由暗到亮(燈的亮度是亮和滅保持時間的平均值)
- {
- P0=P2=0x00;
- delay2(temp); //延時逐漸加大,led=0(亮)保持的時間越來越長,亮度隨之變大。
- P0=P2=0xff;
- delay2(cycle-temp); //延時減短,led=1(滅)保持的時間越來越短,結合上一句,整體亮度變大
- }
-
- for(temp=cycle;temp>0;temp--)//由亮到暗
- {
- P0=P2=0x00;
- delay2(temp); //延時逐漸減短,led=0(亮)保持的時間越來越短,亮度隨之變小。
- P0=P2=0xff;
- delay2(cycle-temp); //延時增長,led=1(滅)保持的時間越來越長,結合上一句,整體亮度變小
- }
- for(temp=0;temp<cycle;temp++) //由暗到亮(燈的亮度是亮和滅保持時間的平均值)
- {
- P1=P3=0x00;
- delay2(temp); //延時逐漸加大,led=0(亮)保持的時間越來越長,亮度隨之變大。
- P1=P3=0xff;
- delay2(cycle-temp); //延時減短,led=1(滅)保持的時間越來越短,結合上一句,整體亮度變大
- }
-
- for(temp=cycle;temp>0;temp--)//由亮到暗
- {
- P1=P3=0x00;
- delay2(temp); //延時逐漸減短,led=0(亮)保持的時間越來越短,亮度隨之變小。
- P1=P3=0xff;
- delay2(cycle-temp); //延時增長,led=1(滅)保持的時間越來越長,結合上一句,整體亮度變小
- }
- }
- }
- void liushuideng5()
- {
- for(xunhuan=0;xunhuan<1;xunhuan++)
- {
- for(temp=0;temp<cycle;temp++) //由暗到亮(燈的亮度是亮和滅保持時間的平均值)
- {
- P1=P0=0x00;
- delay2(temp); //延時逐漸加大,led=0(亮)保持的時間越來越長,亮度隨之變大。
- P1=P0=0xff;
- delay2(cycle-temp); //延時減短,led=1(滅)保持的時間越來越短,結合上一句,整體亮度變大
- }
-
- for(temp=cycle;temp>0;temp--)//由亮到暗
- {
- P1=P0=0x00;
- delay2(temp); //延時逐漸減短,led=0(亮)保持的時間越來越短,亮度隨之變小。
- P1=P0=0xff;
- delay2(cycle-temp); //延時增長,led=1(滅)保持的時間越來越長,結合上一句,整體亮度變小
- }
- for(temp=0;temp<cycle;temp++) //由暗到亮(燈的亮度是亮和滅保持時間的平均值)
- {
- P3=P2=0x00;
- delay2(temp); //延時逐漸加大,led=0(亮)保持的時間越來越長,亮度隨之變大。
- P3=P2=0xff;
- delay2(cycle-temp); //延時減短,led=1(滅)保持的時間越來越短,結合上一句,整體亮度變大
- }
-
- for(temp=cycle;temp>0;temp--)//由亮到暗
- {
- P3=P2=0x00;
- delay2(temp); //延時逐漸減短,led=0(亮)保持的時間越來越短,亮度隨之變小。
- P3=P2=0xff;
- delay2(cycle-temp); //延時增長,led=1(滅)保持的時間越來越長,結合上一句,整體亮度變小
- }
- }
- }
- void liushuideng6()
- {
- for(xunhuan=0;xunhuan<1;xunhuan++)
- {
- for(temp=0;temp<cycle;temp++) //由暗到亮(燈的亮度是亮和滅保持時間的平均值)
- {
- P0=P3=0x00;
- delay2(temp); //延時逐漸加大,led=0(亮)保持的時間越來越長,亮度隨之變大。
- P0=P3=0xff;
- delay2(cycle-temp); //延時減短,led=1(滅)保持的時間越來越短,結合上一句,整體亮度變大
- }
-
- for(temp=cycle;temp>0;temp--)//由亮到暗
- {
- P0=P3=0x00;
- delay2(temp); //延時逐漸減短,led=0(亮)保持的時間越來越短,亮度隨之變小。
- P0=P3=0xff;
- delay2(cycle-temp); //延時增長,led=1(滅)保持的時間越來越長,結合上一句,整體亮度變小
- }
- for(temp=0;temp<cycle;temp++) //由暗到亮(燈的亮度是亮和滅保持時間的平均值)
- {
- P1=P2=0x00;
- delay2(temp); //延時逐漸加大,led=0(亮)保持的時間越來越長,亮度隨之變大。
- P1=P2=0xff;
- delay2(cycle-temp); //延時減短,led=1(滅)保持的時間越來越短,結合上一句,整體亮度變大
- }
-
- for(temp=cycle;temp>0;temp--)//由亮到暗
- {
- P1=P2=0x00;
- delay2(temp); //延時逐漸減短,led=0(亮)保持的時間越來越短,亮度隨之變小。
- P1=P2=0xff;
- delay2(cycle-temp); //延時增長,led=1(滅)保持的時間越來越長,結合上一句,整體亮度變小
- }
- }
- }
- void disp0() //狀態0 所有LED閃爍3次
- {
- for(i=0;i<3;i++)
- {
- P0=0x00; P2=0x00; P3=0x00; P1=0x00;
- delay1(300);
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
51hei.png (3.08 KB, 下載次數: 51)
下載附件
2022-5-15 04:30 上傳
所有資料51hei附件下載:
單色心形流水燈工程項目.zip
(949.92 KB, 下載次數: 59)
2022-5-14 20:51 上傳
點擊文件名下載附件
程序pcb說明 下載積分: 黑幣 -5
|