×
单片机 > 单片机程序设计 > 详情

ws2812b彩灯带室内自动系统单片机源程序

发布时间:2024-05-20 发布时间:
|

调光基于12c5a60s2程序:

/*********************************************************************************************************


*********************************************************************************************************/

#include

//#include

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define FSCLK 11059200

#define Number 29


unsigned char Receive,i;

unsigned int n,flag;

unsigned char Receive_table[15];

#define RELOAD_COUNT 0xFA

sbit LED0=P0^2;

sbit DAI = P3^2;

sbit k1=P2^0;

sbit k2=P2^1;

sbit k3=P2^2;

sbit k4=P2^3;

sbit k5=P2^4;

sbit k6=P2^5;

sbit k7=P2^6;

sbit k8=P2^7;

sbit p13=P1^3;

uint speed = 0;

uchar flag_clr = 0;

uchar Table_R[8]={ 0, 0,255, 0,255,255,255,0};

uchar Table_G[8]={255, 0, 0,255, 0,255,255,0};

uchar Table_B[8]={ 0,255, 0,255,255, 0,255,0};

uchar code Table[256] = {

0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,

20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,

40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,

60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,

80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,

100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,

120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,

140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,

160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,

180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,

200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,

220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,

240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255

};

unsigned char CCAPOH,ID;

float res0,res1;


/*********************************************************************************************************

** 函数功能 :延时函数

** 函数说明 :利用软件延时,占用CPU,经调试最小单位大约为1ms

** 入口参数 :time:需要延时的时间,单位ms

** 出口参数 :无

*********************************************************************************************************/

void Delay_ms(uint time)

{

uint i,j;

for(i = 0;i < time;i ++)

for(j = 0;j < 930;j ++);

}


void ms_delay(unsigned int t)

{

unsigned int i,j;

for(i=t;i>0;i--)

for(j=110;j>0;j--);

}


void us_delay(unsigned int t)

{

while(t--);

}


void rst()

{

uint s;

DAI=0;

for(s=0;s<1000;s++);

{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}

}

void Delay_Fash (uint x) // 1ms Delay

{

uint t;

t = 0;

while (x--)

{

for (t = 0; t < 5000; t++);

}

}

void Delay(uint x) // 1ms Delay

{

uint t;

t = 0;

while (x--)

{

for (t = 0; t < 330; t++);

}

}

/*uart初始化*/

void Uart_Init()//使用独立的波特率发生器(STC12C560S2或带有独立波特率发生器//、//的单片机均可)

{

SCON=0x50; //设置为串行口以方式1工作,8位异步通讯,允许接收中断。

PCON=0x80; //SMOD波特率选择位为1,SMOD=1.

BRT=0xfa;//波特率9600 256-晶振频率/波特率x16=BRT

AUXR=0x11; //T0、T1不12分频,速度是89C51的12倍,启动独立波特率//发生器,每个时钟计数一次

//设置串口1的波特率发生器为独立波特率发生器,

// AUXR1=0x80; //切换到P1口

ES=1; //开启串口中断

EA=1; //开启总中断

}

void Send_Uart(unsigned char value){//向WIFI模块发送数据

ES=0;

TI=0;

SBUF=value;//发送完后TI变1

while(!TI);

TI=0;

ES=1;

}

/*给esp8266发送指令*/

void ESP8266_Set(unsigned char *puf)

{

while(*puf){

Send_Uart(*puf);

us_delay(5);

puf++;

}

us_delay(5);

Send_Uart('r');

us_delay(5);

Send_Uart('n');

ms_delay(20000);

}

void code0()

{

DAI=1;

_nop_();

DAI=0;

_nop_(); _nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();

}

void code1()

{

DAI=1;

_nop_(); _nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();


DAI=0;

_nop_();_nop_(); _nop_(); _nop_();

}

//打开灯

void bright()

{ unsigned int j;

for(j=0;j<720;j++)code1();

}

//关闭灯函数

void dark()

{ unsigned int j;

for(j=0;j<720;j++)code0();

}

void send_2811_24bits(uchar dat1,uchar dat2,uchar dat3)

{

uchar a;

// uchar b;

for(a=0;a<8;a++) //dat1

{

if(dat1&0x80)

{

code1();

}

else

{

code0();

}

dat1=dat1<<1;

}

for(a=0;a<8;a++) //dat2

{

if(dat2&0x80)

{

code1();

}

else

{

code0();

}

dat2=dat2<<1;

}

for(a=0;a<8;a++) //dat3

{

if(dat3&0x80)

{

code1();

}

else

{

[1] [2] [3] [4]
ws2812b彩灯室内自动系统单片机

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式