功 能: 单片机STC15F104E和WS2811控制LED灯珠变化并带有掉电保持的功
能(内部EEPROM)。三个按键作用:Mode为模式选择,每按一次会
转换为另一种样式显示,并保持此样式一直循环,当按下Sel键时所
有的样式循环显示,Speed为速度调节(共八级速度)。显示样式有
:整体七彩跳变,七彩渐变,流水,流星,单点变化,后向前流水。
单片机源程序如下:
- #include<IAP15F105W.h>
- #include<intrins.h>
- typedef unsigned char uchar;
- typedef unsigned int uint;
- #define CMD_IDLE 0 //Stand-By
- #define CMD_READ 1 //Byte-Read
- #define CMD_PROGRAM 2 //Byte-Program
- #define CMD_ERASE 3 //Sector-Erase
- /*Define ISP/IAP/EEPROM operation const for IAP_CONTR*/
- #define ENABLE_IAP 0x82 //if SYSCLK<20MHz
- #define IAP_ADDRESS 0x1200 //EEPROM开始地址
- #define NUMBER 500 //级联个数
- sbit DAI =P3^4; //信号端口
- uint speed=10; //速度
- uchar T1_Flag,DMX512_Data_Byte;
- uchar T_R[5]={50,0,0,50,0};
- uchar T_G[5]={0,50,0,50,0};
- uchar T_B[5]={0,0,50,50,0};
- //函数申明
- //void send_24bits(uchar dat1,uchar dat2,uchar dat3);
- //void rst();
- void delay1();
- void time0_init();
- void send_2821_star();
- void send_2821_byte(uchar cod8);
- void send_2821_24bits(uchar dat1,uchar dat2,uchar dat3);
- void send_2821_end();
- void Send_Data(uchar dat);
- /******************************************
- 函 数 名:void delay(uint z)
- 功 能:延时函数
- ******************************************/
- void Delay(uint x)
- {
- uint y;
- for(;x>0;x--)
- {
- for(y=0;y<6000;y++);
- }
- }
- /******************************************
- 函数名: void Delay4us()
- void Delay88us()
- 功 能:向2821发送数据电平位延时
- ********************************************/
- void Delay4us() //@33.1776MHz
- {
- unsigned char i;
- _nop_();
- _nop_();
- _nop_();
- i = 23;//29//24//23//22
- while (--i);
- }
- void Delay_4us() //@33.1776MHz
- {
- unsigned char i;
- _nop_();
- _nop_();
- _nop_();
- i = 28;//29//24//23//22
- while (--i);
- }
- void Delay88us() //@33.1776MHz
- {
- unsigned char i,j;
- _nop_();
- _nop_();
- i = 3;
- j = 211;
- do
- {
- while (--j);
- } while (--i);
- }
复制代码
以上代码的Keil工程文件下载:
代码.7z
(20.79 KB, 下载次数: 104)
|