资源描述
模拟十字路口交通灯制作
1.项目简介:项目应用以单片机为核心,根据具体硬件结构软硬件结合,加以完善。单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。而本系统采用MCS-51系列单片机AT89S51为中心器件来设计交通灯控制器,实现了通过89S51芯片的P3口和P1部份口设置红绿灯循环点亮,剩3秒时绿灯闪烁警示,交通灯信号通过P3口和P1部份口输出。首先南北方向左行绿灯亮10秒,南北直右行红灯禁止,东西全部禁止10秒以后闪烁左行绿灯3次(每秒闪一次),闪烁3次后左行转为黄灯亮2秒,左行红灯禁止,直右绿灯亮通行,东西全部禁止。南北直右绿灯30秒后接着闪烁3次,接着转为黄灯亮2秒,黄灯亮2秒后转为红灯接着东西方向左行绿灯亮10秒,东西直右行红灯禁止,南北全部禁止,后述与上述相同,只是变一个方向。本系统设计周期短、可靠性高、实用性强、操作简单、维护方便、扩展功能强。
2.选题:目前随着经济的发展,交通越来越发达,经常造成交通拥堵和交通事故,尤其是在十字路口车辆穿梭,行人熙攘的情况下危险系数直线增加,我们想通过制作交通灯了解更多交通灯原理并在其基础上改进,使其更节能环保,为社会交通尽一份力。
3.构思:通过向有关人员询问,了解到单片机AT89S51是一种低功耗、高性能CMOS8位微控制器,具有4K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80S51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案
4.研究实践过程:包括构思和设计原理图、选择购买电子元件(发光二极管,单片机AT89S51,电路板,电阻,电容,晶振)连接导线等若干材料、按照原理图制作,我们采用单片机的最小化系统是来应用设计,最小化系统是指单片机能正常工作所必须的外围元件,主要可以分成时钟电路和复位电路,我们采用的是AT89S51芯片,它内部自带4K的FLASH程序存储器,一般情况下,这4K的存储空间足够我们使用,所以我们将AT89S51芯片的第31脚固定接高电平,所以我们只用芯片内部的4K程序存储器(接低电平时使用芯片外部存储器)。单片机的时钟电路有一个12M的晶振和两个30P的小电容组成,它们决定了单片机的工作时间精度为1微秒。复位电路由10UF电容和10K电阻组成复位电路。首先在电路板布置好单片机与发光二极管等电子元件,单片机特别注意脚号对应,不能装错,否则通电时会烧坏元器件,造成无法挽回的损失,发光二极管注意正负极方向,不能装反,否则不能发光,实践中与发光二极管串接的电阻为限流电阻,以防电流过大烧坏元件。然后进行焊接,在焊接过程中特别注意烙铁头高温,以免烫伤手和烫坏元件,最后进行Keil软件编程,通过编程器下载调试。在实践过程中特别要细心,不急不燥,一步一个脚印,走一步都要认真检查,检查好后方能进行下一步,虽然遇到了很多困难和不懂的问题,通过有关人员指导与相关书本的学习,在失败中吸取经验和知识,最终成功的制作了交通灯。本模拟板通过外接5伏直流电源供电。
5.科学原理:本项目通过单片机AT89S51为中心进行控制,应用对交通灯进行编程,实现了红绿灯循环点亮,模拟十字路口交通灯的效果。
6.创新点:模拟十字路口交通灯具有低耗能,小巧,耗材少,控制灵活等优点,可以实现用投影技术将小型交通灯投影在十字路口的接收板上。
7. 未来设想:通过对公交车路线上的红绿灯制作一样编程的小型红绿灯,可以将其放入车内提前预知该路线上的所有交通灯的情况,司机可以提前控制车速,避免交通灯下的车辆拥堵造成行人出使不便。
8.程序清单如下:
#include <reg51.h>
void fun(void)
{
#pragma ASM
//南北方向 左绿灯 左黄灯 左红灯 直.右绿灯 直.右黄灯 直.右红灯
// P3.0 P1.0 P3.1 P3.2 P1.1 P3.3
//东西方向 直.右绿灯 直.右黄灯 直.右红灯 左绿灯 左黄灯 左红灯
// P3.4 P1.2 P3.5 P3.6 P1.3 P3.7
STAR: MOV P0,#0FFH
MOV P2,#0FFH
MOV P1,#0FFH
MOV P3,#0FFH
DIS0: MOV R1,#20
MOV R2,#60
MOV R3,#3
MOV R4,#4
DIS1: MOV P3,#01010110B //南北左行 ( 南北直. 右行禁止) 东西禁止
ACALL DELAY
DJNZ R1,DIS1
DIS2: SETB P3.0 //南北左行闪烁3次 ( 南北直. 右行禁止) 东西禁止
ACALL DELAY
CLR P3.0
ACALL DELAY
DJNZ R3,DIS2
DIS2a:MOV P3,#01010111B //南北左行黄灯
CLR P1.0
ACALL DELAY
DJNZ R4,DIS2a
SETB P1.0
DIS3: MOV R3,#3 //南北直。右行(南北左行禁止) 东西禁止
MOV P3,#01011001B
ACALL DELAY
DJNZ R2,DIS3
DIS4: SETB P3.2 //南北直。右行闪烁3次 (南北左行禁止) 东西禁止
ACALL DELAY
CLR P3.2
ACALL DELAY
DJNZ R3,DIS4
MOV R4,#4
DIS4a:MOV P3,#01011101B //南北直。右行黄灯
CLR P1.1
ACALL DELAY
DJNZ R4,DIS4a
SETB P1.1
MOV R1,#20
MOV R2,#60
MOV R3,#3
DIS5: MOV P3,#10010101B //东西左行 (东西直. 右行禁止) 南北禁止
ACALL DELAY
DJNZ R1,DIS5
DIS6: SETB P3.6 //东西左行闪烁3次 (东西直. 右行禁止) 南北禁止
ACALL DELAY
CLR P3.6
ACALL DELAY
DJNZ R3,DIS6
MOV R4,#4
DIS6a:MOV P3,#11010101B //东西左行黄灯
CLR P1.3
ACALL DELAY
DJNZ R4,DIS6a
SETB P1.3
DIS7: MOV R3,#3 //东西直.右行(东西左行禁止 ) 南北禁止
MOV P3,#01100101B
ACALL DELAY
DJNZ R2,DIS7
DIS8: SETB P3.4 //东西直.右行闪烁3次 (东西左行禁止) 南北禁止
ACALL DELAY
CLR P3.4
ACALL DELAY
DJNZ R3,DIS8
MOV R4,#4
DIS8a:MOV P3,#01110101B //东西直。右行黄灯
CLR P1.2
ACALL DELAY
DJNZ R4,DIS8a
SETB P1.2
LJMP DIS0 //新一轮重新开始
DELAY:MOV R5,#5 //0.5S延时(按12MHZ算)
D1:MOV R7,#200
D2:MOV R6,#250
DJNZ R6,$
DJNZ R7,D2
DJNZ R5,D1
RET
#pragma ENDASM
}
//*************** 主程序 ********************
void main(void)
{
while(1)
{
fun();
}
}
展开阅读全文