从电路图设计,到PCB外形定样,再3D打印外壳支架。初步写了几种变化样式。
心形灯编程IO口示意图
Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
3d文件.STL
单片机源程序如下:
- #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附件下载:
项目1 LED花样彩灯(全套制作资料).rar
(1.45 MB, 下载次数: 33)
|