/*********台湾应广单片机编程第5季PMS150G***********/
/*****************QQ774145445**********************/
/****************WS2812B流水灯*********************/
/******************20200809************************/
/**************************************************/
//____斐波那契时钟_____
// 2 |_1_| |
//________|_1_| 5 |
// 3 | |
//____________|________|
//斐波那契数列11235
//红色:小时
//绿色:分钟
//蓝色:小时分钟
//白色:忽略
//分钟和*5
/**************************************************/
#include "extern.h"
chuan bit pa.0; //串行线
//k1 bit pa.1;
void fuwei(); //复位
void yi(); //1码
void ling(); //0码
void yanshi(); //延时
void xianshi(); //显示
void xianshi1();
void shijianfj(); //时间分解
//void anjian(); //按键
byte hong; //红
byte lv; //绿
byte lan; //蓝
byte liangdu =0x0f; //亮度
byte shi;
byte fen;
byte miao;
byte fbnq_1; //fbnq_1=1//0白/1红/2绿/3蓝
byte fbnq_2; //fbnq_1=1
byte fbnq_3; //fbnq_1=2
byte fbnq_4; //fbnq_1=3
byte fbnq_5; //fbnq_1=5
byte a1,a2;
void FPPA0 (void)
{
.ADJUST_IC SYSCLK=IHRC/4 //4M
//byte b1,b2;
$ chuan out,low; //设置为输出,低
shi =12;
fen =10;
miao =0;
shijianfj();
xianshi();
while (1)
{
shijianfj();
xianshi();
yanshi();
}
}
/**************************************************/
void fuwei()
{
//chuan =1;
//nop;
chuan =0;
.delay 1500;//1200 //2400
//chuan =1;
}
/**************************************************/
void yi()
{
chuan =0;
nop;
chuan =1;
nop;
nop;
nop;
nop;
chuan =0;
nop;
}
/**************************************************/
void ling()
{
chuan =0;
nop;
chuan =1;
//nop;
chuan =0;
nop;
nop;
nop;
nop;
}
/**************************************************/
void xianshi()
{
hong =liangdu;
lv =liangdu;
lan =liangdu;
fuwei();
a1 =fbnq_1;
xianshi1();
a1 =fbnq_2;
xianshi1();
a1 =fbnq_3;
xianshi1();
a1 =fbnq_4;
xianshi1();
a1 =fbnq_5;
xianshi1();
}
/**************************************************/
void xianshi1() //高位先发,按照 GRB 的顺序发送数据//0白/1红/2绿/3蓝
{
if((a1==0)||(a1==2))
{
if(lv.7) {yi();} else{ling();}
if(lv.6) {yi();} else{ling();}
if(lv.5) {yi();} else{ling();}
if(lv.4) {yi();} else{ling();}
if(lv.3) {yi();} else{ling();}
if(lv.2) {yi();} else{ling();}
if(lv.1) {yi();} else{ling();}
if(lv.0) {yi();} else{ling();}
}
else
{
a2 =8;
while(a2)
{
a2--;
ling();
}
}
if((a1==0)||(a1==1))
{
if(hong.7) {yi();} else{ling();}
if(hong.6) {yi();} else{ling();}
if(hong.5) {yi();} else{ling();}
if(hong.4) {yi();} else{ling();}
if(hong.3) {yi();} else{ling();}
if(hong.2) {yi();} else{ling();}
if(hong.1) {yi();} else{ling();}
if(hong.0) {yi();} else{ling();}
}
else
{
a2 =8;
while(a2)
{
a2--;
ling();
}
}
if((a1==0)||(a1==3))
{
if(lan.7) {yi();} else{ling();}
if(lan.6) {yi();} else{ling();}
if(lan.5) {yi();} else{ling();}
if(lan.4) {yi();} else{ling();}
if(lan.3) {yi();} else{ling();}
if(lan.2) {yi();} else{ling();}
if(lan.1) {yi();} else{ling();}
if(lan.0) {yi();} else{ling();}
}
else
{
a2 =8;
while(a2)
{
a2--;
ling();
}
}
}
/**************************************************/
void shijianfj() //时间分解/红色:小时/绿色:分钟/蓝色:小时分钟/白色:忽略
{
byte shi_1;
byte fen_1;
shi_1 =shi;
fen_1 =fen;
fbnq_1 =0; //1//0白/1红/2绿/3蓝
fbnq_2 =0; //1
fbnq_3 =0; //2
fbnq_4 =0; //3
fbnq_5 =0; //5
if(shi_1 >=5) //提取出小时颜色
{
shi_1 -=5;
fbnq_5 =1;
}
if(shi_1 >=3)
{
shi_1 -=3;
fbnq_4 =1;
}
if(shi_1 >=2)
{
shi_1 -=2;
fbnq_3 =1;
}
if(shi_1 >=1)
{
shi_1 -=1;
fbnq_2 =1;
}
if(shi_1 >=1)
{
shi_1 -=1;
fbnq_1 =1;
}
if(fen_1 >=5) //提取分钟颜色
{
fen_1 -=5;
if(fbnq_5==1){fbnq_5=3;} else{fbnq_5=2;}
}
if(fen_1 >=3)
{
fen_1 -=3;
if(fbnq_4==1){fbnq_4=3;} else{fbnq_4=2;}
}
if(fen_1 >=2)
{
fen_1 -=2;
if(fbnq_3==1){fbnq_3=3;} else{fbnq_3=2;}
}
if(fen_1 >=1)
{
fen_1 -=1;
if(fbnq_2==1){fbnq_2=3;} else{fbnq_2=2;}
}
if(fen_1 >=1)
{
fen_1 -=1;
if(fbnq_1==1){fbnq_1=3;} else{fbnq_1=2;}
}
}
/**************************************************/
void yanshi()
{
.delay 2000000;
}
/**************************************************/
|