打印

斐波那契时钟,来自隔壁

[复制链接]
600|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
34af9uc|  楼主 | 2021-3-17 22:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*********台湾应广单片机编程第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;
}
/**************************************************/

使用特权

评论回复

相关帖子

发新帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

301

主题

458

帖子

62

粉丝