代码展示
硬件解析
我们可以看到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
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论