/***************************************************
WS2811:
“0码” T0H:350ns
T0L:800ns
“1码” T1H:700ns
T1L:600ns
RES:>50us
N79E825
CLOCK:20MHZ 时钟周期50ns 机器周期200ns
****************************************************/
#include<reg52.h>
#include<intrins.h>
#define nop _nop_();
#define uchar unsigned char
#define uint unsigned int
#define speed 5 //刷新数据时间变量
#define size 65 //数据显示个数变量
sbit DIO=P0^0; //数据输出引脚声明
uint t;
uchar bdata LED_DAT; //可位操作的数据发送暂存变量声明
sbit bit0=LED_DAT^0; //被发送的数据各位定义
sbit bit1=LED_DAT^1;
sbit bit2=LED_DAT^2;
sbit bit3=LED_DAT^3;
sbit bit4=LED_DAT^4;
sbit bit5=LED_DAT^5;
sbit bit6=LED_DAT^6;
sbit bit7=LED_DAT^7;
uchar RR,GG,BB; //RGB灰度值全局变量声明
//1ms延时函数============================================
void delay_1ms(uint z)
{
uint c;
uchar a,b;
for(c=z;c>0;c--)
for(b=133;b>0;b--)
for(a=6;a>0;a--);
}
//=============低速模式数码BIT0(高电平时间:350ns 低电平时间:800ns )=============//
void h_dat0()
{
DIO=1;
nop; nop;
DIO=0;
nop; nop; nop; //nop;
//nop; nop; nop; nop;
}
//=============低速模式数码BIT1(高电平时间:700ns 低电平时间:600ns )=============//
void h_dat1()
{
DIO=1;
nop; nop; nop; //nop;
//nop; nop; nop; nop;
DIO=0;
nop; nop;
}
//RGB显示控制程序=============================================
void Reset(void)
{
DIO=0;
delay_1ms(1);
}
//===================发送RGB灰度数据===================
void send_single_data() //数据格式:G7~G0~R7~R0~B7~B0
{
LED_DAT=GG;
if(bit7==1) h_dat1(); else h_dat0();
if(bit6==1) h_dat1(); else h_dat0();
if(bit5==1) h_dat1(); else h_dat0();
if(bit4==1) h_dat1(); else h_dat0();
if(bit3==1) h_dat1(); else h_dat0();
if(bit2==1) h_dat1(); else h_dat0();
if(bit1==1) h_dat1(); else h_dat0();
if(bit0==1) h_dat1(); else h_dat0();
LED_DAT=RR;
if(bit7==1) h_dat1(); else h_dat0();
if(bit6==1) h_dat1(); else h_dat0();
if(bit5==1) h_dat1(); else h_dat0();
if(bit4==1) h_dat1(); else h_dat0();
if(bit3==1) h_dat1(); else h_dat0();
if(bit2==1) h_dat1(); else h_dat0();
if(bit1==1) h_dat1(); else h_dat0();
if(bit0==1) h_dat1(); else h_dat0();
LED_DAT=BB;
if(bit7==1) h_dat1(); else h_dat0();
if(bit6==1) h_dat1(); else h_dat0();
if(bit5==1) h_dat1(); else h_dat0();
if(bit4==1) h_dat1(); else h_dat0();
if(bit3==1) h_dat1(); else h_dat0();
if(bit2==1) h_dat1(); else h_dat0();
if(bit1==1) h_dat1(); else h_dat0();
if(bit0==1) h_dat1(); else h_dat0();
}
void send_string_data()
{
uchar i;
for(i=0;i<size;i++)
{
send_single_data();
}
Reset();
}
void delay_50us(uchar z)
{
unsigned char a,b;
for(b=19;b>0;b--)
for(a=z;a>0;a--);
}
void RGB_open() //RGB闪烁
{
RR=255; GG=0; BB=0;
send_string_data();
for(t=speed;t>0;t--)
delay_1ms(100);
delay_1ms(400);
RR=0; GG=255; BB=0;
send_string_data();
for(t=speed;t>0;t--)
delay_1ms(100);
delay_1ms(400);
RR=0; GG=0; BB=255;
send_string_data();
for(t=speed;t>0;t--)
delay_1ms(100);
delay_1ms(400);
RR=255; GG=255; BB=0;
send_string_data();
for(t=speed;t>0;t--)
delay_1ms(100);
delay_1ms(400);
RR=255; GG=0; BB=255;
send_string_data();
for(t=speed;t>0;t--)
delay_1ms(100);
delay_1ms(400);
RR=0; GG=255; BB=255;
send_string_data();
for(t=speed;t>0;t--)
delay_1ms(100);
delay_1ms(400);
RR=255; GG=255; BB=255;
send_string_data();
for(t=speed;t>0;t--)
delay_1ms(100);
delay_1ms(400);
}
//=======================RGB呼吸灯=======================//
//void RGB_PWM()
//{
// uint i;
// RR=0;
// for(i=0; i<256; i++) //红色渐亮
// {
// send_string_data(); //发送RGB灰度数据
// Reset();
// //delay_1ms(1);
// delay_50us(3);
// RR++;
// GG=0; BB=0;
// }
// RR=255; GG=0; BB=0;
// for(i=0; i<256; i++) //红色渐灭
// {
// send_string_data(); //发送RGB灰度数据
// Reset();
// //delay_1ms(1);
// delay_50us(3);
// RR--;
// GG=0; BB=0;
// }
// RR=0; GG=0; BB=0;
///****************************************************/
//
// for(i=0; i<256; i++) //绿色渐亮
// {
// send_string_data(); //发送RGB灰度数据
// Reset();
// //delay_1ms(1);
// delay_50us(4);
// GG++;
// RR=0;BB=0;
// }
// RR=0; GG=255; BB=0;
// for(i=0; i<256; i++) //绿色渐灭
// {
// send_string_data(); //发送RGB灰度数据
// Reset();
// //delay_1ms(1);
// delay_50us(4);
// GG--;
// RR=0;BB=0;
// }
// RR=0; GG=0; BB=0;
///****************************************************/
// for(i=0; i<256; i++) //蓝色渐亮
// {
// send_string_data(); //发送RGB灰度数据
// Reset();
// //delay_1ms(1);
// delay_50us(4);
// BB++;
// RR=0; GG=0;
// }
// RR=0; GG=0; BB=255;
// for(i=0; i<256; i++) //蓝色渐灭
// {
// send_string_data(); //发送RGB灰度数据
// Reset();
// //delay_1ms(1);
// delay_50us(3);
// BB--;
// RR=0; GG=0;
// }
// RR=0; GG=0; BB=0;
///****************************************************/
// for(i=0; i<256; i++) //白色渐亮
// {
// send_string_data(); //发送RGB灰度数据
// Reset();
// //delay_1ms(1);
// delay_50us(4);
// RR++;
// GG++;
// BB++;
// }
// RR=255; GG=255; BB=255;
// for(i=0; i<256; i++) //白色渐灭
// {
// send_string_data(); //发送RGB灰度数据
// Reset();
// RR--;
// GG--;
// BB--;
// }
// RR=0; GG=0; BB=0;
//}
void main()
{
delay_1ms(50); //延时100毫秒等待所有MCU复位
while(1)
{
RGB_open();
//RGB_PWM();
}
}
//void RGB_R(void)
//{
// RR=255; GG=0; BB=0;
// send_string_data();
// for(t=speed;t>0;t--)
// delay_1ms(100);
//}
//
//void RGB_G(void)
//{
// RR=0; GG=255; BB=0;
// send_string_data();
// for(t=speed;t>0;t--)
// delay_1ms(100);
//}
//
//void RGB_B(void)
//{
// RR=0; GG=0; BB=255;
// send_string_data();
// for(t=speed;t>0;t--)
// delay_1ms(100);
//}
//
//void main(void)
//{
// delay_1ms(30);
// while(1)
// {
// RGB_R();
// delay_1ms(1000);
// RGB_G();
// delay_1ms(1000);
// RGB_B();
// delay_1ms(1000);
// }
//}
评论0