导航
I 原理图剖析
II 实战操作
点亮led
led闪烁
流水灯
I 原理图剖析
在来看原理图之前,我们要先有以下这几点知识做铺垫:
单片机电平特性:高电平为+5V,低电平为0V;
单片机在通电时所有I/O口均为高电平;
常见发光二极管点亮之后压降值为1.7V(可以自行仿真求证),电流正常值为3~10mA;
咱也不知道为什么,这就好比为啥俺一出生就被设定成male一样。
因此这就解决了我们的第一个问题:排阻的值为什么是1KΩ?
答曰:此时排阻电压为(5-0)-1.7=3.3V,I=3.3*103/103=3.3mA。
同时我们又知道:标号(如上图中P20表示P2端第1位)相同(主要指各模块与主芯片之间)相互连接:
于是乎我们知道了:发光二极管D1与芯片20引脚连接。
至此,整个单片机我们可以用仿真软件仿真出来了。
II 实战操作
a. 点亮LED
①:原理
上面我们也提到P2.0其实是一个特殊功能位,结合上篇文章《【51单片机】预备知识——我与单片机的第一次约会》发的c51拓展数据结构,我们对其操作时应用sbit对其定义;其次我们知道通电时此I/O口为高电平(c51中1为高电平),因此我们只需将其电平值设为0(低电平)即有电流流过,就会亮,很简单。
②:代码实现:
③:效果展示:
④:拓展知识:
这里值得注意的是:我们可直接操作的是P2口(由八位即P2.0-.7组成),例如2位即第3个LED亮,若对P2.2操作即如上同理编写代码,如对P2端口操作,则P2此时用二进制表示为1111 1011,十六进制表示为
代码如下
展示如下
至此咱们点亮了第一个LED,它的七大姑八大姨该怎么点亮你们应该都懂得。
2. LED闪烁
LED闪烁的原理不必多讲,无非就是亮-灭-亮-灭,但是好玩的是,当我第一次尝试这样编写程序时:
达不到预期的效果,这是为什么呢?原来是灯亮灭的频率太快,巧妙地骗过了人的眼睛,就像光电子偏移实验中实际看到的是一条亮线,因此我们要加个延时程序:
但是问题又来了,你看,学习就是一个不断发现问题并解决的过程:我给了50000的延时单位,到底是多久呢?经过查找,我发现了方法
①:设置晶振频率;②:调试(见上图)。
这个对学过C的小伙伴来说都小case了,不赘述了。不懂的可以来后台讨论哈,不建议用秒表测,太考验手速,误差也大。
c. 流水灯的实现
学过C语言的都知道,当你想做两个同样事时,写两个相同语句就好了,多了就不可行,因此流水灯的实现显然已经有同学和我想的笨方法一样了,嘿嘿,对于爱偷懒的我,告诉你那是不可能的,于是乎,百度
这是个啥?百度一下
这不正是咱们要的东西吗?赚大了,省去一大笔不需要的代码(单片机内存本来就小,对自己抠门不行,但对单片机内存一定要抠);
于是有了下面代码:
效果演示
今天就先到这里~
下面给勤奋的小宝贝布置点任务:
①:自己去搞懂_crol_和<
②:用其他算法写流水灯;
③:自行拓展。
有什么不懂得请在后台留言,咱们一块学习讨论。下次学习俺会带你们了解蜂鸣器模块,并用它做一首简单的音乐出来呦~