1、单片机原理及系统课程设计专 业:电气工程及其自动化班 级: XXX 姓 名: XXX 学 号: XXXXXXX 指导教师: XXX 评语:平时(40)修改(30)报告(30)总成绩兰州交通大学自动化与电气工程学院2012 年 7月 1日单片机原理及系统课程设计报告1 引言题目:基于单片机的智能交通灯的设计与仿真。十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多,基于单片机的控制就是其中的一控制方法。本次课程设计旨在进一步熟悉单片机的结构和工作原理,进而使其在实际中做一简单应用。综合应用已学过的单片机
2、的知识去分析和解决实际问题。2 设计方案及原理2.1 设计方案(1) 南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行。其中,主干道每次通行时间设为30秒,支干道每次通行时间设为20秒,时间可设置修改;(2) 在绿灯转为红灯时,黄灯先亮3秒钟,才能变换运行车道;(3) 黄灯亮时,每秒闪亮一次;(4) 东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用计时的方法);(5) 一道有车而另一道无车(实验时用开关K0和K1控制),交通灯控制系统能立即让有车道放行。也可做应急措施。2.2 设计原理 本设计的基本原理是利用89C51单片机的定
3、时和中断功能来实现对交通灯的倒计时和切换。应用它的中断功能来处理紧急事件。本设计是针对普通的三色灯指示进行设计,用P0口对三色灯输出指令。程序的初始化是东西南北方向的红灯全亮。然后南北主干道方向绿灯亮,东西次干道方向红灯亮。27秒后南北方向绿灯熄灭,接着黄灯闪亮3秒后东西方向绿灯亮。东西方向绿灯亮17秒后熄灭,接着黄灯闪亮3秒后南北方向绿灯亮。如此重复执行。倒计时用到定时器T0,用P2口作为LED的显示。二位一体的LED重复执行倒计时。作为突发事件的处理,本设计主要用到外部中断EX0。用一模拟开关作为中断信号。实际中可以接其它可以产生中断信号的信号源。3 硬件设计3.1 芯片选择本设计采用AT
4、89C51作为核心芯片,负责管理和控制这个系统。3.2 系统框图交通灯控制器的系统框图如图3.1所示。图3.1 交通控制电路的原理框图3.3 硬件接线图交通灯的主控电路的硬件连接原理图如图3.2所示图3.2 硬件连接原理图4 软件设计4.1程序流程图整个软件程序方面主要分两大部分:主程序部分和中断处理程序。流程图如图4.1所示:图4.1程序流程图4.2 源程序实验程序及仿真结果见附录。5 总结交通灯控制器是智能交通灯系统中重要的组成部分,设计中选用AT89C51作为交通灯控制器的处理芯片,用单片机设计的交通灯控制系统比模拟电路有明显的优势,即不用对电路有大的改动就可以适应新的工作条件,升级也很
5、方便,只需对CPU刷写一次程序即可。本课程设计中,设置了定时器和计数器分别设计了南北交通灯的亮灯时间,南北亮绿灯27s,黄灯闪烁3s,红灯亮20s。东西亮绿灯17s,黄灯闪烁3s,红灯亮30s。中断是一项重要的计算机技术,是处理正常工作与紧急状态的好办法,是实现人机实时交互的重要途径,在单片机应用系统中,中断技术得到了广泛应用。在本实验中,设计了南北强制通行和东西强制通行时,系统的绿灯亮的中断系统,通过按钮实现。还设计了复位电路,按压复位按钮,使得系统复位,使系统从头运行。当系统出现不正常的情况时,使系统复位,恢复正常的工作。参考文献1 李华,王思明,张金敏.单片机原理及应用M.兰州:兰州大学
6、出版社,2001.2 冯育长,雷思孝,马金强.单片机系统设计与实例分析M.兰州:兰州大学出版社,2007.附录1实验程序/*初始化、开机自检*第一个状态:主干道、支干道均亮红灯3s*第二个状态:主干道亮绿灯27s、支干道亮红灯*第三个状态:主干道黄灯闪烁、支干道红灯闪烁*第四个状态:主干道亮红灯、支干道亮绿灯22s *第五个状态:主干道红灯闪烁、支干道黄灯闪烁*返回到第二个状态*其中外部中断INTO、INT1分别控制主、支干道亮绿灯*/* 11.0592MHz晶振*/#include/头文件#include/头文件#define uchar unsigned char/宏定义#define u
7、int unsigned int/宏定义sbit RED_ZHU = P10;sbit YELLOW_ZHU = P11;sbit GREEN_ZHU = P12;sbit RED_ZHI = P13;sbit YELLOW_ZHI = P14;sbit GREEN_ZHI = P15; uint aa, bai,shi,ge,bb;/*数码管显示0-9*/uint code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/*子函数声明*/void delay(uint z);void delay0(uint z);void d
8、isplay(uint ge,uint shi);void xtimer0();void check();void init1();void init2();void init3();void init4();void init5();void xint0();void xint1();void GREEN_ZHU_ON();void GREEN_ZHI_ON();/* 主函数*/void main()EA=1;/开中断EX0=1;/允许外部中断INT0中断IT0=0;/定义INT0触发方式PX0=1;/中断优先级高EX1=1;/允许外部中断INT1中断IT1=0;/定义INT1触发方式PX1
9、=1;/中断优先级高check();/开机自检 /init1();/第1个状态 while(1) init2();/第2个状态 init3();/第3个状态 init4();/第4个状态 init5();/第5个状态 /*void init1()/第一个状态:主干道、支干道均亮红灯3s int temp;temp=6;/变量赋初值TMOD=0x01;/定时器T0工作于方式1TH0=0x4c;TL0=0x00;/定时器赋初值EA=1;/开中断ET0=1;/开定时中断TR0=1;/开定时器T0while(1)RED_ZHU=0; RED_ZHI=0;GREEN_ZHU=1;GREEN_ZHI=1;
10、YELLOW_ZHU=1;YELLOW_ZHI=1;if(aa=20)/定时20*50MS=1Saa=0;/定时完成一次后清0temp-;/变量自减if(temp0)break;shi=temp%100/10;/显示十位ge=temp%10;/显示个位 display(ge,shi); */void init2()/第二个状态:主干道亮绿灯27s、支干道亮红灯int temp;temp=31;/变量赋初值TMOD=0x01;/定时器T0工作于方式1TH0=0x4c;TL0=0x00;/定时器赋初值EA=1;/开中断ET0=1;/开定时中断TR0=1;/开定时器T0while(1) RED_ZH
11、U=1;RED_ZHI=0;GREEN_ZHU=0; GREEN_ZHI=1;YELLOW_ZHU=1; YELLOW_ZHI=1;if(aa=20)/定时20*50MS=1saa=0;/定时完成一次后清0temp-;/变量自减if(temp=3)break;shi=temp%100/10;/显示十位ge=temp%10;/显示个位display(ge,shi);void init3()/第三个状态:主干道黄灯闪烁、支干道红灯闪烁int temp;temp=4;/变量赋初值TMOD=0x01;/定时器T0工作于方式1TH0=0x4c;TL0=0x00;/定时器赋初值EA=1;/开中断ET0=1
12、;/开定时中断TR0=1;/开定时器T0while(1)GREEN_ZHU=1;if(aa=20)/定时20*50MS=1saa=0;/定时完成一次后清0temp-;/变量自减YELLOW_ZHU=YELLOW_ZHU;RED_ZHI=RED_ZHI;if(temp0)break;shi=temp%100/10;/显示十位ge=temp%10;/显示个位 display(ge,shi);void init4()/第四个状态:主干道亮红灯、支干道亮绿灯17s int temp;temp=21;/变量赋初值TMOD=0x01;/定时器T0工作于方式1TH0=0x4c;TL0=0x00;/定时器赋初
13、值EA=1;/开中断ET0=1;/开定时中断TR0=1;/开定时器T0while(1)RED_ZHU=0; RED_ZHI=1;YELLOW_ZHU=1; GREEN_ZHI=0;if(aa=20)/定时20*50MS=1saa=0;/定时完成一次后清0temp-;/变量自减if(temp=3)break;shi=temp%100/10;/显示十位ge=temp%10;/显示个位 display(ge,shi);void init5()/第五个状态:主干道红灯闪烁、支干道黄灯闪烁int temp;temp=4;/变量赋初值TMOD=0x01;/定时器T0工作于方式1TH0=0x4c;TL0=0
14、x00;/定时器赋初值EA=1;/开中断ET0=1;/开定时中断TR0=1;/开定时器T0while(1)RED_ZHI=1;GREEN_ZHU=1;GREEN_ZHI=1;if(aa=20)/定时20*50MS=1Saa=0;/定时完成一次后清0temp-;/变量自减YELLOW_ZHI=YELLOW_ZHI;RED_ZHU=RED_ZHU;if(temp0)break;shi=temp%100/10;/显示十位ge=temp%10;/显示个位 display(ge,shi);/*显示子函数*/void display(uint ge,uint shi)P0=0xfd;P2=tableshi
15、;/显示十位delay0(5);P0=0xfe;P2=tablege;/显示个位delay0(5);void xint0() interrupt 0 /外部中断INT0GREEN_ZHU_ON();void xint1() interrupt 2 /外部中断INT1GREEN_ZHI_ON();void GREEN_ZHU_ON()/外部中断INT0显示子程序RED_ZHI=0;RED_ZHU=1;GREEN_ZHI=1;GREEN_ZHU=0; YELLOW_ZHI=1;YELLOW_ZHU=1;P0=0x00;P2=0Xff;delay0(1000);return;void GREEN_Z
16、HI_ON()/外部中断INT1显示子程序RED_ZHI=1;RED_ZHU=0;GREEN_ZHI=0;GREEN_ZHU=1; YELLOW_ZHI=1;YELLOW_ZHU=1;P0=0x00;P2=0xff;delay0(1000);return;void check()/开机自检子程序RED_ZHI=0;RED_ZHU=0;GREEN_ZHI=0;GREEN_ZHU=0; YELLOW_ZHI=0;YELLOW_ZHU=0;P0=0x00;P2=0Xff;delay(2);RED_ZHI=1;RED_ZHU=1;GREEN_ZHI=1;GREEN_ZHU=1; YELLOW_ZHI=
17、1;YELLOW_ZHU=1;P0=0xff;P2=0xff;/*定时中断子函数*/void xtimer0() interrupt 1TH0=0x4c;TL0=0x00;aa+;/*延时子函数*/void delay0(uint z)uint i,j;for(i=0;iz;i+)for(j=0;j0;j-) for(i=1250;i0;i-) for(k=180;k0;k-); 2Protues软件仿真显示截图(1) 南北主干道交通灯的绿灯(东西交通灯的红灯)显示如图1所示:图1南北方向的绿灯(东西交通灯的红灯)显示(2) 南北交通灯的黄灯闪烁(东西交通灯的红灯)显示如图1所示:图2 南北方向的黄灯闪烁(东西交通灯的红灯)显示(3) 东西次干道交通灯的黄灯闪烁(南北交通灯的红灯)显示如图3所示:图3东西方向的绿灯(东南北交通灯的红灯)显示(4) 东西交通灯的黄灯闪烁(南北交通灯的红灯)显示如图4所示:图4 东西向的黄灯闪烁(南北交通灯的红灯)显示(5) 南北强制通行仿真如图5所示:图5 南北方向的绿灯强制通行显示(6) 东西强制通行仿真如图6所示:图6 东西交通灯的绿灯强制通行的显示- 14 -
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100