巩芷琪 发表于 前天 09:11

流水灯代码实现

//流水灯左移
//其中调用math.h文件中的pow函数

#include <reg52.h>
#include <math.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;

sbit ENLED = P1 ^ 4;

int main(void)
{
        int count;

           ENLED = 0;
    ADDR3 = 1;
   
        ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;
   
        count = 0;
        while (1)
        {
                int j;

                float fl;
                int m;

                if (8 == count)
                        count = 0;

                fl = pow(2, count);
                m = fl;
                P0 = 0xFF ^ m;

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

                count++;
        }
}          //流水灯左移

#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;

sbit ENLED = P1 ^ 4;

/*
@func:求取2的m次幂
@ret:返回2的m次幂的整型值
*/
int POW(int m)
{
        int i;
        int iRet;
        iRet = 1;
        for (i = 0; i < m; i++)
        iRet = iRet * 2;
        return iRet;               
}

int main(void)
{
        int count;

           ENLED = 0;
    ADDR3 = 1;
   
        ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;
               
        count = 0;
        while (1)
        {
                int j;

                if (8 == count)
                        count = 0;

                P0 = 0xFF ^ POW(count);
                for (j = 0; j < 9000; j++)
                        ;

                count++;
        }
}        //流水灯右移

#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;

sbit ENLED = P1 ^ 4;

int POW(int m)
{
        int i;
        int iRet;
        iRet = 1;
        for (i = 0; i < m; i++)
        iRet = iRet * 2;
        return iRet;               
}

int main(void)
{
        int count;

           ENLED = 0;
    ADDR3 = 1;
   
        ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;
               
        count = 7;
        while (1)
        {
                int j;

                P0 = 0xFF ^ POW(count);
                for (j = 0; j < 9000; j++)
                        ;

                if (0 == count)
                        count = 8;
      
                count--;
        }
}        //流水灯左移到头接着右移,右移到头再左移

#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;

sbit ENLED = P1 ^ 4;

int POW(int m)
{
        int i;
        int iRet;
        iRet = 1;
        for (i = 0; i < m; i++)
        iRet = iRet * 2;
        return iRet;               
}

int main(void)
{
        int count;
        int iflag; //iflag = 0时,从右向左,iflag = 1时,从左向右

           ENLED = 0;
    ADDR3 = 1;
   
        ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;
               
        count = 0;
        iflag = 0;
        while (1)
        {
                int j;

                if (0 == iflag)
                {
                        if (8 == count)//最后一个灯点亮后,开始点亮倒数第二个灯
                        {
                                count = 6;
                                iflag = 1;
                        }
                }
                else
                {
                        if (0 == count)//第一个灯此时未点亮,故只改变方向后进行第一个灯的点亮
                                iflag = 0;
                }

                P0 = 0xFF ^ POW(count);
                for (j = 0; j < 9000; j++)
                        ;
               
                if (0 == iflag)
                        count++;
                else
                        count--;
        }
}        //流水灯右移到头接着左移,左移到头再右移

#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;

sbit ENLED = P1 ^ 4;

int POW(int m)
{
        int i;
        int iRet;
        iRet = 1;
        for (i = 0; i < m; i++)
        iRet = iRet * 2;
        return iRet;               
}

int main(void)
{
        int count;
        int iflag; //iflag = 0时,从右向左,iflag = 1时,从左向右

           ENLED = 0;
    ADDR3 = 1;
   
        ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;
               
        count = 7;
        iflag = 1;
        while (1)
        {
                int j;

                if (0 == iflag)
                {
                        if (8 == count)//最后一个灯点亮后,开始点亮倒数第二个灯
                        {
                                count = 6;
                                iflag = 1;
                        }
                }
                else
                {
                        if (0 == count)//第一个灯此时未点亮,故只改变方向后进行第一个灯的点亮
                                iflag = 0;
                }

                P0 = 0xFF ^ POW(count);
                for (j = 0; j < 9000; j++)
                        ;
               
                if (0 == iflag)
                        count++;
                else
                        count--;
        }
}         

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 流水灯代码实现