從電路圖設計,到PCB外形定樣,再3D打印外殼支架。初步寫了幾種變化樣式。
心形燈編程IO口示意圖
51hei.png (36.83 KB, 下載次數: 52)
下載附件
2022-3-30 02:32 上傳
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
51hei.png (50.67 KB, 下載次數: 50)
下載附件
2022-3-30 02:32 上傳
51hei.png (50.36 KB, 下載次數: 65)
下載附件
2022-3-30 02:33 上傳
3d文件.STL
51hei.png (3.3 KB, 下載次數: 53)
下載附件
2022-3-30 02:34 上傳
單片機源程序如下:
- #include <STC15F2K60S2.H>
- //#include <STC15F.H>
- #include <intrins.H>
- #define SYS_CLK 11059200L //系統晶振頻率
- #define uchar unsigned char
- #define uint unsigned int
- /*********PCB引腳分布**********/
- // P54
- //P0 P2
- // P1 P4
- // P55
- #define LEDP1 P0 //把PO控制左上8個
- #define LEDP2 P1 //把P1控制左下8個
- #define LEDP3 P2 //把P2控制右上8個
- #define LEDP4 P4 //把P4控制右下8個
- sbit L1= P5^4; //上中心點LED
- sbit L2=P5^5; //下中心點LED
- //========================================================================
- // 描述: 延遲10微秒*tus.
- // 參數: none.
- // 返回: none.
- //========================================================================
- void delayus(uchar tus) //@11.0592
- {
- uchar i;
- i = tus;
- do
- {
- //_nop_();_nop_();_nop_();_nop_();_nop_();
- //_nop_();_nop_();_nop_();_nop_();_nop_();
- _nop_();_nop_();_nop_();_nop_();_nop_();
- } while (--i);
- }
- //========================================================================
- // 描述: 延遲1毫秒.
- // 參數: none.
- // 返回: none.
- //========================================================================
- void delay1ms() //1毫秒@sys_clk
- {
- uchar ms = 1;
- uint i;
- do{
- i = SYS_CLK / 13000;
- while(--i) ; //14T per loop
- }while(--ms);
- }
- //========================================================================
- // 描述: 延遲指定毫秒.
- // 參數: 延遲時間(1-65535).
- // 返回: none.
- //========================================================================
- void delay(uint time)
- {
- if(time < 1)
- {
- time = 1;
- }
- do { delay1ms();} while (--time);
- }
- /*****************************************************************************
- 函 數 名 : IO_Init()
- 功能描述 : IO口初始化
- *****************************************************************************/
- void IO_Init()
- {
- P0M0 = 0x00;
- P0M1 = 0x00;
- P1M0 = 0x00;
- P1M1 = 0x00;
- P2M0 = 0xC0;
- P2M1 = 0x00;
- P3M0 = 0x00;
- P3M1 = 0x00;
- P4M0 = 0x00;
- P4M1 = 0x00;
- P5M0 = 0x00;
- P5M1 = 0x00;
- }
- /*********34LED 控制子函數*********/
- //34LED全滅
- void LED_ALL_OFF()
- {
- L1=1;L2=1;
- LEDP1=0xFF;LEDP2=0xFF;
- LEDP3=0xFF;LEDP4=0xFF;
- }
- //34LED全亮
- void LED_ALL_ON()
- {
- L1=0;L2=0;
- LEDP1=0x00;LEDP2=0x00;
- LEDP3=0x00;LEDP4=0x00;
- }
- //奇數偶數燈交替閃n次
- void Flash_odd_even(uchar n)
- {
- uchar i;
- for(i=0;i<n;i++)
- {
- L1=0;L2=0;
- LEDP1=0x55;
- LEDP2=0x55;
- LEDP3=0x55;
- LEDP4=0x55;
- delay(100);
- L1=1;L2=1;
- LEDP1=0xAA;
- LEDP2=0xAA;
- LEDP3=0xAA;
- LEDP4=0xAA;
- delay(100);
- }
- }
- //效果全部燈快閃n次
- void Flash_all(uchar n)
- {
- uchar i;
- for(i=0;i<n;i++)
- {
- L1=0;L2=0;
- LEDP1=0x00;
- LEDP2=0x00;
- LEDP3=0x0;
- LEDP4=0x0;
- delay(60);
- L1=1;L2=1;
- LEDP1=0xFF;
- LEDP2=0xFF;
- LEDP3=0xFF;
- LEDP4=0xFF;
- delay(40);
- }
- }
- //四組燈交替閃n次
- void Flash_LED_Bus(uchar speed,uchar n)
- {
- uchar i;
- for(i=0;i<n;i++)
- {
- L1=0;L2=1;
- LEDP1=0x00;
- LEDP2=0xFF;
- LEDP3=0xFF;
- LEDP4=0x00;
- delay(speed);
- L2=0;L1=1;
- LEDP1=0xFF;
- LEDP2=0x00;
- LEDP3=0x00;
- LEDP4=0xFF;
- delay(speed);
- }
- LED_ALL_OFF();delay(200);
- for(i=0;i<n;i++)
- {
- L1=1;L2=0;
- LEDP1=0xFF;
- LEDP2=0x00;
- LEDP3=0xFF;
- LEDP4=0x00;
- delay(speed);
- L1=0;L2=1;
- LEDP1=0x00;
- LEDP2=0xFF;
- LEDP3=0x00;
- LEDP4=0xFF;
- delay(speed);
- }
- LED_ALL_OFF();delay(200);
- L1=0;L2=0;
- for(i=0;i<n;i++)
- {
- LEDP1=0x00;
- LEDP2=0x00;
- LEDP3=0xFF;
- LEDP4=0xFF;
- delay(speed);
-
- LEDP1=0xFF;
- LEDP2=0xFF;
- LEDP3=0x00;
- LEDP4=0x00;
- delay(speed);
- }
- LED_ALL_OFF();
- }
- //34LED逐個點亮
- void One_by_one(uint speed)
- {
- uchar i,temp;
- L1=0;delay(speed);
- L1=1;//delay(speed);
- for(temp=0x01,i=0;i<8;i++)
- {
- LEDP1=~temp;
- delay(speed);
- LEDP1=0xFF;
- //delay(speed);
- temp=temp<<1;
- }
- for(temp=0x01,i=0;i<8;i++)
- {
- LEDP2=~temp;
- delay(speed);
- LEDP2=0xFF;
- //delay(speed);
- temp=temp<<1;
- }
- L2=0;delay(speed);
- L2=1;//delay(speed);
- for(temp=0x80,i=0;i<8;i++)
- {
- LEDP4=~temp;
- delay(speed);
- LEDP4=0xFF;
- //delay(speed);
- temp=temp>>1;
- }
- for(temp=0x80,i=0;i<8;i++)
- {
- LEDP3=~temp;
- delay(speed);
- LEDP3=0xFF;
- //delay(speed);
- temp=temp>>1;
- }
- }
- //上中點向側逐漸點亮(帶漸亮效果)
- void Middle_to_side()
- {
- uchar i,j;
- L1=L2=1;
- LEDP1=LEDP2=LEDP3=LEDP4=0xFF;
- for(i=0;i<200;i++)
- {
- for(j=0;j<20;j++)
- {
- L1=1;
- delayus(200-i);
- L1=0;
- delayus(i+1);
- }
- }delay(10);
- for(i=0;i<8;i++)
- {
- LEDP1=LEDP1<<1;LEDP3=LEDP3<<1;
- delay(200);
- }
- for(i=0;i<8;i++)
- {
- LEDP2=LEDP2<<1;LEDP4=LEDP4<<1;
- delay(200);
- }
- L2=0;
- delay(200);
-
- for(i=0;i<200;i++)
- {
- for(j=0;j<100;j++)
- {
- LED_ALL_ON();
- delayus(200-i);
- LED_ALL_OFF();
- delayus(i+1);
- }
- }
- }
- //兩側朝中間逐列點亮
- void Side_to_middle(uint speed)
- {
- uchar i,temp1,temp2;
-
- temp1=0x7F;temp2=0xFE;
- for(i=0;i<8;i++)
- {
- LEDP1=temp1;LEDP3=temp1;
- LEDP2=temp2;LEDP4=temp2;
- delay(speed);
- temp1>>=1;
- temp2<<=1;
- }
- L1=0;L2=0;delay(speed);
- LED_ALL_OFF();
- }
- // 效果:所有LED燈挨個點亮,每次多一顆燈亮,等所有LED全
- // 亮后,每組I/O口倒循環熄滅再挨個點亮
- void One_ON_one_OFF(uint speed)
- {
- uchar i,temp;
- //遞增
- L1=0;delay(speed);
- for(temp=0xFE,i=0;i<8;i++)
- {
- LEDP1=temp;
- delay(speed);
- temp=temp<<1;
- }
- for(temp=0xFE,i=0;i<8;i++)
- {
- LEDP2=temp;
- delay(speed);
- temp=temp<<1;
- }
- L2=0;delay(speed);
- for(temp=0x7F,i=0;i<8;i++)
- {
- LEDP4=temp;
- delay(speed);
- temp=temp>>1;
- }
- for(temp=0x7F,i=0;i<8;i++)
- {
- LEDP3=temp;
- delay(speed);
- temp=temp>>1;
- }
- //遞減
- L1=1;delay(speed);
- for(temp=0x01,i=0;i<8;i++)
- {
- LEDP1=temp;
- delay(speed);
- temp=temp<<1;
- temp=temp+1;
- }
- for(temp=0x01,i=0;i<8;i++)
- {
- LEDP2=temp;
- delay(speed);
- temp=temp<<1;
- temp=temp+1;
- }
- L2=1;delay(speed);
- for(temp=0x80,i=0;i<8;i++)
- {
- LEDP4=temp;
- delay(speed);
- temp=temp>>1;
- temp=temp+0x80;
- }
- for(temp=0x80,i=0;i<8;i++)
- {
- LEDP3=temp;
- delay(speed);
- temp=temp>>1;
- temp=temp+0x80;
- }
- }
- //四組燈一起單燈流水(2)上下至中間往復
- void Water_all_1()
- {
- uchar i,j,temp1,temp2;
- LED_ALL_OFF();
- for(j=0;j<6;j++)
- {
- temp1=0x01;
- temp2=0x80;
- L1=0;L2=0;delay(50);L1=1;L2=1;
- for(i=0;i<8;i++)
- {
- LEDP1=~temp1;
- LEDP2=~temp2;
- LEDP3=~temp1;
- LEDP4=~temp2;
- delay(50);
- temp1<<=1;
- temp2>>=1;
- }
- temp1=0x80;
- temp2=0x01;
- for(i=0;i<8;i++)
- {
- LEDP1=~temp1;
- LEDP2=~temp2;
- LEDP3=~temp1;
- LEDP4=~temp2;
- delay(50);
- temp1>>=1;
- temp2<<=1;
- }
- LEDP1=0xFF;
- LEDP2=0xFF;
- LEDP3=0xFF;
- LEDP4=0xFF;
- }
- }
- //四組燈一起單燈流水(3)左右搖晃,先左
- void Water_all_2(uchar speed)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
51hei.png (3.81 KB, 下載次數: 56)
下載附件
2022-3-30 02:35 上傳
51hei附件下載:
項目1 LED花樣彩燈(全套制作資料).rar
(1.45 MB, 下載次數: 33)
2022-3-30 01:44 上傳
點擊文件名下載附件
PCB、程序、stl文件 下載積分: 黑幣 -5
|