1交通灯设计班级:姓名:学号:2016年5月5日21课程设计总体目标1.1总体结构1.设计一个十字路口交通控制器。2.开始运行后,先南北绿灯60S(通行60S)、东西红灯65S(禁止65S);然后,南北转黄灯闪烁5S;接着,东西绿灯30S(通行30S),南北红灯35S(禁止35S);最后,东西转黄灯闪烁5S;3.在二极管亮或者闪烁的同时两个方向的数码管显示倒计时,东西向一组数码管,南北向一组数码管。2硬件设计包括硬件电路及工作原理描述1.设计思路模拟交通灯控制电路时运用单片机来控制红、黄、绿三色LED灯显示,并通过定时器中断来控制数码管显示倒计时。红、黄、绿交替闪亮,利用数码管计数显示间隔等,用于管理十字路口的车辆及行人通过,计时牌显示路口通行转换剩余时间。2.单片机总控制电路如下图:3STC89C51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,STC89C51在众多嵌入式控制应用系统中得到广泛应用。3.74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。74LS245还具有双向三态功能,既可以输出,也可以输入数据。4当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。当片选端/CE低电平有效时,DIR=“0”,信号由B向A传输;(接收)DIR=“1”,信号由A向B传输;(发送)当CE为高电平时,A、B均为高阻态。由于P2口始终输出地址的高8位,接口时74LS245的三态控制端1G和2G接地,P2口与驱动器输入线对应相连。P0口与74LS245输入端相连,E端接地,保证数据线畅通。8051的/RD和/PSEN相与后接DIR,使得RD且PSEN有效时,74LS245输入(P0.1←D1),其它时间处于输出(P0.1→D1)。3软件设计程序流程框图5程序:C语言:#includereg51.h#defineucharunsignedchar#defineuintunsignedintsbitRED_A=P0^0;//东西向指示灯sbitYELLOW_A=P0^1;sbitGREEN_A=P0^2;sbitRED_B=P0^3;//南北向指示灯sbitYELLOW_B=P0^4;sbitGREEN_B=P0^5;//延时倍数,闪烁次数,操作类型变量6ucharTime_Count=0,Flash_Count=0,Operation_Type=1;//定时器0中断函数voidT0_INT()interrupt1{TL0=-50000/256;TH0=-50000%256;switch(Operation_Type){case1://东西向绿灯与南北向红灯亮RED_A=0;YELLOW_A=0;GREEN_A=1;RED_B=1;YELLOW_B=0;GREEN_B=0;if(++Time_Count!=100)return;//65s(65*100*50ms)切换Time_Count=0;Operation_Type=2;break;case2://东西向黄灯开始闪烁,绿灯关闭if(++Time_Count!=8)return;Time_Count=0;YELLOW_A=~YELLOW_A;GREEN_A=0;if(++Flash_Count!=10)return;//闪烁Flash_Count=0;Operation_Type=3;break;case3://东西向红灯与南北向绿灯亮RED_A=1;YELLOW_A=0;GREEN_A=0;RED_B=0;YELLOW_B=0;GREEN_B=1;if(++Time_Count!=100)return;//30s(30*100*50ms)切换Time_Count=0;Operation_Type=4;break;case4://南北向黄灯开始闪烁,绿灯关闭if(++Time_Count!=8)return;Time_Count=0;YELLOW_B=~YELLOW_B;GREEN_A=0;if(++Flash_Count!=10)return;//闪烁Flash_Count=0;Operation_Type=1;break;}}//主程序voidmain()7{TMOD=0x01;//T0方式1IE=0x82;TR0=1;while(1);}汇编语言:ZXEQU42HZWEQU43HKCOUNTEREQU50HORG0LJMPMAINORG0BHLJMPT0INTORG30HMAIN:MOVSP,#6FHMOV46H,#2;0.1sMOVTMOD,#01HMOVTH0,#3CH;50msMOVTL0,#0D4HMOVIE,#82HSETBTR0LP1:LCALLZT1SJMPLP1T0INT:CLRTR0PUSHACCPUSH0DJNZ46H,T0MOV46H,#2INCR1;判断用数字变量DECR2;南北计时变量DECR3;东西数字变量T0:MOVTH0,#3CHMOVTL0,#0D4HSETBTR0P0P0POPACCRETIZT1:MOVR2,#60MOVR3,#66;南北绿灯60s,东西红灯65s8L0:MOVP1,#23HMOVP3,#21HLCALLDATAPROLCALLKEYPROLCALLDISPMOVA,R2H1:CJNER1,#61,L0MOVR1,#0MOVP1,#43HMOVP3,#41HMOVR2,#5;南北黄灯5秒,东西仍是红灯H2:MOVA,R1;南北黄灯闪烁开始MOVB,#2DIVABMOVA,BCJNEA,#1,L1MOVP1,#43HMOVP3,#41HLCALLDATAPROLCALLKEYPROLCALLDISPSJMPL2L1:MOVP1,#03HMOVP3,#01HLCALLDATAPROLCALLKEYPROLCALLDISPL2:CJNER1,#6,H2MOVR1,#0;南北黄灯闪烁结束MOVR2,#36MOVR3,#30;南北红灯35秒,东西绿灯30秒T1:MOVP1,#15HMOVP3,#12HLCALLDATAPROLCALLKEYPROLCALLDISPH3:CJNER1,#36,T1MOVR1,#0MOVP1,#19HMOVP3,#14HMOVR3,#5;南北仍是红灯,东西黄灯5秒H4:MOVA,R1;东西黄灯闪烁开始9MOVB,#2DIVABMOVA,BCJNEA,#1,L3MOVP1,#18HMOVP3,#14HLCALLDATAPROLCALLKEYPROLCALLDISPSJMPL4L3:MOVP1,#11HMOVP3,#10HLCALLDATAPROLCALLKEYPROLCALLDISPL4:CJNER1,#6,H4MOVR1,#0;东西黄灯闪烁结束RETDISP:MOVR0,#20HMOV44H,#8MOVZW,#0FEHLP2:MOVZX,@R0LCALLDISPLEDINCR0MOVA,ZWRLAMOVZW,ADJNZ44H,LP2RETDISPLED:MOVA,ZWMOVP0,AMOVDPTR,#TABMOVA,ZXMOVCA,@A+DPTRMOVP2,ALCALLDELAYRETDELAY:MOV41H,#20DL1:MOV42H,#50DL2:DJNZ42H,DL2DJNZ41H,DL110RETTAB:DB03FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDATAPRO:MOVA,R2;将计时变量分十位,个位MOVB,#10DIVABMOV20H,AMOV26H,AMOV21H,BMOV27H,BMOVA,R3MOVB,#10DIVABMOV22H,AMOV24H,AMOV23H,BMOV25H,BRET4实验结果115心得经过了8周的单片机课程的学习,我们掌握了一定的单片机原理知识,但是却没有运用实践的过程,因此在实际操作方面匮乏一定的经验。此次课程设计就为我们带来的很好的机会,通过使用VmwareWorkstatio12.0虚拟机运行Keil3来不断进行调试单片机,我成功的将课本上的知识运用到了实际中去,在实践中锻炼了动手能力,增加了对单片机的兴趣,也巩固了课堂上学到的东西。