【软件工程师学硬件】之 让LED闪烁起来

很多人尤其是刚入门的硬件工程师比较纠结选择什么mcu芯片,比如做个闪烁的LED,是用at89c51还是pic16f887,甚至有人想到要用stm32或者esp8266等等。实际上完全没有那个必要,如果仅仅是兴趣或者是学习知识,玩哪种mcu都一样,就和你学习java和c#一样,都是语言,你不能说java比c#更牛x,java能做到的,c#也差不多能够做到,那硬件也是这样,不必要纠结这个,如果纠结这个,反而耽误时间。但是如果是项目或者是做产品,那就不是一回事了,虽然同类的芯片可能都能实现某个功能,但是涉及到成本、性能、包装等等因素,就需要好好斟酌一下,这就好比学个c#玩玩可以,但是真正到项目的时候,得要看项目的实际要求了,有的项目以前一直是java开发的,而且服务器也是linux的,并且老板也不愿意多掏钱,什么都要开源的,那还是改用java吧。
啰嗦了几句话,进入正题,上次我们做了一个第一个硬件程序,点亮一个led,点亮led的实质就是将单片机的某个引脚(严格说是某个端口的某个位)置位。at89c51有P0、P1、P2、P3四个端口,每个端口有8只引脚,其他类型的单片机也差不多。
但是上次的程序里led一直亮着,那要是让它闪烁,就是一亮一灭,就像彩灯那样的。实际上很简单,上次说了,置0就是亮,那要是置1呢?对了,就是灭掉。就这么简单。
但是有一个问题,因为单片机程序运行非常快,指令的运行时间都是微秒级的,1秒等于1000毫秒,1毫秒等于1000微秒,你就想象一下,如果一亮一灭两个指令连续运行,会是什么结果?我们根本感觉不到闪烁,感觉到的就是一直亮着。所以啊我们得想办法将两个指令分开一段时间,就是先亮一会儿,比如亮个两秒钟,再让它灭个两秒钟,这样我们的眼睛就能明显感觉到亮和灭了。这样说的话,就需要加个延时程序,就是我们软件程序里面的sleep,但是这个硬件里可没有sleep,我们得自个儿写延时程序。
好了,按照上面的思路,我们给出完整的程序如下,有一些不明白的我已经加上注释:

#include <reg51.h>
#include <stdio.h>
sbit P10=P1^0; //定义P10

void main(void)

while(1) 
{
unsigned int i; 
for(i=0; i <30000; i++) 
P10=0; //注意:是低电平点亮led
for(i=0; i <30000; i++) 
P10=1;
}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我们都是工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值