原创 51单片机大学生入门记录【1-1流水灯】

2024-2-23 21:30 783 7 2 分类: MCU/ 嵌入式 文集: 51单片机
成果展示----流水灯


代码展示

#include <REGX52.H>
  • void Delay1ms(unsigned int xms) //@12.000MHz
  • {
  • unsigned char i, j;
  • while(xms)
  • {
  • i = 2;
  • j = 239;
  • do
  • {
  • while (--j);
  • } while (--i);
  • xms--;
  • }
  • }
  • void main()
  • {
  • while(1)
  • {
  • P1=0xFE;
  • Delay1ms(500);
  • P1=0xFD;
  • Delay1ms(500);
  • P1=0xFB;
  • Delay1ms(500);
  • P1=0xF7;
  • Delay1ms(500);
  • P1=0xEF;
  • Delay1ms(500);
  • P1=0xDF;
  • Delay1ms(500);
  • P1=0xBF;
  • Delay1ms(500);
  • P1=0x7F;
  • Delay1ms(500);
  • }
  • }
  • 复制代码



    硬件解析



    我们可以看到8颗LED灯分别接在了P1-P1.7引脚上面,并且都出串联了限流电阻(起保护作用)

    P1-P1.7全部都在P1总线上面,所以在代码部分只需要控制P1的"开关"即可控制全部LED灯

    并且可以看到,电路采用的是"灌电流"输出,意味着io口相当于接地的作用

    所以LED灯低电平点亮,高电平熄灭




    代码解析----点亮一个LED


    首先我们需要搞清楚,LED灯在什么时候才能点亮,由上面的硬件解析可以得出,LED灯在P1处于低电平时点亮,处于高电平的时候是熄灭状态

    所以p1-p1.7在熄灭时候对应的二进制为1111 1111(1为高电平,0为低电平)

    p1-p1.7全部都位于1高电平,所以全部熄灭


    若二进制为1111 1110 第一位p1为0,其余p1.1-p1.7为1,则p1对应的LED灯亮,因为p1此时为0低电平,其余都为1高电平


    所以在代码部分,我们应该写 P1=11111110,但是软件是基于c语言编程的,所以c语言不能识别二进制,所以我们需要把二进制转换成十六进制

    11111110转十六进制就是 FE

    所以我们在代码上就应该写FE

    因为[0]是便于解释器的识别,[x]是十六进制的标志

    所以FE前面我们应该把十六进制的前缀加上,则 0xFE

    此时上传代码应该可以看到,LED的第一个灯被点亮了



    代码解析----循环函数


    首先,我们可以在stc-isp里面生成一个1ms的循环函数



    然后我们可以自己定义一个函数(xms)

    这样我们输入多少,就会循环多少次1ms达到这样一个效果


    假如,我xms输入一个500

    首先会进行500次循环

    每循环一次,函数会自己减去1

    则,我输入500,循环一次完成后,就自动变成499次循环


    这个函数是软件给我们生成的1ms的循环

    如果500次1ms,那就是500ms,相当于0.5秒的循环


    所以,我们在main函数里面引用这个延迟函数,然后在延迟函数里面给他定义一个500次

    相当于延迟了0.5秒然后跳转到下一步



    代码解析----流水灯的循环

    我们在知道灯的原理,同时也知道循环的原理之后,就可以做一个相关的流水灯


    现在的代码就非常好理解了,在第一个LED灯亮了之后,然后延迟500ms,自动跳到下一个灯,以此类推,一直循环下去


    这里再细细讲解一下

    第一个灯,对应的二进制为1111 1110  【FE】

    第二个灯,对应的二进制为1111 1101  【FD】

    第三个灯,对应的二进制为1111 1011  【FB】


    。。。以此类推


    所以到最后一个灯就应该是 0111 1111   【7E】




    总结

    51单片机对于新手来说还是比较友好的,基本上懂了LED点亮的原理,以及二进制转换十六进制的方法之后,这个项目就非常容易做了!

    而且要理解一下循环函数的原理。简单来说如果我要定时500ms,其实相当于是把1ms循环了500遍这样

    最后,祝大家学有所用!


    作者: 小恶魔owo, 来源:面包板社区

    链接: https://mbb.eet-china.com/blog/uid-me-4067534.html

    版权声明:本文为博主原创,未经本人允许,禁止转载!

    PARTNER CONTENT

    文章评论0条评论)

    登录后参与讨论
    我要评论
    0
    7
    关闭 站长推荐上一条 /3 下一条