快捷搜索:  汽车  科技

32单片机做交通灯程序(自学单片机第十三篇下)

32单片机做交通灯程序(自学单片机第十三篇下)我们可以看出,两个程序的行数基本一致,但是从结构上,左边的程序虽然结构看似层层清晰,这是因为我们所书写的代码还是比较少,如果代码量很大,程序中存在大量一样的语句,就看着很费神了,不过也许对于刚接触的同学来说,这种会有助于理解为什么右边的函数可以完成同样的功能,理解完,清楚了原理,我们还是应该使用右侧的代码,这样会比左侧结构更加清晰,主函数应尽可能简洁,一目了然,看完就知道主函数在做什么,不然,分析完几千行代码,才知道函数的功能,多累。函数的使用,有利于程序结构的合理布局,使得程序的模块更加清晰。我们看一个使用函数和不使用函数的程序对比。接着我们看到的是一个函数声明语句,这句话的含义是:我这里有一个函数,名字叫delay,它有一个可以输入的变量,是无符号整型的,最大数值62236,变量名是t。这就是为了在主函数运行前,先告诉主函数,我这里有个delay函数,里边有个变量t,运行时注意下,可以

​我们先是操作了单个IO的控制,然后又以流水灯的形式,进行了多个IO的操作,这些只是为了让我们尽可能的熟悉程序的操作,如何赋值,如何运行,如何测试,如何下载程序到硬件,有了这些熟悉的过程,后边学起来就不会再费力了,因为很多问题都是这些基础操作导致的。

今天这篇文章,我们来通过一个仅靠延时函数,来实现下交通灯。这里会让大家先熟悉下正常的函数如何使用。我们之前的延时函数其实有些粗糙了,不过能达到要求也就无所谓了。

首先看下函数的形式。

32单片机做交通灯程序(自学单片机第十三篇下)(1)

我们一句一句的来分析,首先是头文件,之前讲过了,例如我们下边使用的P1,就是包含在头文件中的,所以我们可以拿来就用,而不用声明。

接着我们看到的是一个函数声明语句,这句话的含义是:我这里有一个函数,名字叫delay,它有一个可以输入的变量,是无符号整型的,最大数值62236,变量名是t。

这就是为了在主函数运行前,先告诉主函数,我这里有个delay函数,里边有个变量t,运行时注意下,可以直接用。主函数就明白了,当它运行到delay(300)时,就会明白,这个函数可以用,参数300也不大于65536。它会跳到下边的函数体中,运行函数体中的程序,运行完,再回来接着运行主函数中的接下来的程序。

我们只要声明过函数,使用时,就不用再写void了,直接用就可以了,函数名后边的小括号中的数字,就是我们需要使用的变量,通过调整这个数字,就可以调整延时的时间。

函数的使用,有利于程序结构的合理布局,使得程序的模块更加清晰。我们看一个使用函数和不使用函数的程序对比。

32单片机做交通灯程序(自学单片机第十三篇下)(2)

我们可以看出,两个程序的行数基本一致,但是从结构上,左边的程序虽然结构看似层层清晰,这是因为我们所书写的代码还是比较少,如果代码量很大,程序中存在大量一样的语句,就看着很费神了,不过也许对于刚接触的同学来说,这种会有助于理解为什么右边的函数可以完成同样的功能,理解完,清楚了原理,我们还是应该使用右侧的代码,这样会比左侧结构更加清晰,主函数应尽可能简洁,一目了然,看完就知道主函数在做什么,不然,分析完几千行代码,才知道函数的功能,多累。

不止是延时函数,很多程序结构,我们都可以写出函数的形式,然后在主函数中完成调用即可,有利于阅读,也有利于修改。

上图的函数,我就不演示仿真了,想看的可以自己写过后,通过下载或软件进行仿真,现象是一样的。

这篇我们主要是实现交通信号灯。

首先先了解下信号灯的工作方式,南北红灯亮,则东西绿灯亮,绿灯结束,黄灯亮,黄灯结束,东西红灯亮,南北绿灯亮,绿灯结束,黄灯亮,黄灯结束,南北红灯亮,东西绿灯亮,如此往复。时间上可能不一样,但规律一致。

32单片机做交通灯程序(自学单片机第十三篇下)(3)

我们只显示红黄绿灯即可。程序结构如下:

1,南北,红灯亮,东西绿灯亮。延时X秒。

2,南北红灯亮,东西黄灯亮。延时Y秒。

3,东西红灯亮,南北绿灯亮。延时M秒。

4,东西红灯亮,南北黄灯亮。延时N秒。

结束。

好的,开始写程序。我先写出来,再一段一段的解释。

32单片机做交通灯程序(自学单片机第十三篇下)(4)

然后对仿真电路进行了简单的调整,增加了一个交通灯电路。

32单片机做交通灯程序(自学单片机第十三篇下)(5)

这只是一个演示,我们知道,一个信号灯,怎么也得红灯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

我们把程序中的数据进行更改。

32单片机做交通灯程序(自学单片机第十三篇下)(6)

更改完之后,编译一下,没有错误和警告。然后我们去仿真一下看看。

这篇就先介绍的这里,主要说明的是使用函数的方法。如果有什么疑问或建议可以留言或私信给我。

更多多内容,欢迎关注百家号:小亮谈电气。电气学苑。

猜您喜欢: