1、目录第1章 设计任务分析及方案选择11.1设计任务及分析11.2 方案设计及元器件1方案设计1元器件的选择2第2章 系统硬件设计32.1时钟电路设计32.2复位电路设计32.3灯控制电路设计42.4倒计时显示电路设计42.5按键控制电路设计5第3章 系统软件设计53.1 交通灯的设计程序流程图53.2定时器0及中断响应7第4章 调试及性能分析9第5章 总结9附录一 系统仿真图12附录二 程序代码13第一章 元器件及方案选择1.1设计任务及分析1)设计一个十字路口的交通灯控制电路,要求南北方向车道和东西方向车道两条交叉道路上的车辆交替运行,南北每次通行时间都设为60秒、东西每次通行间为80秒,时
2、间可设置修改。2)在绿灯转为红灯时,要求黄灯先亮3秒钟,才能变换运行车道;3)黄灯亮时,要求每秒闪亮一次。4)东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用计时的方法)。5)一道有车而另一道无车(实验时用开关 K0 和 K1 控制),交通灯控制系统能立即让有车道放行。 6)有紧急车辆要求通过时,系统要能禁止普通车辆通行,A、B道均为红灯,紧急车由K2 开关模拟。1.2 方案设计及元器件方案设计根据设计的要求可知,系统的硬件原理框图如下图所示。 系统硬件框图元器件的选择AT89S51、LED数码管、晶振、发光二极管、电容、电阻、开关。AT89C51单片机
3、简介AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多
4、嵌入式控制系统提供了一种灵活性高且价廉的方案。主要特性:与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年全静态工作:0Hz-24MHz三级程序存储器锁定1288位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路第2章 系统硬件设计2.1时钟电路设计时钟电路原理图如图所示,采用内部时钟产生方式,在XTAL1和XTAL2两端跨接晶体或陶瓷振荡器,与内部反相器构成稳定的自击荡器。其发出的时钟脉冲直接送入片内定时控制部件。2.2复位电路设计上电+按钮电平复位电路原理图如图所示,采用上电+
5、按钮电平复位方式,当按下按钮时,RST管脚高电平触发。为保证复位可靠,RC时间常数应大于两个机器周期,一般电容取1pF,电阻取1K。2.3灯控制电路设计 交通灯状态显示电路如图所示,交通灯状态显示电路由东西南北四个方向各三个LED灯组成,分别显示四个方向上红、黄、绿三个状态,用以指示十字路口各方向车辆的行驶。通过软件编程,可使路口交通变化情况为:南北方向车道和东西方向车道两条交叉道路上的车辆交替运行,南北方向每次通行时间都设为60秒、东西方向每次通行间为80秒;在绿灯转为红灯时,要求黄灯先亮3秒钟,才能变换运行车道;黄灯亮时每秒闪亮一次。2.4倒计时显示电路设计 数码管显示电路原理图如图所示,
6、由一个共阳极四位数码管来实现倒计时。由于P0口输出电流小,需外接上拉电阻,COME端接5V电源。2.5按键控制电路设计 键盘电路原理图如图所示,开光控制由PD1-PD5四个连接到单片机的控制按钮组成。通过软件编程,按下PD1电路进入外部中断响应,数码显示时间将停止倒计时,此时,可通过按钮PD3和PD4设置通行时间,每按一下PD3时间增加1s,而按下PD4时间减少1s。按下PD5将使程序重新进入循环点亮状态。第3章 系统软件设计3.1 交通灯的设计程序流程图 对于一个交通路口来说,能在最短的时间内达到最大的车流量,就算是达到了最佳的性能,我们称在单位时间内多能达到的最大车流为车流量,用公式:车流
7、量=车流/时间来表示。 东西和南北方向的放行时间的长短是依据路口的各个方向平时的车流量来设定,并且S1、S2、S3、S4各个状态保持的时间之有严格的对应关系,其公式如下示。T-S1+T-S2=T-S3T-S2=T-S4T-S1=T-S3我们可以依据上述的标准来改变车辆的放行时间。按照一般的规则,一个十字路口可分为主干道和次干道,主干道的放行时间大于次干道的放行时间,我们设定值时也应以此为参考。南北通行开始中断?中断程序返回?K0=0?K1=0?DX=0?东西通行中断?中断程序NB=0?K0=0?K1=0?返回?NYNYYNNYNNNNNNYYYYYY203.2定时器0及中断响应 80C51系列
8、单片机内部都设有2个16位的可编程定时计数器,可分别称为“定时器0(T0)”和“定时器1(T1)”。16位的定时计数器实质上是一个加计数器,其控制电路受软件控制、切换。通过软件可以设置为种工作方式,每种方式都可以用作定时或计数。当选择定时计数器作为定时器工作时,计数器的加1信号有震荡器的12分频信号产生,即每经过个机器周期,计数器增1,直至计满溢出为止。显然,定时器的定时时间与系统的振荡频率有关。因为个机器周期等于12个振荡周期,所以计数频率fCOUNT=(1/12)fOSC。如果晶振频率为12MHz,则计数周期:T=1/(121000000)Hz(1/2)=1S 这是最短的定时周期。若要延长
9、定时时间,则须改变定时期的初值,并要适当选择定时器的长度(如8位、13位或16位等)。TCON用语控制定时器的启动、停止以及标明定时器的溢出和中断情况。定时/计数器初值及定时器T0的工作方式定时/计数器初值的确定方法:由于不同工作方式下,计数器的位数不同,因而最大计数器也不同。下面介绍确定定时/计数器初值的具体方法。现假设最大记数值为M,那么各种方式下的M值如下:方式0:M=8192;方式1:M=65536;方式2:M=256;方式3:定时器T0分为2个8位计数器,所以2个M值均为256。因为定时/计数器是作“加1”记数,并在记满溢出时产生中断,故初值X可这样计算:X=M-记数值定时器T0的工
10、作方式:通过对M1,M0位的设置,T0可选择4种工作方式,T1可选择3种工作方式。定时器T0,T1都可以设置为方式1。在方式1下,定时器T0,T1均为16位的计数器。在方式1下,定时器的结构和操作与方式0基本相同。唯一不同的是:在方式1中,定时器是一全16位二进制参与操作的。当TL0的低8位溢出时间向TH0进位,而TH0溢出时向中断标志TF0进位(称“硬件置位TF0”),并申请中断。通过查询TF0是否置位或是否产生定时器T0中断,可判断定时器T0记数是否溢出。 MCS-51的中断优先级结构。中断系统有两个不可寻址的“优先级激活触发器”。其中一个指示某高优先级的中断正在执行,所有后来的中断均被阻
11、止。另一个触发器指示某低优先级的中断正在执行,所有同级的中断都被阻止,但不阻断高优先级的中断请求。 开始 N定时器0初始化 Y定时溢出 计数初值加一计数初值=99? N Y 计数初值=0第4章 调试及性能分析 当我们的原理图画完,程序编写完毕之后,就要开始把Protues和Keil软件结合起来对我们设计的电子时钟进行调试。Protues和Keil连接调试,进行相关是设置后就开始调试。首先,把编好的程序在keil中调试,看是否有错误。如有错误及时修改。再检查原理图是否有错,或是哪些地方不合理。修改至正确。现在就可以连接调试了。步骤如下:(1)双击AT89S51装入源程序编译生成的HEX文件。(2
12、)单击运行按钮运行仿真。(3)根据仿真情况与程序实现任务对比,对于不能实现的任务修改并调试程序,重新装载重新运行调试仿真,直到能完全实现所要求的功能为止。(4)进一步改进和简化程序在进行调试仿真。 第5章 总结附录一 系统仿真图 南北方向通行 南北方向黄灯 紧急情况附录二 程序代码#include / 对单片机的口进行了定义#define uint unsigned int#define uchar unsigned charuchar code a10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/段码组合,共阴极uchar code
13、b4=0xfe,0xfd,0xfb,0xf7; /位码组合 低有效uchar code c4=0xcc,0xd4,0x78,0xb8;/*P1 绿红、黄红、红绿、红黄*/ /*uchar NB=60,DX=63,NBG=60,DXG=80,H=3; /*数码管显示值设置*/uchar i,k=0,cnt=0,j=0; sbit K0=P35; /*东西通行*/sbit K1=P36; /*南北通行*/sbit K4=P37; /*返回*/sbit K3=P32;/*设置时间*/sbit K2=P33;/*紧急刹车*/void delay(uchar t);/*定义延时程序*/void key(
14、);/*定义键盘程序*/void display();/*定义显示程序*/void settime();/*定义时间设置显示程序*/*程序初始*void init(void)TMOD=0x01; /*使用定时器0模式一*/TH0=0x3c; /*(65536-5000)/256*/TL0=0xb0; /*(65536-5000)%256*/IT0=1; /开中断ET0=1;TR0=1;EA=1;EX0=1;EX1=1;P1=ck; /开启交通灯/*中断0处理程序*void int0(void) interrupt 0 /通行时间设置 EA=0; P1=0xd8;/*红灯全亮*/ for(;)
15、settime(); if(K1=0) /*P36=0设置主干道通行时间*/ delay(40); if(K1=0) while(!K1) settime(); NBG+;/*南北方向通行时间加1*/ if(NBG=100) NBG=0; if(K0=0) /*P35=0设置东西通行时间*/ delay(40); if(K0=0) while(!K0) settime(); DXG+;/*东西通行时间加1*/ if(DXG=100) DXG=0; if(K4=0) /*P37=0返回*/ delay(40); if(K4=0) while(!K4) k=0;P1=ck; NB=NBG,DX=N
16、BG+H; display(); EA=1; break; /*中断1处理程序*void int1(void) interrupt 2 /紧急情况 /*东西南北红灯亮*/EA=0;TR0=!TR0; /*停止计数*/for(;) /*东西南北显示全为0*/ P1=0xd8,P0=a0; P2=0xfe; delay(20); P2=0xfd; delay(20); P2=0xfb; delay(20); P2=0xf7; delay(20); if(K4=0) /*返回*/ delay(20);EA=1; P1=ck; /*返回紧急前状态开始计数*/TR0=!TR0;/*重启计数*/break
17、; void time1(void) interrupt 1/*交通灯控制程序*/TH0=0x3c;/*定时50ms*/TL0=0xb0; cnt+;if(cnt=20) /*每20*50ms=1s自减一*/NB-;DX-;cnt=0;if(NB=0|DX=0)k+;if(k3)/*k取0,1,2,3*/k=0;switch(k)case 0:NB=NBG,DX=NBG+H;j=0;P1=ck;break; /*南北通行显示绿红*/case 1:NB=H;j=1;P1=ck;break; /*南北黄灯闪烁*/case 2:NB=DXG+H,DX=DXG;j=0;P1=ck;break; /*东西通行显示红绿*/case 3:DX=H;j=2;P1=ck;break; /*东西黄灯闪烁*/ void delay(uchar t) /延时程序延时0.1*nms uchar i; do for(i=0;i0;i-)display();/*执行for循环延时*/P1=ck;/*再给黄灯一低电平黄灯亮*/ for(i=83;i0;i-)display();while(j=2) /*东西黄灯闪烁*/ P1=0xf8; for(i=83;i0;i-)display(); P1=ck; for(i=83;i0;i-)display();
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922