51单片机教程--点亮启航之灯

 

每周一发51单片机基础教程...





 每周一期   51单片机基础教程

 第二期   51简介及led的控制

文章来自信工科技部  
    
 本次编辑:  
安秋锐
  校对:    梁雨凤


还记得我们曾经焊过的那块51学习板吗?还记得我们当时试验成功后的兴奋与欢喜吗?没错,这块这块板子的硬件连接部分已经完成了,但是要想实现我们想要的功能,还要我们自己编程以实现目的!

今天,小编给大家带来的是一个最基础的教程——  任意点亮实验板上的led。这个东西虽然看似简单,但只要你足够有创意,比如你把他们当作成许多演员,而你就是导演,通过不同时间控制不同的led亮灭,还是可以实现比较炫的效果。比如基础一点的有流水灯,闪烁灯等,如果你有兴趣还可以自己焊一块板子,设计更多的led并摆个造型,比如像这种
     
 进入正题,首先来简单的介绍下什么是单片机以及我们所焊接的板子上单片机的型号。 单片机是一种可通过编程来控制的微处理器,它需要靠外围的器件的协调来发挥其自身的强大功能,所以说我们要想驾驭好它,还要懂得一些外围器件的使用方法及电路的设计。本次教程所用到的外围器比较简单,就是一排灯泡,相信大家应该都玩过,只要正负级接对,加上合适的电压就可以发光了。我们手上的板子所采用的是单片机型号是89C52,属于51系列,可通过我们熟悉的c语言来编程。下面附上它的引脚电路图 
可以看到它一共有40个引脚,其中有P0口,P1口,P2口,P3口,每个P口对应有8个I/O口,列如P1.0~P1.7。还有第40脚和20脚分别为正负极,他引脚暂不做介绍。下面附此实验板和led的连接图。


不难看出8颗led所连接的是单片机的P1口的8个I/O口,由于是led的正极始终连接着正极,而负极接的是单片机的I/O 口,因此我们只需要让I/O输出低电平即可点亮对应的led(ps:由于单片机上电后默认输出高电平,所以led在单片机未配置输出低电平时是灭的),其实单片机说白了就是控制哪些引脚的电平什么时候输出高,什么时候输出低,由这些高低电平的变化来控制外围电路。

明白了这些以后,我想大家对于控制led的原理来说应该不是什么难事,剩下的就是学会一些’’语法’’,比如  sbit led1=P1^0;(写的时候注意大小写及相关表示符号)意思是将单片机P1口的最低位定义为led1。若要控制P1口的某一位,必定要声明这一位,否则单片机不知道我们要操作的对象是什么。声明了以后,就直接可以通过控制led1来对P1^0操作,比如led1=0;就是让P1^0输出低电平(ps:等于0就是低电平,等于1就是高电平)。当然你还可以直接对P1口的8个I/O口同时操作,此时就不用位声明了,比如P1=0xfe;其中0x 表示后面的数据是以16进制形式表示的,fe转换为2进制就是1111 1110,即也是相当于给P1^0口配置低电平。

下面我们来尝试点亮右边第一颗led,这也可以说是实验当中最简单的程序了。直接上图

或者这么写 

效果都是一样的。
烧入程序后效果图(keil具体使用方法和烧入过程请自行百度或参考上一次的教程)




下面我们利用延时来实现一个闪烁灯的效果。首先来简单介绍一下延时函数,谓延时函数,就是利用单片机执行语句所需要耗费时一现象来实现的。

例如
void delay(int x)

{

inti,j;

for(i=x;i>0;i--)

for(j=110;j>0;j--);

}

根据实验,当x=1000时,大概会延时1s。

我这次写的是单数灯与奇数灯以大约一秒为间隔交替闪烁。

(把程序放在while死循环中是为了让它一直闪下去,否则只会执行一次,也就是闪一次)

效果图




至此,闪烁灯就完成了。
流水灯的道理也是一样的,依次让led亮过去,记得每一个动作后加入延时。
有兴趣的可以多写写其他变换方式。
到这里,这个教程就差不多结束了,希望能对初学者和爱好者有帮助.

若本文有任何问题和错误请大家批评指正,信工科技部将每期给您带来更多精彩内容,敬请关注!

另附上光立方视频你的视觉


    关注 昌航风信子


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册