还记得我们曾经焊过的那块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的原理来说应该不是什么难事,剩下的就是学会一些’’语法’’,比如 ***it 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)
{
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
根据实验,当x=1000时,大概会延时1s。
我这次写的是单数灯与奇数灯以大约一秒为间隔交替闪烁。
(把程序放在while死循环中是为了让它一直闪下去,否则只会执行一次,也就是闪一次)
效果图
至此,闪烁灯就完成了。
流水灯的道理也是一样的,依次让led亮过去,记得每一个动作后加入延时。
有兴趣的可以多写写其他变换方式。
到这里,这个教程就差不多结束了,希望能对初学者和爱好者有帮助.
若本文有任何问题和错误请大家批评指正,信工科技部将每期给您带来更多精彩内容,敬请关注!
|