PIC单片机实现交通灯控制系统
扫描二维码
随时随地手机看文章
1 引 言
我国机动车辆发展迅速,而城镇道路建设由于历史等各种原因相对滞后。道路拥挤、阻塞现象及交通事故常有发生。如何利用当今计算机与自动控制技术,有效地疏导交通,提高城镇交通路口的通行能力,提高车辆速度,减少交通事故是值得我们研究的新课题。而目前国内利用单片机实行交通管制这方面应用较少。下面分析用PIC实现交通灯控制设计方法。
2 硬件设计
本系统选用美国Microchip公司的PIC16F873单片机。配合一些外围电路完成交通灯自动转换系统。PIC单片机有以下优点:
①采用哈佛结构(数据总线和指令总线分离)。
②指令的“单字节化”。
③精简指令集(RISC)技术。
④寻址方式简单。
⑤代码压缩率的提高。
⑥运行速度高。
⑦功耗低、驱动能力强。
⑧具备I2C和SPI串行总线端口。
⑨寻址空间简洁。
⑩外围电路简洁。
⑪开发方便。
⑫ C语言编程。
⑬品种丰富[1]。
⑬程序保密性强。
其指令系统除了程序分支指令是单字节双周期指令外,其他指令都是单周期、单字节指令。在这些指令中,没有功能相交叉的指令,使所有的指令具有简洁性,从而执行速度非常快。PIC单片机硬件特点:PIC16F873型单片机是PIC中级单片机中很有特色的一款,其指令字节为14 b[2]。他具有PIC单片机的全部优点,而且片内还带有128×8的E2PROM数据存储器,其程序存储器(4 k×14 b)也与众不同,采用快闪存储器。快闪存储器可以实现在电路板上快速擦除和写入,最适合制作仿真板。借助于PIC16F873制作的仿真板,我们在程序编写和调试过程中,可以方便的烧写程序和修改程序。
电路完成功能是:车辆放行方向上(A线)绿灯亮25 s,黄灯警告5 s,车辆禁止方向上(B线)红灯亮30 s,然后绿灯开始放行。各方向上计数器从30开个电路由PIC16873所控制,译码电路由CD4056和7段数码管构成,CD4056的功能是将BCD 码转换成十进制数,然后送7段数码管显示输出。6个发光二极管用来模拟双向十字路口的红、黄、绿灯。
3 软件设计
Microchip公司为PIC系列单片机配备了功能强大的软件集成开发环境MPLAB,应用MPLAB就能在微机上对PIC系列单片机进行程序的创建、录入、编辑以及汇编,甚至还能实现程序的模拟运行动态调试(Debug)之类的虚拟演练,而且调试可以采用连续运行、单步运行、自动单步运行、设置断点运行等多种运行方式[1]。
3.1 主程序方框图
主程序框图如图2所示。
控制过程可分为4个过程:
①给PORTA送控制码“0CH”,就是给A口的数据寄存器送“00001100”这样就使A线的绿灯亮,B线的红灯亮。
②同样的给PORTA送“0AH”,A线黄灯亮,B线红灯亮。
③给PORTA送“21H”,A线红灯亮,B线绿灯亮。
④给PORTA送“11H”,A线红灯亮,B线黄灯亮。
这样就完成了红绿灯的转换。用A口来控制双向路口的红黄绿灯的闪亮,将控制码送入A口的数据寄存器PORTA,送1表示输出高电平、0表示输出为低电平,PORTA内容输出就可控制红黄绿灯的亮暗[3]。
3.2 8位二进制转化成2位BCD码流程图
二进制到BCD码转变流程图如图3所示。
如果直接接7段显示器,就需要2个输出端口(PORTC和PORTB),而接上CD4056后只需要1个输出端口(PORTC),这样就可以省出一个输出端口(PORTB)用于其功能扩展。二进制到BCD码转变子程序就是为了利用CD4056能完成功能而编写的。
3.3 延时子程序流程图
延时序中,整个指令执行的时间和延时时间。使用4 MHz时钟,每个指令周期需要4个震荡周期,则每条指令周期为1μs所以单指令周期执行时间为1μs,双周期指令为2μs。在这种情况下,秒级的延时需要三重循环。
延时时间=[(3×255+5)×255+7]×5+6=991 785μs=0.991 785 s
所以延时子程序整个指令执行时间(延时子程序)约1 s。
4 MPLAB-ICD在线调试
MPLAB-ICD是Microchip公司为其PIC单片机中具有片内Flash程序存储器的PIC16F87X研制的一套廉价的学习和开发工具套件。MPLAB-ICD可以用作实验阶段的评估和辅助调试。他既是一个编程器(即程序烧写器),又是一个实时仿真和程序烧写器。
用MPLAB-ICD工具套件可以实现以下工作:
①电路中实时运行和调试自己的源程序;
②硬件调试。用自己编制的程序来调试和检测自制目标板上的电路;
③程序固化。利用“在线串行编程技术”将自己设计的目标程序烧写到插在目标板上的PIC16F87X单片机中。
4.1 软件调试
在应用MPLAB-ICD实现在线调试时首先应用MPLAB-ICD提供的一个范例程序tut877.asm[2],他能完成使PORTC口8个输出口依次高点平,而MPLAB-ICD在PORTC的8个口上都接了发光二极管,那么将程序烧写进去后就能完成8个发光二极管的依次闪动。则程序烧写正确了。
接下来依次调试子程序。例如在程序调试的后期,程序已经基本能完成任务。因为单部执行时,寄存器内容正确,所以程序正确,只是烧写器有问题。所以在程序调试过程中要细心、耐心,调试时最好能够及时地记录程序调试的进程和已解决的问题,这样有利于调试工作的连续性,调试工作不会有重复。而且及时的记录调试进程有利于错误的缩小,可以更好地完成调试。
4.2 程序烧写
程序烧写的步骤如下:
①建立一个十六进制调试文件;
②新“项目”;
③项目会话窗口;
④设置节点属性;
⑤增加节点;
⑥完成对“项目”的设置;
⑦建立“项目”(Make Project);
⑧对PIC16F873进行编程;
⑨运行pro.asm软件。
程序烧写完毕后,就可以将单片机插入实验板中运行了。
4.3 整体电路设计和安装调试
原理图设计出后,就是进行原理图打印和印刷电路板的设计了。这通常是有Protel完成[3]。成形的电路这里不再赘述。
5 结 语
实验测试结果证明用本系统PIC单片机能完成交通灯一般控制过程,但功能还不够完善,比如交通灯红、黄、绿时间还不能按交通紧松完成手控调整,软件编写实现功能还不能很好控制硬件人工操作。本系统今后还有待以进一步完善,增加更强大功能,比如手控时间的调节、摄像机交通监控的控制、盲人通过的交通灯的控制等。
参考文献
[1] 施威铬.PIC单片机轻松入门[M].北京:清大学出版社,2001.
[2] 何信龙.PIC16F87x快速上手[M].北京:清 华大学出版社,2001.
[3] 赵晶.Protel99高级应用[M].北京:人民邮电出版社,2001.
[4] 徐霞,谭保成.监控播音系统的研制[J].西安工业学院学报,2001,(3).