开启辅助访问 切换到窄版

打印 上一主题 下一主题

单片机很好玩1,作为嵌入式工程师,我都快忘了怎么点亮LED小灯了

[复制链接]
版块:
程序员交流 招聘&找工作 发布时间:2019-1-26 15:24:21
13370
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
昨天是2019年的第一天,我也是非常感慨,回顾了一下自己成为程序员的历程,有朋友回复说我进了一个吃青春饭的行业。


青春饭

这样的问题我也思考过,其实若说“吃青春饭”,又岂止只应程序员们担心。吃大锅饭的时代过去了,各行各业,只要贪图享受滋润的生活,工作技能没有跟着年龄一起增长,都是“吃青春饭”,至少在技术行业,老油条肯定是越来越不受欢迎的。自己的可替代性越强,就越容易“吃青春饭”。
何况,爱折腾的程序员们 35 岁以后,谁还会只靠工资收入生活呢?
要是不喜欢折腾,我就不干技术类工作了

放弃学了多年的专业,刚刚转行成为嵌入式程序员时,我很兴奋,花钱在闲鱼淘了一批电子器件。计划是这样的:既然我懂一点硬件,就不该丢弃它,下班后要坚持学习硬件,至少要会设计数字电路,然后买些传感器做些好玩的东西。


正式工作后,这些计划却没能执行。因为下班后,我发现半路出家的自己,要追赶上同事就得多花些时间。所以整个2018年,我下班后都在恶补linux相关的知识。
今天看到买的这些器件都落上灰了,有些羞愧。既然工作基本站稳了脚跟,就开始执行计划吧,在这里记录下笔记。
做带界面的软件从来都不是C语言的强项

现在我的工作就是C语言编程。回想自己当初入门C语言时,就是从51单片机开始的,那今天也就从51单片机开始吧。
之前的文章有朋友评论说,我应该用C语言做些带界面的软件,再做些游戏,这样看的人才多。我很感谢那位朋友的建议,这两项C语言虽然能够做,但却不是C语言的强项,java,C#等语言更适合做这些,C语言更适合与硬件打交道。


上图是一款单片机,C语言是一门足够底层的语言,它能够比较方便的控制硬件工作,例如控制单片机的某个引脚输出指定的电平。(其实说控制硬件工作并不准确,原因可参考我之前的文章《程序员编写的代码为什么可以控制计算机硬件工作?》。)
单片机是由中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统等各种外设集成到一块硅片上构成的一个小而完善的微型计算机系统。
差点忘了怎样用51单片机点亮 LED 小灯了

LED 小灯其实就是一个发光二极管,只要它两端的电压大于阈值就能发光。现在将 LED 小灯的阴极连接到单片机的“地”,再将 LED 小灯的阳极通过一个小电阻连接到单片机的 P2.0 引脚。
因为我使用的单片机的引脚高电平可以输出 5V 的电压,这应该能够让 LED 小灯发光了,所以写出如下程序,控制 P2.0 引脚输出高电平:
#include "reg52.h"
sbit P20 = P2^0;
int main()
{
P20 = 1;
while(1);
}
编译后,烧写程序,观察LED小灯,的确亮了。


现在如果让P20输出低电平,LED小灯应该会灭。如果周期的让 P20 依次输出高低电平,LED 小灯应该会闪起来。所以有下面的控制程序:
#include "reg52.h"
sbit P20 = P2^0;
void delay(unsigned int n)
{
unsigned int x;
while(n--){
x = 5000;
while(x--);
}
}
int main()
{
while(1){
P20 = 0;
delay(10);
P20 = 1;
delay(10);
}
}
我使用的单片机晶振是 11.0592MHz,如果不加 delay 延时,LED 闪烁频率会非常高,人眼无法分辨。现在编译,烧写程序,发现LED小灯的确闪烁起来了:


虽然 LED 小灯闪烁起来了,但是它不太亮,这是因为我使用单片机的 IO 电流输出能力有限,明天试一下用三极管做中转控制。
欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表