购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

五、
实训电路

实训电路如图1.21所示。电路基于单片机最小系统,J1是排阻。

图1.21 实训电路图

实训一 发光二极管闪烁

实训要求

先点亮8个LED,延时约1 s后,再灭掉8个LED,一直循环闪烁。

实训分析

根据电路可知,LED的阴极接P 0口,阳极接VCC,如果要点亮8个LED,让P0口输出低电平即可;如果LED熄灭,让P0口输出高电平。要实现延时,根据C语言的for语句可以实现。程序流程图如图1.22所示。

图1.22 程序流程图

程序设计
实训现象

将程序的hex文件下载在单片机内,下载界面如图1.23所示。8个发光二极管全亮,大约1 s后全灭,大约1 s后全亮,一直循环。

图1.23 下载界面

程序解释

①#include < reg51. h > :reg51. h为51单片机的头文件,引用头文件就是将这个头文件中的全部内容放到引用头文件的位置,以后免去每次编写同类型程序都要将头文件中的语句重新编写。51单片机头文件内容如下所示。

②#define uint unsigned int:宏定义。就是用uint(可根据读者自行编写)代替unsigned int,使得程序书写方便、简单。

③void delay(uint t)

采用for实现延时。如果t = 100,此时执行第一个for语句,条件满足执行第二个for语句,此时第二个for语句需要执行114时,才退出循环,回到第一个for语句处,继续判断,条件满足,就再执行114第二个循环,直到条件不满足,这样就可以让单片机跑空程序来浪费时间,进而实现延时。C语言编写程序的延时不太精确,如果需要精确的时间,可以根据单片机内部的定时器来做,一般的延时就可采用for来实现,如果需要知道其延时了多长时间,就可以进入调试模式进行计算。如图1.24所示,注意观察sec前后的值,值得注意的是,根据晶振频率不同则时间不同,这样就可以得到精确的延时时间。

④P0=0;这是条赋值语句,将“0”的十六进制数赋给P0口,这样就可以根据P0的状态,发光二极管实现全亮。

⑤while(1)

While语句的表达式为1,也就是为真,就会执行下面的语句。此语句的作用是实现大循环,也就是说发光二极管从全亮,延时一会儿后,全灭,延时一会儿后,又全亮,不停地执行下去。

⑥void main(){}:主函数,每个程序有且仅有一个主函数,程序是从主函数开始执行的,void表示“空”类型,即不带返回值。无参数表示该函数不带任何参数,也可在括号内写上void,即void main(void)。

图1.24 a为运行前,b为运行后

实训二 循环点亮流水灯

实训要求

为了实现流水效果,最开始是D1亮,延时一段时间后,只有D2亮,再延时一段时间后,只有D3亮,一直到只有D8亮。

实训分析

为了既要实现循环点亮,还要使单片机程序运行高效,我们采用移位操作。移位操作在单片机中应用很多,希望读者掌握。

程序设计
实训现象

将程序的hex文件下载至单片机内,8个发光二极管实现流水效果,循环点亮发光二极管。

程序解释

此语句实现移位操作。当i = 0时,P 0 = 1111 1110,对应的现象是最低位发光二极管点亮,延时一段时间后,当i = 1时,此时P0=1111 1101,对应的现象是次低位发光二极管点亮,直到i = 7时,P0=0111 1111,对应的现象是最高位发光二极管点亮,这样就能实现移位。单片机执行移位操作时程序运行高效。

实训三 依次点亮流水灯

实训要求

程序下载进单片机后,D1亮,延时一会儿后,D2亮,并且D1仍然亮,再延时后,D3亮,到最后是全亮,一直循环。

实训分析

本实训要实现依次点亮,可以采用C语言的数组来实现,因为使用数组比较方便简单。程序的tab[0]也就是0xfe,然后赋给P0口显示。

程序设计
实训现象

将程序的hex文件下载至单片机内,8个发光二极管依次点亮。

程序解释

①uchar code tab[]= {0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};

利用数组,把每种情况下的十六进制数装进数组里。

②P0=tab[i];:把数组里的数据赋给P0口。如果i=0时,此时tab[0]就是数组第1个元素,即0xfe。值得注意的是,调用数组时,tab后面中括号的数字是从0开始的,对应后面大括号里第1个元素。

实训总结

以上三个实训项目是由最小系统搭建而成的发光二极管电路,介绍了怎样来编写程序。通过实训操作,使读者更加深刻地掌握单片机的最小系统,以及如何采用C语言来编写程序。 nyoPYy2s6N45bD9jtJPQr5K+p43h83l9lgua6Q+X8f6hS0AjwcD2DCHNUbEySGNd

点击中间区域
呼出菜单
上一章
目录
下一章
×