• 点亮一个LED+LED闪烁+LED流水灯——“51单片机”


    各位CSDN的uu们好呀,这是小雅兰的最新专栏噢,最近小雅兰学习了51单片机的知识,所以就想迫不及待地分享出来呢!!!下面,让我们进入51单片机的世界吧!!!


    点亮一个LED

    LED闪烁

    LED流水灯

    LED流水灯PLUS

    源代码


    点亮一个LED

    首先,我们得对进制的转换有一个了解:

    十进制二进制十六进制
    000000
    100011
    200102
    300113
    401004
    501015
    601106
    701117
    810008
    910019
    101010A
    111011B
    121100C
    131101D
    141110E
    151111F

     然后,点亮一个LED是除了第一个灯是亮的,其余的都不亮。

    意思是:它的二进制代码序列是1111 1110

    但是,写C语言程序是不支持二进制的,所以我们需要用十六进制。

    知道了上面的知识之后,就可以开始写代码啦:

    1. #include
    2. void main()
    3. {
    4. P2=0xFE;//1111 1110
    5. }

    如果是想要八个LED间隔着亮,那么它的二进制代码就应该是:0101 0101

    1. #include
    2. void main()
    3. {
    4. P2=0x55;//0101 0101
    5. }


    LED闪烁

    这个的意思就是第一个灯一会儿亮,一会儿不亮。

    这里我们可以用到一个工具,就是STC-ISP的软件延时计算器。

    选择系统频率为12.000MHz,定时长度为500毫秒,这样它会自动生成一个代码。

    void Delay500ms(void)    //@12.000MHz
    {
        unsigned char data i, j, k;

        _nop_();
        i = 4;
        j = 205;
        k = 187;
        do
        {
            do
            {
                while (--k);
            } while (--j);
        } while (--i);
    }

     

    那么,我们最后的代码就是这样的:

    1. #include
    2. #include
    3. void Delay500ms() //@12.000MHz
    4. {
    5. unsigned char data i, j, k;
    6. _nop_();
    7. i = 4;
    8. j = 205;
    9. k = 187;
    10. do
    11. {
    12. do
    13. {
    14. while (--k);
    15. } while (--j);
    16. } while (--i);
    17. }
    18. void main()
    19. {
    20. while(1)
    21. {
    22. //1111 1110
    23. P2=0xFE;//只有第一个LED亮
    24. Delay500ms();
    25. //1111 1111
    26. P2=0xFF;//所有LED都不亮
    27. Delay500ms();
    28. }
    29. }

     

     


    LED流水灯

    这边的意思是让LED一个接一个的亮,那么,它的二进制代码序列应该就是这样:

    1111 1110

    1111 1101

    1111 1011

    1111 0111

    1110 1111

    1101 1111

    1011 1111

    0111 1111

    那么,我们的代码也就出来了:

    1. #include
    2. #include
    3. void Delay500ms() //@12.000MHz
    4. {
    5. unsigned char data i, j, k;
    6. _nop_();
    7. i = 4;
    8. j = 205;
    9. k = 187;
    10. do
    11. {
    12. do
    13. {
    14. while (--k);
    15. } while (--j);
    16. } while (--i);
    17. }
    18. void main()
    19. {
    20. while(1)
    21. {
    22. P2=0xFE;//1111 1110
    23. Delay500ms();
    24. P2=0xFD;//1111 1101
    25. Delay500ms();
    26. P2=0xFB;//1111 1011
    27. Delay500ms();
    28. P2=0xF7;//1111 0111
    29. Delay500ms();
    30. P2=0xEF;//1110 1111
    31. Delay500ms();
    32. P2=0xDF;//1101 1111
    33. Delay500ms();
    34. P2=0xBF;//1011 1111
    35. Delay500ms();
    36. P2=0x7F;//0111 1111
    37. Delay500ms();
    38. }
    39. }

     

     

     

     

     


     LED流水灯PLUS

    上面写的LED流水灯的代码不是特别灵活,如果是我们想要修改定时长度呢,难道我们还要把代码全部修改一遍吗,这样显然是比较cuo的,我们可以利用传参的方式,想修改成多少定时长度就可以修改成多少定时长度。

    当然,在这之前,又有一个小知识点需要分享:

    类型符号关键字所占位数数的表示范围
    整型(signed)int16-32768~32767
    (signed)short16-32768~32767
    (signed)long32-2147483648~2147483647
    unsigned int160~65535
    unsigned short int160~65535
    unsigned long int320~4294967295
    实型float323.4e-38~3.4e38
    double641.7e-308~1.7e308
    字符型char8-128~127
    unsigned char80~255
    1. #include
    2. void Delay1ms(unsigned int xms) //@12.000MHz
    3. {
    4. unsigned char data i, j;
    5. while(xms)
    6. {
    7. i = 2;
    8. j = 239;
    9. do
    10. {
    11. while (--j);
    12. } while (--i);
    13. xms=xms-1;
    14. }
    15. }
    16. void main()
    17. {
    18. while(1)
    19. {
    20. P2=0xFE;//1111 1110
    21. Delay1ms(200);
    22. P2=0xFD;//1111 1101
    23. Delay1ms(200);
    24. P2=0xFB;//1111 1011
    25. Delay1ms(200);
    26. P2=0xF7;//1111 0111
    27. Delay1ms(200);
    28. P2=0xEF;//1110 1111
    29. Delay1ms(200);
    30. P2=0xDF;//1101 1111
    31. Delay1ms(200);
    32. P2=0xBF;//1011 1111
    33. Delay1ms(200);
    34. P2=0x7F;//0111 1111
    35. Delay1ms(200);
    36. }
    37. }

     


    源代码

    源代码如下:

    点亮一个LED

    #include

    void main()
    {
        P2=0xFE;//1111 1110
    }

    间隔点亮LED

    #include

    void main()
    {
        P2=0x55;//0101 0101
    }

    LED闪烁

    #include
    #include

    void Delay500ms()    //@12.000MHz
    {
        unsigned char data i, j, k;

        _nop_();
        i = 4;
        j = 205;
        k = 187;
        do
        {
            do
            {
                while (--k);
            } while (--j);
        } while (--i);
    }

    void main()
    {
        while(1)
        {
            //1111 1110
            P2=0xFE;//只有第一个LED亮
            Delay500ms();
            //1111 1111
            P2=0xFF;//所有LED都不亮
            Delay500ms();
        }
    }

    LED流水灯

    #include
    #include

    void Delay500ms()    //@12.000MHz
    {
        unsigned char data i, j, k;

        _nop_();
        i = 4;
        j = 205;
        k = 187;
        do
        {
            do
            {
                while (--k);
            } while (--j);
        } while (--i);
    }

    void main()
    {
        while(1)
        {
            P2=0xFE;//1111 1110
            Delay500ms();
            P2=0xFD;//1111 1101
            Delay500ms();
            P2=0xFB;//1111 1011
            Delay500ms();
            P2=0xF7;//1111 0111
            Delay500ms();
            P2=0xEF;//1110 1111
            Delay500ms();
            P2=0xDF;//1101 1111
            Delay500ms();
            P2=0xBF;//1011 1111
            Delay500ms();
            P2=0x7F;//0111 1111
            Delay500ms();
        }
    }

    LED流水灯PLUS

    #include

    void Delay1ms(unsigned int xms)    //@12.000MHz
    {
        unsigned char data i, j;
        while(xms)
        {
            i = 2;
            j = 239;
            do
            {
                while (--j);
            } while (--i);
            xms=xms-1;
        }
    }

    void main()
    {
        while(1)
        {
            P2=0xFE;//1111 1110
            Delay1ms(200);
            P2=0xFD;//1111 1101
            Delay1ms(200);
            P2=0xFB;//1111 1011
            Delay1ms(200);
            P2=0xF7;//1111 0111
            Delay1ms(200);
            P2=0xEF;//1110 1111
            Delay1ms(200);
            P2=0xDF;//1101 1111
            Delay1ms(200);
            P2=0xBF;//1011 1111
            Delay1ms(200);
            P2=0x7F;//0111 1111
            Delay1ms(200);
        }
    }

        


    好啦,小雅兰今天的内容就到这里啦,还要继续加油呀!!!

     

  • 相关阅读:
    阿里云 短信服务——验证码盗刷与短信轰炸
    使用Postman工具做接口测试 —— 环境变量与请求参数格式!
    MySQL基础篇【聚合函数】
    GEE教程——利用Global 4-class PALSAR-2/PALSAR Forest数据提取指定区域的森林和影像下载
    【k8s】kubectl命令详解
    Selenium教程(1)选择和查找基本元素
    Hive表新增字段值为NULL问题
    notepad++去除每一行第二个等号之后的内容解决ResolvePackageNotFound
    全网最透彻!Dubbo整合SpringBoot详解,又通宵了
    大模型prompt实例:知识库信息质量校验模块
  • 原文地址:https://blog.csdn.net/weixin_74957752/article/details/133435304