自学单片机第十三篇下:操作——单点交通灯

编辑:admin 日期:2020-05-24 10:51:56 / 人气:

我们先是操作了单个IO的控制,然后又以流水灯的形式,进行了多个IO的操作,这些只是为了让我们尽可能的熟悉程序的操作,如何赋值,如何运行,如何测试,如何下载程序到硬件,有了这些熟悉的过程,后边学起来就不会再费力了,因为很多问题都是这些基础操作导致的。
今天这篇文章,我们来通过一个仅靠延时函数,来实现下交通灯。这里会让大家先熟悉下正常的函数如何使用。我们之前的延时函数其实有些粗糙了,不过能达到要求也就无所谓了。
首先看下函数的形式。
我们一句一句的来分析,首先是头文件,之前讲过了,例如我们下边使用的P1,就是包含在头文件中的,所以我们可以拿来就用,而不用声明。
接着我们看到的是一个函数声明语句,这句话的含义是:我这里有一个函数,名字叫delay,它有一个可以输入的变量,是无符号整型的,最大数值62236,变量名是t。
这就是为了在主函数运行前,线告诉主函数,我这里有个delay函数,里边有个变量t,运行时注意下,可以直接用。主函数就明白了,当它运行到delay(300)时,就会明白,这个函数可以用,参数300也不大于65536。它会跳到下边的函数体中,运行函数体中的程序,运行完,再回来接着运行主函数中的接下来的程序。
我们只要声明过函数,使用时,就不用再写void了,直接用就可以了,函数名后边的小括号中的数字,就是我们需要使用的变量,通过调整这个数字,就可以调整延时的时间。
函数的使用,有利于程序结构的合理布局,使得程序的模块更加清晰。我们看一个使用函数和不使用函数的程序对比。
我们可以看出,两个程序的行数基本一致,但是从结构上,左边的程序虽然结构看似层层清晰,这是因为我们所书写的代码还是比较少,如果代码量很大,程序中存在大量一样的语句,就看着很费神了,不过也许对于刚接触的同学来说,这种会有助于理解为什么右边的函数可以完成同样的功能,理解完,清楚了原理,我们还是应该使用右侧的代码,这样会比左侧结构更加清晰,主函数应尽可能简洁,一目了然,看完就知道主函数在做什么,不然,分析完几千行代码,才知道函数的功能,多累。
不止是延时函数,很多程序结构,我们都可以写出函数的形式,然后再主函数中完成调用即可,有利于阅读,也有利于修改。
上图的函数,我就不演示仿真了,想看的可以自己写过后,通过下载或软件进行仿真,现象是一样的。
这篇我们主要是实现交通信号灯。
首先先了解下信号灯的工作方式,南北红灯亮,则东西绿灯亮,绿灯结束,黄灯亮,黄灯结束,东西红灯亮,南北绿灯亮,绿灯结束,黄灯亮,黄灯结束,南北红灯亮,东西绿灯亮,如此往复。时间上可能不一样,但规律一致。
我们只显示红黄绿灯即可。程序结构如下:
1,南北,红灯亮,东西绿灯亮。延时X秒。
2,南北红灯亮,东西黄灯亮。延时Y秒。
3,东西红灯亮,南北绿灯亮。延时M秒。
4,东西红灯亮,南北黄灯亮。延时N秒。
结束。
好的,开始写程序。我先写出来,再一段一段的解释。
然后对仿真电路进行了简单的调整,增加了一个交通灯电路。
这只是一个演示,我们知道,一个信号灯,怎么也得红灯10秒。黄灯3秒,绿灯10秒吧,不然,别说车了,就是火车也飞不过去。假设,我们需要东西南北都一样,那么,红灯我们用18秒,黄灯3秒,绿灯15秒。因为这个黄灯和绿灯的时间总长,要等于红灯。于是,我们这个延时程序,需要一定的更改,仅仅是数值需要换一下。
先不管定时器什么的,我们就用延时函数来做。之前我们用60000延时了0.8秒,那么0.1秒就是60000/8=7500,由于延时的核心步骤我们用了200,所以7500/200=37.5。当然,0.5是没法写的,因为我们用的是整数变量。先算出大概再说。
3秒就是0.1秒X30》37.5X30=1125
15秒就是0.1秒X150》37.5X150=5625
我们把程序中的数据进行更改。
更改完之后,编译一下,没有错误和警告。然后我们去仿真一下看看。上传一个视频大家有流量的可以看下,没有流量的可以抽时间自己仿真下看看。
01:30
这篇就先介绍的这里,主要说明的是使用函数的方法。如果有什么疑问或建议可以留言或私信给我。

现在致电 0592-6688551 OR 查看更多联系方式 →

Top 回顶部