34af9uc的个人空间 https://bbs.21ic.com/?818997 [收藏] [复制] [RSS]

日志

斐波那契时钟修改02

已有 73 次阅读2020-9-10 20:59 |系统分类:兴趣爱好

/*********台湾应广单片机编程第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        =0x05;        //亮度
byte                shi;
byte                fen;
byte                miao;
byte                xian;                //显示位

byte                fbnq_1;                //fbnq_1=1//0白/1红/2绿/3蓝//斐波那契11235
byte                fbnq_2;                //fbnq_1=1
byte                fbnq_3;                //fbnq_1=2
byte                fbnq_4;                //fbnq_1=3
byte                fbnq_5;                //fbnq_1=5
word                chuzhi;                //t16初值

byte                a1,a2;
void        FPPA0 (void)
{
.ADJUST_IC        SYSCLK=IHRC/4                //4M
//byte                b1,b2;
$                chuan                out,low;                //设置为输出,低
/**************************************************/ //中断T16配置
$                inten                t16;
intrq                =0;
engint                                        //启用全局中断
//disgint                                //停用全局中断

$                t16m                ihrc,/64,bit15;        //timer16启用
//$                t16m                sysclk,/4,bit8;                //timer16启用
//$                t16m                stop;                                //timer16停用
/**************************************************/

shi                =12;
fen                =00;
miao        =0;
//shijianfj();
//xianshi();


while (1)
{

if(xian>0)
        {
        xian        =0;
        shijianfj();
        xianshi();
        }
stopexe;                //进入省电模式
//yanshi();
//fen++;
.delay 50;
}


}

/**************************************************/
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();

/**************************************************/
//engint                                        //启用全局中断
//disgint                                        //停用全局中断
//$                t16m                ihrc,/64,bit15;        //timer16启用//0.5秒中断
$                t16m                stop;                                //timer16停用

/**************************************************/
a1                =fbnq_1;
xianshi1();

a1                =fbnq_2;
xianshi1();

a1                =fbnq_3;
xianshi1();

a1                =fbnq_4;
xianshi1();

a1                =fbnq_5;
xianshi1();
/**************************************************/
//engint                                        //启用全局中断
//disgint                                        //停用全局中断
$                t16m                ihrc,/64,bit15;        //timer16启用//0.5秒中断
//$                t16m                stop;                                //timer16停用

/**************************************************/
}

/**************************************************/
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;
byte                fen_a1;

shi_1                =shi;
fen_a1                =fen;                //分钟的变换0-59变成0-11
fen_1                =0;
while(fen_a1>=5)
        {
        fen_a1                -=5;
        fen_1                ++;
        }

if(fen_a1>0)
{
fen_1                ++;
}







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                200;
}
/**************************************************/
void        interrupt()
{
pushaf                //入栈
//intrq                =0;
if (Intrq.T16)
{

miao++;
if(miao>120)                //120
        {
        xian        =1;
        miao=0;
        fen++;

        if(fen>=60)
                {
                xian        =1;
                fen                =0;
                shi                ++;
                if(shi>=13)
                        {
                        shi=1;
                        }
                }
        }
}
chuzhi                =1518;                //t16初值
stt16                chuzhi;                //0.5秒
Intrq.T16        =        0;


popaf                //出栈
}
/**************************************************/


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)