单片机原理与接口综合实训——模拟交通灯控制系统(完整版)

1、设计介绍

1.1、目的和意义

     本实训是物联网工程专业的专业基础实践课程,也是一门技能性很强的操作实践课程。从系统原理设计、KEIL软件编程调试、PROTEUS仿真、最终以实物焊接调试运行实现。培养与提高学生科学实验的能力:动手实践能力、理论联系实际的能力、自学能力、从简单的设计到综合的应用能力、创新的能力。使学生进一步掌握单片机系统的组成和工作原理,熟悉单片机应用系统设计开发过程,为其他专业课的学习奠定基础。

     在掌握单片机原理和接口技术理论知识的基础上,通过本次实训课程的教学,应使学生达到下列能力:

     1.   熟悉单片机应用系统的开发流程。

     2.   较熟练地掌握单片机应用系统的硬件系统分析、设计和仿真,掌握硬件的焊接工艺、器件选择和检测、线路的组装和调试。

    3.   能较熟练地对单片机应用系统的软件系统设计、开发和实现。熟悉单片机的开发工具Keil uVision,熟练使用单片机C51语言编写程序,并会调试运行。

     4.   熟练利用网络,借鉴网上资源,对相似软件程序能阅读且理解,并对相关资料进行有效整理和利用,最终设计、开发和实现较简单的单片机应用系统。

     5.   使学生具有理论联系实际、实事求是的科学态度;掌握科学的思维方法和学习方法,以及自我学习、自我发展的自觉意识和基本能力。具有团队精神,善于合作,协同工作的素质和一定的组织管理能力

1.2、设计环境与要求

1.2.1、 设计环境
1. 硬件环境:

  我们使用了两个4位串行数码管、4颗74LS595芯片用于驱动两个数码管、STC89C52/STC89C52RC单片机芯片、30pf电容、12MHz晶振、22uf/16V电解电容、5V电源(220V/5V)、独立按键、1K、4.7K、10K电阻、100Ω、200Ω、300Ω等电阻等搭建交通灯系统。

2. 软件环境:

    我们使用Keil软件创建工程,编写程序,然后编译调试。用Proteus画出原理图,并仿真调试。

1.2.2、设计要求
(一)模拟交通灯控制系统

      设计功能要求:

  1. 制作一个单片机最小系统,包括串口下载,复位电路,采用内部定时器定时控制南北、东西的交通信号灯(LED模拟),交通信号灯由红、黄、绿灯组成。东西、南北模拟路口由12路LED组成,其中南北、东西均采用并联方式连接,双向均有倒计时显示。
  2. 南北向和东西向各自用4位LED数码管显示相应灯的倒计时。
  3. 当东西向红灯倒计时30s期间内:南北向绿灯亮27s(27s的最后5s绿灯闪烁);剩下的3s绿灯熄灭而黄灯闪烁。当东西向红灯倒计时30s满时,切换成南北向红灯倒计时30s,其他跟前面描述类似。倒计时显示时间可以在绿灯闪烁和黄灯闪烁时显示,另一个方向为30s倒计时全过程显示。具体控制方案如下:

东西绿灯

东西绿闪

东西黄灯

南北红灯

22 s

5 s

3 s

30 s

南北绿灯

南北绿闪

南北黄灯

东西红灯

22 s

5 s

3 s

30 s

2、设计内容

2.1、 工作原理

1、4位串行数码管

通过两个74LS595芯片级联驱动并显示在4位串行数码管上,其中4位串行数码管采用共阳极的接线方式。其电路原理图如图1-1所示。

图1-1 4位串行数码管电路原理图

2、74LS595芯片

   74HC595 是一个 8 位串行输入、并行输出的位移缓存器,其中并行输出为三态输出(即高电平、低电平和高阻抗)。芯片管脚及功能说明如下:图1-2所示

图1-2芯片管脚

15 和 1 到 7 脚 QA–QH:并行数据输出

9 脚 QH 非:串行数据输出

10 脚 SCLK 非( MR) : 低电平复位引脚

11 脚 SCK( SHCP) : 移位寄存器时钟输入

12 脚 RCK( STCP) : 存储寄存器时钟输入

13 脚 G 非( OE) : 输出有效

14 脚 SER( DS) : 串行数据输入

      工作原理:74HC595 是具有 8 位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。数据在 SCK 的上升沿输入,在 RCK 的上升沿进入到存储器中。如果两个时钟连在一起,则移位寄存器总是比存储器早一个脉冲。移位寄存器有一个串行输入(DS),和一个串行输出(Q7 非),和一个异步的低电平复位, 存储寄存器有一个并行 8 位的, 具有三态的总线输出, 当 MR 为高电平,OE 为低电平时,数据在 SHCP 上升沿进入移位寄存器,在 STCP 上升沿输出到并行端口。具体电路原理图的接线如图1-3所示

图1-3两个74LS595芯片级联的电路原理图

3、LED灯

    LED 即发光二极管。它具有单向导电性,通过 5mA 左右电流即可发光,电流越大,其亮度越强,但若电流过大, 会烧毁二极管,一般我们控制在 3 mA-20mA之间,通常我们会在 LED 管脚上串联一个电阻,目的就是为了限制通过发光二极管的电流不要太大,因此这些电阻又可以称为“限流电阻”。当发光二极管发光时,测量它两端电压约为 1.7V,这个电压又叫做发光二极管的“导通压降”。

2.2 、系统组成
1、复位电路

(如图1-2所示)

图1-2 复位电路

2、时钟电路

(如图1-3所示)

图1-3 时钟电路

3、单片机STC89C52RC

(如图1-4所示)

图1-4 单片机STC89C52RC及对应接口

4、外部中断按键K0

(如图1-5所示)

图1-5 外部中断按键K0

5、东西、南北模拟路口由12路LED,交通信号灯由红、黄、绿灯组成。

(如图1-6所示)

图1-6东西、南北模拟路口由12路LED

6、两个74HC595芯片级联和一个四位串行数码管共两个

(如图1-7所示)

图1-7两个74HC595芯片级联和一个四位串行数码管

2.3 、软件编程

(1)软件流程图

(如图2-1所示)

图2-1 软件流程图

1. 初始化阶段:

   A、首先,程序对交通灯硬件进行初始化设置,将南北方向设为红灯,东西方向设为绿灯。

   B、同时,初始化外部中断(K0按键)和定时器1,外部中断用于手动改变信号灯状态,定时器1用于自动控制信号灯循环和数码管倒计时显示。

   C、设置交通灯状态枚举和时间计数器,初始状态为南北方向绿灯。

2. 主循环:

   A、在无限循环中,首先清除南北和东西方向的数码管显示。

   B、然后根据当前交通灯状态执行不同的操作:

     a、南北绿灯常亮阶段(0-22秒):南北方向显示绿灯,东西方向保持红灯,数码管开始倒计时显示剩余时间。

     b、南北绿灯闪烁阶段(22-27秒):南北方向绿灯开始闪烁,数码管继续倒计时。

     c、南北黄灯闪烁阶段(27-30秒):南北方向转为黄灯闪烁,东西方向仍为红灯,数码管显示倒计时。

     d、接着,流程进入东西方向的类似阶段,东西绿灯常亮、闪烁,直至黄灯闪烁。

     e、每个阶段都会根据flicker_flag控制灯光的闪烁,同时更新数码管显示的倒计时。

   C、每个循环结束时,通过delay函数插入小延时,并更新闪烁计数器,达到一定次数后翻转闪烁标志位,控制闪烁节奏。

3. 中断处理:

   A、外部中断(K0):当用户按下K0键时,中断被触发,根据当前计数器`cnt`的值判断是南北还是东西方向通行,并重置计数器以切换到对应方向的绿灯周期。

   B、定时器中断(TIMER1):每隔50ms,定时器中断会触发,更新cnt计数器,进而调用TrafficStatus函数检查是否需要切换到下一个交通灯状态,并相应调整数码管的显示。

4. 循环迭代:

   A、上述过程在主循环中不断重复,形成一个完整的交通灯循环周期,每次循环大约60秒,之后重新开始。

2.4、 系统仿真

(1)单片机导入*.hex程序

(如图3-1所示)

图3-1 led.hex图片

(2)仿真运行和调试,实现系统功能

a、南北绿灯常亮阶段(0-22秒):南北方向显示绿灯,东西方向保持红灯,数码管开始倒计时显示剩余时间。(如图3-2所示)

图3-2南北绿灯常亮阶段(0-22秒)

b、南北绿灯闪烁阶段(22-27秒):南北方向绿灯开始闪烁,数码管继续倒计时。(如图3-3所示)

图3-3南北绿灯闪烁阶段(22-27秒)

c、南北黄灯闪烁阶段(27-30秒):南北方向转为黄灯闪烁,东西方向仍为红灯,数码管显示倒计时。(如图3-4所示)

图3-4南北黄灯闪烁阶段(27-30秒)

d、东西绿灯常亮阶段(0-22秒):东西方向显示绿灯,南北方向保持红灯,数码管开始倒计时显示剩余时间。(如图3-5所示)

图3-5东西绿灯常亮阶段(0-22秒)

e、东西绿灯闪烁阶段(22-27秒):东西方向绿灯开始闪烁,数码管继续倒计时。(如图3-6所示)

图3-6东西绿灯闪烁阶段(22-27秒)

f、东西黄灯闪烁阶段(27-30秒):东西方向转为黄灯闪烁,南北方向仍为红灯,数码管显示倒计时。(如图3-7所示)

图3-7东西绿灯闪烁阶段(22-27秒)

2.5、 实物实现

(图从4-1开始)

(1)绘制仿真图,确定I/O口连线。

如图4-1所示

图4-1

(2)搭建单片机最小系统,确认实物搭建不存在芯片问题。

如图4-2所示

图4-2

(3)编写仿真代码。

如图4-3所示

图4-3

(4)仿真图进行代码校验,查看成果是否符合预期。

如图4-4所示

图4-4

(5)实物最小系统基础上,完善电路连接,添加数码管、LED灯管等。

如图4-5所示

图4-5

(6)对实物进行程序烧录,查看实物效果是否符合预期。

如图4-6所示

图4-6

3、设计总结

3.1、设计过程碰到的难点与解决方法

(1)问题1:软件仿真上数码管显示的倒计时十位和个位于实物数码管上的十位于个位位置相反。
    解决过程:通过分别更改SN_Lcd和EW_Lcd函数中十位和个位的位置,如图5-1所示。

图5-1 解决1

(2)问题2:在闪烁计数器中,如果计数的次数过多,会出现在数码管上来不及显示,就被其他数值覆盖。如图5-2所示。

图5-2 问题现象

解决过程:通过调试找到合适的数值,我们发现在flickerCount累加100次最为合理,数码管上显示的数值在我们肉眼中可以看到变化,不会出现都是8.8.8.8。如图5-3、5-4所示。


图5-3 代码修改部分

图5-4解决2

(3)问题3:4位串行数码管级联的方向相反,导致数据先送进去是十位还是个位,无法在数码管上正常显示。如图5-5所示。

图5-5 问题现象

解决过程:将第二颗芯片的Q7’端口由原来的第一颗芯片的Q7’端口改为DS端口。如图5-6所示。

图5-6 解决3

3.2成果与收获

略……………………(每个人的收获和感想不同!)

具体代码、proteus仿真程序、实训报告(详细版)@我!

作者:飞飞爱喝苏打

物联沃分享整理
物联沃-IOTWORD物联网 » 单片机原理与接口综合实训——模拟交通灯控制系统(完整版)

发表回复