1、2.各元器件选择及其功能介绍:1)元器件列表2) 元件名称 型号 数量/个 用途 单片机 AT89C51 1 控制核心晶振 12MHZ 晶振电路 电容 30pF 2 电解电容 10uF 复位电路 电阻 5.1K 发光二极管 LED 12 红、黄、绿灯 集成块 74LS08 按键电路 220 13 LED限流 470 8 数码管电路 电阻 1K 7数码管驱动、按键电路数码管 GC-3461BS 显示电路 微动开关 3 三级管PNP 8550 4 数码管驱动电路表1-12)2位8段数码管工作原理:2位8段数码管电路采用“共阴”连接,阴极公共端(COM)由晶体管推动。如图4-3所示:段码和位码,段码
2、即段选信号 SEG,它负责数码管显示的内容,图中 ag、dp组成的数据(a 为最低位,dp 为最高位)就是段码。位码即位选信号 DIG,它决定哪个数码管工作,哪个数码管不工作。当需要某一位数码管显示数字时,只需要先选中这位数码管的位信号,再给显示数字的段码。3.设计原理图:红绿灯整体示意图图1-2交通信号灯的状态表状态北西南东绿黄红001100101111023表1-2S1S2S3S4时间30s5s东西道红灯亮绿灯亮黄灯亮南北道共阳与共阴数码管自行代码字型共阳极代码共阴极代码C0H3FH990H6FHF9H06HA88H77HA4H5BHB83H7CHB0H4FHCC6H39H499H66HD
3、A1H5EH592H6DHE86H79H682H7DHF8EH71H7F8H07H灭FFH00H880H7FH表1-31、时钟电路模块时钟电路由一个晶体振荡器12MHZ和两个30pF的瓷片电容组成。时钟电路用于产生单片机工作所需要的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系。单片机本身就如一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信 号控制下严格地工作。其电路如图1-3所示:图1-32、复位电路模块复位电路是使单片机的CPU或系统中的其他部件处于某一确定的初始状态,并从这状态开始工作,除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于
4、死锁状态时,为摆脱困境,也需按复位电路以重新启动。本设计采用的是按键复位电路。其电路如图1-4所示:图1-43、主控制系统模块主控制器采用AT89C51,是ATMEL公司生产的一款性能稳定的8位单片机。AT89C51具有1个8KB的FLASH程序存储器,1个512字节的RAM,4个8位的双向可位寻址I/O端口,3个16位定时/计数器及1个串行口和6个向量二级中断结构。单片机的P0口分别用于控制南北及东西的通行灯,P2口和P34-P37口用于4组4位LED计时器的控制,紧急车辆通行时使用外中断0(P32)和外中断1(P33),进行手动按键,即可转换。4、交通灯输出控制模块道口交通灯指示采用高亮度
5、红、黄、绿发光二极管进行提示。当R=220欧时,按公式A=(5-1.8)/R计算,电路中的电流大小应为A=14.545mA.由于每个路口的通行双向指示处理相同,因此每个端口应具有3A的吸收电流能力。5、时间显示电路模块 道口通行剩余时间采用高亮红色7段LED发光数码管显示,采用共阳数码管,如用单片机吸收电流驱动,列扫描驱动使用三极管,按每段6mA电流计算,全显示字形“8”时,每个数码需6mA*8=48mA,由于时间显示每个道口相同,共需要电流192mA,因此设计中也采用了中功率三极管8550.其显示电路如图1-6所示:图1-56、紧急通车电路模块 为了实现此功能,利用单片机中断达到目的。利用一
6、个手动按钮开关接至单片机外部中断0,同时在软件设计时将其设定为最高优先级,当其按下时,四方全为红灯,同时将中断位置的PSW、ACC进栈保护,当其计时完了之后,回到原来的位置进行执行。再利用一个手动按钮接至单片机外部中断1当其按下时,如果是东西道是红灯,而南北道是绿灯,则将其置为东西是绿灯,南北是红灯;如果是东西道是绿灯,而南北道是红灯,则将其置为东西是红灯,南北是绿灯。两种情况都是执行完后,回到断点处继续执行。第三章软件设计1.程序:#include #define uchar unsigned char #define uint unsigned int #define time 50000
7、 #define on 0 #define off 1sbit RED_ZHU = P00; /南北 红灯 sbit YELLOW_ZHU = P01;/南北 黄灯sbit GREEN_ZHU = P02; /南北 绿灯 sbit RED_ZHI = P03; /东西 红灯sbit YELLOW_ZHI = P04; /东西 黄灯sbit GREEN_ZHI = P05; /东西 绿灯sbit P23 = P34;sbit P22 = P35; /东西方向数码管位选sbit P21 = P36;sbit P20 = P37; /南北方向数码管位选sbit int0_key = P32;sbit
8、 int1_key = P33;void display1(uchar,uchar);void display2(uchar,uchar);void delayms(uint k);uchar temp1,temp2,temp3,temp4,temp5,temp6;/*=倒计时=*/uchar N = 50,Y = 45,Z = 50,M = 75,G = 80,U =80;uchar C50ms,t0;uchar seg = 1;uchar flag=0,led_data_temp;void InitialT1(void) TMOD = 0x11; /定时器0,1工作在方式1 TH1 = (
9、65536 - time)/256; /相当于(65536-time)/256; TL1 = (65536 - time)%256;/初值为time(50ms) TR1 = 1;/开定时器1中断 ET1 = 1;/允许定时器1中断 ET0 = 1; TH0 = (65536 - time)/256; TL0 = (65536 - time)%256; EX0 = 1; /允许外部中断0 IE0 = 1;/启动外部中断0 PX0 = 1; EX1=1; IE1=1; EA = 1; /开总中断void int0(void) interrupt 0 /外中断0 flag = 0; led_data
10、_temp = P0; t0 = 20; if(!int0_key) delayms(10); if(!int0_key) while(!int0_key); TH0 = (65536 - time)/256; TL0 = (65536 - time)%256; TR1 = 0; TR0 = 1; EX0 = 0; EX1 = 0; C50ms = 0; void int1(void) interrupt 2 /外部中断1 t0=15; flag = 1; if(RED_ZHU = 0) & (GREEN_ZHI = 0)|(YELLOW_ZHI = 0)&(RED_ZHU = 0) P0 =
11、 0xff; GREEN_ZHU = 0; RED_ZHI = 0; else /if(RED_ZHI = 0)&(GREEN_ZHU = 0) GREEN_ZHI = 0; RED_ZHU = 0;int1_key) int1_key)int1_key);void ISRT0(void) interrupt 1/定时器0中断服务子程序 temp1 = N,temp2 = Y,temp3 = Z,temp4 = M,temp5 = G,temp6 = U; /重装初值time YELLOW_ZHU=1; /如果在黄5S时进行熄灭黄灯 YELLOW_ZHI=1;flag) P0 = 0xf6;
12、C50ms+; if(C50ms 19) t0-; C50ms = 0; if(t0 = 0) P0 = led_data_temp; N = temp1,Y = temp2,Z = temp3,M = temp4,G = temp5,U = temp6; TR0 = 0;/禁止定时器1中断 TR1 = 1;/开定时器1中 EX1 = 1; /EX0 = 1; C50ms = 0; return; void ISRT1(void) interrupt 3 /定时器1中断服务子程序 N-; M-; Y-; Z-; G-; U-;/*=延时=*/void Delay10uS(uchar secon
13、d) uint i; while(second-) != 0) for(i = 0;i 5;i+) void delayms(uint k) uint i,j; for(i = 0; k; for(j = 0;j 120;j+);/*=数码管控制=*/uchar code discode= 0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/共阳数码管0-9代码void display1(uchar num1,uchar num2) /控制南数码管显示 P2=discodenum1; P21=on; Delay10uS(10); P21=off
14、; /低位 P2=discodenum2; P20=on; P20=off; /高位 void display2(uchar num3,uchar num4) /控制东西数码管显示 P2 = discodenum3; P23 = on; P23 = off; /低位 P2 = discodenum4; P22 = on; P22 = off;/*=主函数=*/main()/*=初始状态:东西南北都红灯=*/ RED_ZHU=on; RED_ZHI=on; delayms(1000); RED_ZHU = off; RED_ZHI = off; InitialT1(); while(1) / 初
15、始化计时器 /*=状态1:东西绿灯(45s) 南北红灯(40s)=*/ /*=状态2:东西黄灯(5s) 南北红灯(5s)=*/ RED_ZHI = on; GREEN_ZHU = on; while(N ! if(TR0 = 1) display2(t0/10,t0%10);/ 当t0=20时东西、南北红灯(20s) display1(t0/10,t0%10);/ 当t0=15时东西、南北红、绿灯交换点亮 else if(N = 5) while(Z ! if(TR0 = 1) display2(t0/10,t0%10); display1(t0/10,t0%10); else display
16、1(N/10,N%10); / 东西黄灯(5s) display2(Z/10,Z%10); / 南北红灯(5s) GREEN_ZHU = off; YELLOW_ZHU = on; else display1(N/10,N%10); / 东西绿灯(45s) display2(Y/10,Y%10); / 南北红灯(40s) GREEN_ZHU = off; RED_ZHI = off; YELLOW_ZHU = off; P0 = 0xff; /数码管全关掉 Delay10uS(1); /*=状态3:东西红灯(20s) 南北绿灯(25s)=*/ /*=状态4:东西红灯(5s) 南北黄灯(5s)=
17、*/ GREEN_ZHI = on; RED_ZHU = on; while(G ! display2(t0/10,t0%10); display1(t0/10,t0%10); if(G = 5) while(U ! display2(G/10,G%10);/ 东西红灯(5s) display1(U/10,U%10);/ 南北黄灯(5s) GREEN_ZHI = off; YELLOW_ZHI = on; display2(G/10,G%10);/ 东西红灯(25s) display1(M/10,M%10);/ 南北绿灯(20s) GREEN_ZHI = off; RED_ZHU = off;
18、 YELLOW_ZHI = off; /*=重新赋值=*/ N =50,Y = 45,Z = 50,M = 75,G = 80,U =80;第四章仿真结果及其总结1.仿真结果图:南北通行:图1-6通行警告:图1-7东西通行:图1-82.总结:通过这次交通灯的课程设计,使我得到了一次用专业知识、专业技能分析和解决现实问题的能力。使我在单片机的基本原理、单片机应用学习过程中,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为一名合格的应用型人才打下良好的基础。综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更深层次的理解和认识。在此,由于自身能力有限,在课程设计中碰到了很多的问题,我通过查阅相关书籍、资料以及和周围同学交流得到解决。还有交通灯是我们生活中非常常见的一种东西,对于我们学以致用的这种能力得到了很好锻炼,能够为我们以后的工作于学习打下基础。通过合作,我们的合作意识得到加强。合作能力得到提高。上大学后,很多同学都没有过深入的交流,在设计的过程中,我们用了分工与合作的方式,每个人互责一定的部分,同时在一定的阶段共同讨论,以解决分工中个人不能解决的问题,在交流中大家积极发言,和提出意见,同时我们还向别的同学请教。在此过程中,每个人都想自己的方案得到实现,积极向同学说明自己的想法。能过比较选出最好的方案。在这过程也提高了我们的表过能力。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1