交通红绿灯模拟系统设计.doc_第1页
已阅读1页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、东莞理工学院城市学院单片机课程设计报告题目: 交通红绿灯模拟系统设计 班级: 08级电子信息工程 学生姓名: 学号: 指导老师: 日期: 摘 要近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本系统采用可编程并行I/O接口芯片89C51为中心器件来设计交通灯控制器,红绿灯循

2、环点亮,倒计时剩5秒时黄灯闪烁警示(交通灯信号通过PA口输出,显示时间直接通过8255的PC口输出至双位数码管);遇到紧急情况需要转换交通灯状态的可以通过强制将交通灯进行状态切换!本系统实用性强、操作简单、扩展功能强。 关键词:单片机 交通灯 紧急通行 目 录一、设计的任务与要求 41.1 设计任务 41.2 设计要求 41.3 设计方案 4二、硬件电路设计 62.1 单片机最小系统 62.2 电源电路设计 62.3 数码管显示电路 62.4 元件清单列表 7三、软件设计流程及描述 83.1 主程序设计 8四、设计调试过程 84.1 Keil编程仿真84.2软件调试 94.3系统功能调试 9五

3、、源程序代码 10六、收获体会 16七、参考文献 17l 一、设计任务与要求1.1 设计任务 个十字路口交通灯控制器。用单片机控制LED灯模拟指示。模拟东西方向的十字路口交通信号控制情况。东西向通行时间为25s,南北向通行时间为30s,缓冲时间为5s。,模拟交通灯管理。在一个交通十字路口有一条主干道(南北方向),一条从干道(东西方向),主干道的通行时间比从干道通行时间长,四个路口安装红,黄,绿,灯各一盏;南北东西图1-11.2 设计要求1、设计一个十字路口的交通灯控制电路,要求东西方向(主干道)车道和南北方向(从干道)车道两条交叉道路上的车辆交替运行,时间可设置修改。2、在绿灯转为红灯时,要求

4、黄灯闪烁,才能变换运行车道3、黄灯亮时,要求每秒闪亮一次。1.3 设计方案本课程设计是基于AT89C51设计的红绿交通灯。用AT89C51与电阻、电容、开关等组成单片机的最小系统,AT89C51单片机的P1口驱动其中三个作为驱动端口驱动红绿交通灯亮与灭。P1口是单纯的通用8位准双向I/O端口,每位可驱动4个TTL负载。作为通用I/O端口,与P0端口的区别在于内部具有上拉电阻,所以输出时不用外接上拉电阻。根据设计的要求可知,系统的硬件原理框图如下图1-2所示。图 1-2系统硬件框图单片机可选用AT89C51,它与8051系列单片机全兼容,但其内部带有4KB的FLASH ROM,设计时无需外接程序

5、存储器,为设计和调试带来极大的方便。南北向和东西向各采用2个数码管计时,同时需要对该方向的指示灯的点亮时间进行倒计时。键盘系统可以根据系统的需要设置不同的键的个数,可以选择线式键盘或矩阵式键盘,若单片机的IO口不够用时,可以考虑扩展8255或8155满足系统的要求。2. 软件方案 根据设计要求,程序框图如图1所示。软件可由汇编语言完成,也可由C语言完成。软件设计可以分为以下几个功能模块:主程序:初始化及键盘监控。计时程序模块:为定时器的中断服务子程序,完成0.1秒(或其他时间)和1秒的时间定时。 显示程序模块:完成12个发光二极管和2个LED数码管的显示驱动。调用正常运行子程序调用紧急状态子程

6、序判断当前状态初始化开始图1-3程序流程图l 二、硬件电路设计2.1单片机的最小系统 ATMEL公司生产的AT89C51单片机它是硬件电路的核心部分,时钟电路晶振使用12MHz,复位电路采取按键复位方式。具体连接图2.1和图2.2图2-1单片机系统的时钟电路2.2电源电路设计电源用5V直流变压器直接供电。图2-22.3数码管显示电路显示电路采用2个共阴数码管,P1口作为数码管的输入。 图2-3数码管显示电路2.4 元件清单列表本次实验用preteus仿真,生成的原件清单如下表2-1Bill Of Materials For µ¥Æ¬»ú

7、;½»Í¨µÆ.DSN Design Title:µ¥Æ¬»ú½»Í¨µÆ.DSNAuthor:<NONE>Revision:<NONE>Design Created:2008Äê12ÔÂ11ÈÕDesign Last Modified:2011Äê6ÔÂ20ÈÕTotal

8、Parts In Design:162 CapacitorsQuantity:ReferencesValueOrder Code2C1, C233pFFarnell 498-5551 Integrated CircuitsQuantity:ReferencesValueOrder Code1U1AT89C51 12 DiodesQuantity:ReferencesValueOrder Code4D1, D4, D7, D10LED-RED 4D2, D5, D8, D11LED-YELLOW 4D3, D6, D9, D12LED-

9、GREEN 1 MiscellaneousQuantity:ReferencesValueOrder Code1X1CRYSTAL l 三、软件设计流程及描述 开始3.1 主程序设计 参数初始化显示子程序中断处理紧急中断子程序3-1系统程序流程图 l 四、设计调试过程4.1 Keil编程仿真根据设计系统流程图,用C语言把程序所要达到的功能描述出来,经过编译无误后再和Preteus联调。4-1 Keil编译仿真图4.2软件调试软件调试主要是利用proteus仿真软件完成电路的搭建,运行以发现设计中的错误及时改正。把电路图画完以后双击芯片89C51,在弹出的对话框(如

10、图4-2所示)中,点击,然后选择刚刚用Keil编译时产生的HEX文件,最后单击运行就可以看到系统的运行情况了(如下图4-2)。图4-2系统模拟仿真图如下:图4-34.3系统功能调试通过软件仿真显示,系统基本能完成要求,由于设计思路出现问题,键盘没有正确的做出来,没有键盘电路,紧急情况也可以通过一个按钮来采取相关的动作。下图是摁下南北紧急通行按钮后电路显示情况:图4-4可以看出此时电路处于紧急状态,只允许南北通行!l 五、源程序代码 *第一个状态:主干道、支干道均亮红灯5S *第二个状态:主干道亮绿灯27S、支干道亮红灯 *第三个状态:主干道黄灯闪烁、支干道红灯闪烁 *第四个状态:主干道亮红灯、

11、支干道亮绿灯22S *第五个状态:主干道红灯闪烁、支干道黄灯闪烁 *返回到第二个状态 *其中外部中断INTO、INT1分别控制主、支干道亮绿灯 * */* 11.0592MHz晶振*/#include<reg51.h>/头文件#include<intrins.h>/头文件#define uchar unsigned char/宏定义#define uint unsigned int/宏定义sbit RED_ZHU = P10;sbit YELLOW_ZHU = P11;sbit GREEN_ZHU = P12;sbit RED_ZHI = P13;sbit YELLOW

12、_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 display(uint ge,uint shi);void xtimer0();void check();void init1();void init2();void init3();void init4();void in

13、it5();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=1;/中断优先级高check();/开机自检 init1();/第1个状态 while(1) init2();/第2个状态 init3();/第3个状态 init4();/第4个状态 init5();/第5个状态 void

14、 init1()/第一个状态:主干道、支干道均亮红灯5S 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;YELLOW_ZHU=1;YELLOW_ZHI=1;if(aa=20)/定时20*50MS=1Saa=0;/定时完成一次后清0temp-;/变量自减if(temp<0)break;shi=temp%100/10;/显示十位g

15、e=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_ZHU=1;RED_ZHI=0;GREEN_ZHU=0; GREEN_ZHI=1;YELLOW_ZHU=1; YELLOW_ZHI=1;if(aa=20)/定时20*50MS=1Saa=0;/定时完成一次后清0temp-;/变量自减

16、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;/开定时中断TR0=1;/开定时器T0while(1)GREEN_ZHU=1;if(aa=20)/定时20*50MS=1Saa=0;/定时完成一次后清0temp-;/变量自减YELLOW_ZHU=YELLOW_ZHU;RED_

17、ZHI=RED_ZHI;if(temp<0)break;shi=temp%100/10;/显示十位ge=temp%10;/显示个位 display(ge,shi);void init4()/第四个状态:主干道亮红灯、支干道亮绿灯22S int temp;temp=26;/变量赋初值TMOD=0x01;/定时器T0工作于方式1TH0=0x4c;TL0=0x00;/定时器赋初值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=

18、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=0x00;/定时器赋初值EA=1;/开中断ET0=1;/开定时中断TR0=1;/开定时器T0while(1)RED_ZHI=1;GREEN_ZHU=1;GREEN_ZHI=1;if(aa=20)/定时20*50MS=1Sa

19、a=0;/定时完成一次后清0temp-;/变量自减YELLOW_ZHI=YELLOW_ZHI;RED_ZHU=RED_ZHU;if(temp<0)break;shi=temp%100/10;/显示十位ge=temp%10;/显示个位 display(ge,shi);/*显示子函数*/void display(uint ge,uint shi)P0=0xfd;P2=tableshi;/显示十位delay0(5);P0=0xfe;P2=tablege;/显示个位delay0(5);void xint0() interrupt 0 /外部中断INT0GREEN_ZHU_ON();void xi

20、nt1() 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_ZHI_ON()/外部中断INT1显示子程序RED_ZHI=1;RED_ZHU=0;GREEN_ZHI=0;GREEN_ZHU=1; YELLOW_ZHI=1;YELLOW_ZHU=1;P0=0x00;P2=0xf

21、f;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=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;i<z;i+)for(j=0;j<110;j+);/* 500ms延时函数 晶振:11.0592MHz*/void delay(uchar j) uchar k; uint i; for(;j>0;j-) for(i=1250;i>0;i-) for(k=180;k>0;k-); l 六、收获

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论