1、 目 录一、 设计任务3二、 设计要求3三、 总体设计4四、 硬件模块54.1主控系统.54.2数码管显示时间电路.74.3交通灯输出控制电路.8五、 程序模块.115.1主程序设计.115.2数码管显示子程序.115.3 LED灯显示子程序.125.4紧急状况中断子程序.165.5定时/计数子程序.16六、 系统调试.16七、 元件清单.17八、 学习心得.18九、 参考文献.19一、设计任务设计并制作一个城市交道口交通灯控制糸统二、基本要求(1) 在1平方米左右木板上制作交道口模型,装上交通灯。交道口模型如图所示。(2) 交通灯控制规则如下:1)每个街口有左拐、右拐、直行及行人四种指示灯。
2、每个灯有红、绿两种颜色。自行车与汽车共用左拐、右拐和直行灯。2)共有四种通行方式: 车辆南北直行、各路右拐,南北向行人通行。南北向通行时间为1分钟,各路右拐比直行滞后10秒钟开放。 南北向左拐、各路右拐,行人禁行。通行时间为1分钟。 东西向直行、各路右拐,东西向行人通行。东西向通行时间为1分钟,各路右拐比直行滞后10秒钟开放。 东西向左拐、各路右拐。行人禁行。通行时间为1分钟。3)在通行结束前10秒钟,绿灯闪烁直至结束。(3)不必自制电源。发挥部分:有倒计时时间显示;若交道口出现紧急情况,交警可将糸统设置成手动:全路口车辆禁行、行人通行。紧急情况结束后再转成自动状态。三、总体设计 整个系统采用
3、AT89C51单片机系统为核心,使用LED发光二极管代表各个路口的交通灯,用7SEG-MPX2-CC数码管对转换时间进行倒时.电源复位电路AT89C51单片机手动控制LED灯显示数码显示管图3.1 总体设计框图图3.2 硬件电路设计仿真图四、硬件模块 4.1主控系统整个系统采用AT89C51单片机为核心,P1口控制交通灯的亮、灭,P0口为倒数计时器显示控制端,P2口是显示器公共端的扫描口,P3.2为外部中断,当紧急情况下课按下开关,此时所有红灯亮,禁止所有车辆和行人通行。使用LED发光二极管代表各个路口的各种交通灯,用7SEG-MPX2-CC数码管对转换时间进行倒时。AT89C51是一种带4K
4、字节FLASH存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并
5、禁止其它所有部件工作直到下一个硬件复位。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。主要管脚说明:P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流
6、,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部
7、上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下所示:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(计时器0外部输入)P3.5 T1(计时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器
8、件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器
9、取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用
10、外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。图4.1 AT89C51外形图及引脚图4.2数码管显示时间电路:动态显示方式是指一位一位地轮流点亮每位显示器(称为扫描),即每个数码管的位选被轮流选中,多个数码管公用一组段选,段选数据仅对位选选中的数码管有效。对于每一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。通过调整电流和时间参数,可以既保证亮度,又保证显示。若显示器的位数不大于8位,则显示器的公共端只需一个8位I/O口进行动态扫描
11、(称为扫描口),控制每位显示器所显示的字形也需一个8位口(称为段码输出)。图4.2.1 7SEG-MPX2-CC数码管图4.2.2 数码管显示时间电路4.3 交通灯输出控制电路:道口交通灯采用LED二极管,左拐、直行、右拐、行人各一个。当发光电流为6mA时,按公式R=(5V-1.8V)/0.006计算,限流电阻应为510欧,以保护单片机输出端口。(仿真图未接电阻)显示状态流程如下:00-10车辆南北向直行、南北向行人通行 10-50,车辆南北直行、各路右拐,南北向行人通行50-60后,车辆南北直行、各路右拐,南北向行人通行,路灯闪烁00-50南北向左拐、各路右拐,行人禁行50-60南北向左拐、
12、各路右拐,行人禁行,路灯闪烁00-10东西向直行,东西向行人通行10-50东西向直行、各路右拐,东西向行人通行50-60东西向直行、各路右拐,东西向行人通行,路灯闪烁00-50东西向左拐、各路右拐。行人禁行。50-60东西向左拐、各路右拐,行人禁行,路灯闪烁五、程序模块5.1主程序设计首先程序初始化,包括定时器初始化。然后进入子程序ST1状态1。在状态1中又调用显示子程序,由于状态已不用闪烁因此不用调用闪烁子程序。状态1只用显示10s,所以判断A是否等于50H,不等于则继续执行ST1语句,等于则跳转到ST2中。同时(50H)加1。在ST2中雨ST1不同的是ST2中最后10s,灯要闪烁。因此先判
13、断A是否等于10,如果是则同时调用显示子程序和SHANSHUO1子程序,将(50H)的值和01H比较,若等于则跳转到ST3,同时(50H)加1。在ST3中判断A是否等于10H,等于则同时调用显示子程序和SHANSHUO2子程序,将(50H)的值和02H比较,若等于则跳转到ST4中。其他状态同理。考虑到有紧急状况发生,程序设计了一个外部中断INT0,当紧急状况发生时,按下开关,给P3.2口一个低电平,触发外部中断,进入中断服务程序。撤销中断时,程序继续执行。主程序:ORG 1000HMAIN: MOV R6,#100 ;主程序; SETB EX0 CLR IT0 MOV 50H,#00H MOV
14、 TMOD,#10H ;初始化 MOV TH1,#0D8H MOV TL1,#0F0H MOV IE,#8DH MOV 22H,#60H ;60s; SETB TR1 5.2数码管显示子程序显示程序如下:它将显示缓冲区4个字节数据依次读出,每一字节数据分两次分别对应显示到数码管上(读一字节显示两位,直到四个数码管显示完毕)DISP: MOV A,R2 ;显示子程序。 ANL A,#0F0H SWAP A MOV 60H,A MOV A,R2 ANL A,#0FH MOV 61H,A MOV A,R3 ANL A,#0F0H SWAP A MOV 62H,A MOV A,R3 ANL A,#0F
15、H MOV 63H,A MOV 40H,#04H MOV R5,#0FEH MOV R0,#60HLLP: MOV A,R0 MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV A,R5 MOV P2,A LCALL DELAY1 MOV P2, #0FFH; RL A MOV R5,A INC R0 DJNZ 40H,LLP RETDELAY1: ;延时子程序 MOV R4,#02HDL2: MOV R7,#0FFH DJNZ R7,$ DJNZ R4,DL2 RETTABLE:DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7F
16、H,6FH,00H END5.3 LED灯显示子程序状态1:车辆南北直行,南北向行人通行10s。子程序:ZT1: MOV P1,#0FAH ;第一个状态,南北直行,行人通行; MOV R2,22H MOV R3,22H LCALL DISP ;调用显示子程序。 MOV A,22H CJNE A,#50H,ZT1状态2:车辆南北直行、各路右拐,南北向行人通行50s。通行结束前10s闪烁。子程序:ZT2: MOV P1,#0D8H ;第二个状态,南北直行,各路右拐50s; MOV R2,22H MOV R3,22H LCALL DISP ;调用显示子程序。 MOV A,22H CJNE A,#10
17、H,ZT2 SHANSHUO1: MOV P1,#0D8H MOV R1,#100LIANG1: MOV R2,22H MOV R3,22H LCALL DISP MOV A,22H JZ CASE1 DJNZ R1, LIANG1 MOV R1,#100MIE1: MOV P1,#0DDH ;闪烁灭 MOV R2,22H MOV R3,22H LCALL DISP MOV A,22H JZ CASE1 DJNZ R1,MIE1 MOV A,50HCASE1: CJNE A,#01H,SHANSHUO1 ;闪烁10s结束状态3: 南北向左拐、各路右拐,行人禁行。通行时间为1分钟。子程序:ZT3
18、: MOV P1,#0D5H ;第三个状态,南北左拐,各路右拐60s; MOV R2,22H MOV R3,22H LCALL DISP ;调用显示子程序。 MOV A,22H CJNE A,#10H,ZT3SHANSHUO2: MOV P1,#0D5H MOV R1,#100LIANG2: MOV R2,22H MOV R3,22H LCALL DISP MOV A,22H JZ CASE2 DJNZ R1,LIANG2 MOV R1,#100MIE2: MOV P1,#0FFH MOV R2,22H MOV R3,22H LCALL DISP MOV A,22H JZ CASE2 DJNZ
19、 R1, MIE2 MOV A,50H CASE2: CJNE A,#02H,SHANSHUO2状态4:车辆东西直行,东西向行人通行10s。子程序:ZT4: MOV P1,#0AFH ;第四个状态,东西直行; MOV R2,22H MOV R3,22H LCALL DISP ;调用显示子程序。 MOV A,22H CJNE A,#50H,ZT4状态5:车辆东西直行、各路右拐,东西向行人通行50s。通行结束前10s闪烁。子程序:ZT5: MOV P1,#08DH ;第五个状态,东西直行,各路右拐50s; MOV R2,22H MOV R3,22H LCALL DISP ;调用显示子程序。 MOV
20、 A,22H CJNE A,#10H,ZT5SHANSHUO3: MOV P1,#08DH MOV R1,#100LIANG3: MOV R2,22H MOV R3,22H LCALL DISP MOV A,22H JZ CASE3 DJNZ R1,LIANG3 MOV R1,#100MIE3: MOV P1,#0DDH MOV R2,22H MOV R3,22H LCALL DISP MOV A,22H JZ CASE3 DJNZ R1,MIE3 MOV A,50HCASE3: CJNE A,#03H,SHANSHUO3状态6: 东西向左拐、各路右拐,行人禁行。通行时间为1分钟。子程序:ZT
21、6: MOV P1,#5DH ;第六个状态,东西左拐,各路右拐60s; MOV R2,22H MOV R3,22H LCALL DISP ;调用显示子程序。 MOV A,22H CJNE A,#10H,ZT6 SHANSHUO4: MOV P1,#5DH MOV R1,#100LIANG4: MOV R2,22H MOV R3,22H LCALL DISP MOV A,22H JZ CASE4 DJNZ R1,LIANG4 MOV P1,#0FFH MOV R1,#100MIE4: MOV R2,22H MOV R3,22H LCALL DISP MOV A,22H JZ CASE4 DJNZ
22、 R1,MIE4 MOV A,50HCASE4: CJNE A,#00H,SHANSHUO45.4紧急状况中断子程序中断设置为外部中断INTT0。当手动按下开关,进入中断程序,首先将显示程序缓冲口中的数据压入堆栈保护起来,全部红灯亮,计数器停止计数。中断结束后,继续中断前的工作。INTT0: ;外部中断0 PUSH ACC ;保护显示程序,中断结束后继续显示 MOV A,R2 PUSH ACC MOV A,R3 PUSH ACC MOV P1,#0FFH ;全部红灯亮 CLR TR1JINJI: MOV R2,22H ;若交道口出现紧急情况,交警可将糸统设置成手动,全路口禁止车辆、行人通行。紧
23、急情况结束后再转成自动状态。 MOV R3,22H LCALL DISP JNB P3.2,JINJI SETB TR1 POP ACC MOV R3,A POP ACC MOV R2,A POP ACC RETI5.5定时/计数子程序 定时器采用T1定时器,定时10ms,循环100次刚好为1s,TT1: MOV TH1,#0D8H ;定时器1,定时10ms MOV TL1,#0F0H DJNZ R6,EXIT MOV R6,#100 ;定时器定时100次六、系统调试6.1仿真调试 本次我们使用Keil uVision4与Proteus 6 professional连接仿真调试,因为整个系统含
24、有很多个子程序,所以调试时把各个子程序分别调试,成功后进行整体调试。在调试过程中发现了一些错误,加了修改。问题1,在中断服务程序中必须将与主函数中共用的变量进行堆栈,如果不堆栈程序执行结果将无法想象。 问题2,开始直接将22H的内容用来倒计时,做减一的工作,但在调试时发现当它减到0时与闪烁退出程序发生冲突,于是又用了一个寄存器50H,闪烁程序每次与(50H)的值比较判断。综合仿真调试成功。6.2 硬件调试焊接电路完毕后,使用AT89C51最小系统驱动控制。逐步调试了LED灯闪烁电路,数码管倒计时显示电路,紧急情况手动控制电路,各个模块均无问题。但连接整个电路时发现单片机驱动不了,于是在数码管上
25、加传输门实现电流放大。将程序写入烧录器,连接硬件,硬件运行正常,基本达到预计功能。硬件调试成功。七、元件清单元件名称数量AT89C51(单片机)1RESPACK8(排阻)17SEGMPX2CC(数码管)4CAP(0.1UF)(电容)4LED_GREEN16单控开关2按钮(自动复位)1RES(0.51K)16RES(10K)1烧录器1底板174LS042八、学习心得专业知识方面:通过本次课程设计,设为加深了对单片机的理解,并且熟悉了单片机系统的设计流程,收获丰硕,也对以后的单片机学习铺垫了道路。两外,我们学会了Keil uVision4与Proteus 6 professional两个软件,想必
26、在以后的学习单片机编程和仿真中大有裨益。本次设计比较粗糙,基本能满足要求,但是总还是有一些欠缺,比如没有加入红灯而是直接将绿灯灭了就看做红灯,导致在闪烁的时候有异议。如果需更满足需要,则在硬件电路中加入电压比较器,将红灯和绿灯并联在电路中。还有,由于时间紧迫,我们的发挥部分方案,比如超速监测等没有应用到硬件部分。个人素质方面:经历了这次课程设计,使我们认识了自己在专业课程方面的欠缺和漏洞,比如程序方面,由于平时对Keil uVision4与Proteus 6 professional两个软件不是很熟悉,但为了要先做出仿真电路图,我们用了近两天的时间来熟悉软件、编程调试、修改方案。硬件方面,之前
27、我们没有焊接过电路板,这次我们要从零学起,开始我们要两人配合才能焊接一个灯,后来慢慢熟悉,一个人就可以焊接;中间我们还要多次调试,失败了很多次,但我们从不气馁,一直坚持。实验期间,我们还查阅了大量的资料,向老师和同学求教,使我们意识到不能只停留在书本知识上,要把学到的东西用到实践中去,这样才能学以致用、举一反三。团队合作方面:经过4天的设计学习,我们觉得个人的能力是有限的,但团队的力量是强大的。我们团结一致,共同克服困难。我们有明确的分工,以提高工作效率;我们制定了严密的工作计划,一定的时间段里完成规定的任务,丝毫不懈怠。在合作实验过程中,很多我看不出的问题,队友却能看出来;一个人想不出的办法
28、,两个人就能想出来,真的应验了“团结力量大”的古话。九、参考文献MCS-51系列单片机系统及其应用(第二版),高等教育出版社百度百科新浪爱问附件1:软件程序:ORG 0000H LJMP MAIN ORG 0003H LJMP INTT0 ORG 001BH LJMP TT1 ORG 0100HTT1: MOV TH1,#0D8H ;定时器1,定时10ms MOV TL1,#0F0H DJNZ R6,EXIT MOV R6,#100 ;定时器定时100次 PUSH ACC MOV A,22H JNZ WANG INC 50H MOV A,50H CJNE A,#04H,WANG MOV 50H
29、,#00HWANG: MOV A,22H JNZ JIANYI MOV A,#60H JIANYI: ;显示计数器减一; ADD A,#99H DA A MOV 22H,A POP ACCEXIT: RETIINTT0: ;外部中断0 PUSH ACC ;保护显示程序,中断结束后继续显示 MOV A,R2 PUSH ACC MOV A,R3 PUSH ACC MOV P1,#0FFH ;全部红灯亮 CLR TR1JINJI: MOV R2,22H;若交道口出现紧急情况,交警可将糸统设置成手动:全路口禁止车辆、行人通行。紧急情况结束后再转成自动状态。 MOV R3,22H LCALL DISP
30、JNB P3.2,JINJI SETB TR1 POP ACC MOV R3,A POP ACC MOV R2,A POP ACC RETI ORG 1000HMAIN: MOV R6,#100 ;主程序; SETB EX0 CLR IT0 MOV 50H,#00H MOV TMOD,#10H ;初始化 MOV TH1,#0D8H MOV TL1,#0F0H MOV IE,#8DH MOV 22H,#60H ;60s; SETB TR1ZT1: MOV P1,#0FAH ;第一个状态,南北直行,行人通行; MOV R2,22H MOV R3,22H LCALL DISP ;调用显示子程序。 M
31、OV A,22H CJNE A,#50H,ZT1ZT2: MOV P1,#0D8H ;第二个状态,南北直行,各路右拐50s; MOV R2,22H MOV R3,22H LCALL DISP ;调用显示子程序。 MOV A,22H CJNE A,#10H,ZT2 SHANSHUO1: MOV P1,#0D8H MOV R1,#100LIANG1: MOV R2,22H MOV R3,22H LCALL DISP MOV A,22H JZ CASE1 DJNZ R1, LIANG1 MOV R1,#100MIE1: MOV P1,#0DDH ;闪烁灭 MOV R2,22H MOV R3,22H
32、LCALL DISP MOV A,22H JZ CASE1 DJNZ R1,MIE1 MOV A,50HCASE1: CJNE A,#01H,SHANSHUO1 ;闪烁10s结束ZT3: MOV P1,#0D5H ;第三个状态,南北左拐,各路右拐60s; MOV R2,22H MOV R3,22H LCALL DISP ;调用显示子程序。 MOV A,22H CJNE A,#10H,ZT3SHANSHUO2: MOV P1,#0D5H MOV R1,#100LIANG2: MOV R2,22H MOV R3,22H LCALL DISP MOV A,22H JZ CASE2 DJNZ R1,L
33、IANG2 MOV R1,#100MIE2: MOV P1,#0FFH MOV R2,22H MOV R3,22H LCALL DISP MOV A,22H JZ CASE2 DJNZ R1, MIE2 MOV A,50H CASE2: CJNE A,#02H,SHANSHUO2 ZT4: MOV P1,#0AFH ;第四个状态,东西直行; MOV R2,22H MOV R3,22H LCALL DISP ;调用显示子程序。 MOV A,22H CJNE A,#50H,ZT4ZT5: MOV P1,#08DH ;第五个状态,东西直行,各路右拐50s; MOV R2,22H MOV R3,22H
34、 LCALL DISP ;调用显示子程序。 MOV A,22H CJNE A,#10H,ZT5SHANSHUO3: MOV P1,#08DH MOV R1,#100LIANG3: MOV R2,22H MOV R3,22H LCALL DISP MOV A,22H JZ CASE3 DJNZ R1,LIANG3 MOV R1,#100MIE3: MOV P1,#0DDH MOV R2,22H MOV R3,22H LCALL DISP MOV A,22H JZ CASE3 DJNZ R1,MIE3 MOV A,50HCASE3: CJNE A,#03H,SHANSHUO3ZT6: MOV P1,#5DH ;第六个状态,东西左拐,各路右拐60s; MOV R2,22H MOV R3,22H LCALL DISP ;调用显示子程序。 MOV A,22H CJNE A,#10H,ZT6