《单片机DSP系统设计 单片机控制的十字路口交通灯系统.doc》由会员分享,可在线阅读,更多相关《单片机DSP系统设计 单片机控制的十字路口交通灯系统.doc(18页珍藏版)》请在三一办公上搜索。
1、单片机及DSP课程设计报告专 业: 电子信息工程 班 级: 姓 名: 学 号: 指导教师: 时 间: 2012-06-1124通信与电子工程学院 一 摘要十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多。当今时代是一个自动化时代,交通灯控制等很多行业的设备都与计算机密切相关。因此,一个好的交通灯控制系统,将给道路拥挤、违章控制等方面给予技术革新。随着大规模集成电路及计算机技术的迅速发展,以及人工智能在控制技术方面的广泛运用,智能设备有了很大的发展,是现代科技发展的主流方向。本系统采用单片机8051为
2、中心器件来设计交通灯控制器,系统实用性强、操作简单、扩展性强。本设计就是采用单片机模拟十字路口交通灯的各种状态显示以及倒计时时间。本设计系统由单片机I/O口扩展系统(8255)、交通灯状态显示系统、LED数码显示系统、紧急情况中断系统等几大部分组成。系统除基本的交通灯功能外,还具有倒计时、更改计时常数、紧急事故处理等功能,较好的模拟实现了十字路口可能出现的状况。软件上采用C51编程,主要编写了主程序,LED数码管显示程序,中断程序延时程序、按键扫描等。经过整机调试,实现了对十字路口交通灯的模拟。关键词: 8051 8255 LED 数码管 交通灯 程序 单片机二 设计任务和要求2.1设计任务:
3、设计用单片机控制的十字路口交通灯系统,可以控制延时时间以及实现在交通事故时道口封锁、单方向通行的状态。2.2设计要求:(1)设计接口电路,将这些外设构成一个简单的单片机应用系统,画出接口的连接图。(2)编写程序实现下列功能:用红、绿、黄三支共两组发光二极管表示交通信号灯,利用单片机模拟有时间显示的定时交通信号灯控制管理。信号灯的变化规律可如下: 放行线:绿灯亮放行25秒,黄灯亮警告5秒,然后红灯亮禁止。 禁示线:红灯亮禁止30秒,然后绿灯亮放行。 同时用2位数码管进行30秒钟递减时间显示。(3) 当有紧急事故时,封锁路口,当有特殊情况时可以单方向通过。人按键减少等待时间通过(例如当人过来时,红
4、灯刚亮,按一下键可以让红灯从15秒计时减少等待时间),通过按键调整计数时间。2.3主要设备与器材:8051单片机一片,8255芯片一块,按键5个,发光二极管红、绿、黄各四只 ,LED数码管四只。三 方案的选择和论证3.1设计思路本系统硬件上采用8051单片机和并行接口芯片8255A。8051单片机具有MCS-51内核,片内有128字节的SRAM作为片内数据存储器使用,字节地址为00H7FH.。还有21个特殊功能寄存器用于各种编程控制。它还有4KB的片内程序存储器(掩膜ROM),地址为0000H0FFFH。最高工作频率可达24MHz,完全可以满足本系统的需要 ;与其他控制方法相比,所用器件可以说
5、是比较简单经济的。(1) 电源提供方案采用单片机控制模块提供电源。改方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。(2) 显示界面方案采用数码管与点阵LED 相结合的方法因为设计既要求倒计时数字输出,又要求有状态灯输出等,为方便观看并考虑到现实情况,用数码管与LED灯分别显示时间与提示信息。这种方案既满足系统功能要求,又减少了系统实现的复杂度。(3) 输入方案:题目要求系统能手动设灯亮时间、紧急事故处理、单方向通行、人按键减少等待时间通过, 直接在IO口线上接上按键开关。因为设计时精简和优化了电路,所以剩余的口资源还比较多,我们使用四个按键,分别是K1、K2、K3、K4(每个按键可以
6、有两种功能)。3.2原理电路图:整个设计以8051单片机为核心,由I/O口扩展,LED数码管显示,按键扫描电路组成。8051单片机I/O口扩展(8255)LED数码管显示按键扫 描 图 硬件模块四 实际制作和调试4.1 8051芯片介绍MCS-51单片机内部结构 8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。 8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:中央处理器: 中央处理器(CPU)是整个单片机的核心部件,是8
7、位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。数据存储器(RAM) 8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。程序存储器(ROM):8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。定时/计数器(ROM):8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序
8、转向。并行输入输出(I/O)口:8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。全双工串行口:8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。中断系统8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。时钟电路8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另
9、一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。下图是MCS-51系列单片机的内部结构示意图2.2。MCS-51的引脚说明:MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。 4.2 8255芯片介绍:8255A的 主 要 功 能8255引脚功能
10、:单片机系统里常用的8255芯片是一个典型的可编程通用并行接口芯片,用来扩展单片机的端口,它具有3个8位的并行口,有三种工作方式,可作为单片机与各种外部设备连接的接口电路! 下面介绍8255的引脚图及引脚功能。PA3- 1 40 -PA4 GND- 7 34 -D0 PA2- 2 39 -PA5 A1- 8 33 -D1PA1- 3 38 -PA6 A0- 9 32 -D2PA0- 4 37 -PA7 PC7- 10 31 -D3RD- 5 36 -WR PC6- 11 30 -D4 PC5- 12 29 -D5 PC4- 13 28 -D6 PC0- 14 27 -D7 PC1- 15 26
11、 -VCC PC2- 16 25 -PB7 PC- 17 24 -PB6 PB0- 18 23 -PB5 PB1- 19 22 -PB4 PB2- 20 21 -PB3 8255引脚功能说明: RESET:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。 PA0PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。 PB0PB7:端口B输入输出线,一个8位的I/O锁存器, 一个8位的输入输出缓冲器。 PC0PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C可
12、以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。CS:片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。 RD:读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。 WR:写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写8255。 D0D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线
13、传送。表1 8255芯片的引脚信号说明引脚信号 引脚号 引脚名称 Vcc 26 电源的+5V端 GND 7 电源的0端 RESET 35 复位信号输入端。使内部各寄存器清除,置A,B,C口为输入口 36 写信号输入端,使CPU输出的数据或者控制字到8255A 5 读信号输入端。使8255A输出数据或者状态信息到CPU 6 片选端 A1,A0 8,9 地址总线的最低2位。用于决定断口地址:如A1A0为00,是A口:A1A0 为01,是B口:A1A0为10,是C口:A1A0 是11,是控制字寄存器 D7D0 2734 双向数据总线 PA7PA0 3740 14 A口的8位I/O引脚 PB7PB0
14、2518 B口的8位I/O引脚 PC7PC0 1013 1714 C口的8位I/O引脚 数据总线缓冲器:是一个8位的双向三态驱动器,用于与单片机的数据总线相连。读/写控制逻辑:根据单片机的地址信息(A1 A0 )与控制信息(RD WR RESET),控制片内的数据,CPU控制字,外设状态信息的传送。控制电路:根据CPU送来的控制字所管I/O 口按一定的方式工作。对C口甚至可按位实现置位或者复位。控制电路分为两组:A组控制电路控制A口及C口的高四位(PC7PC4),B组控制电路控制B口及C口的低四位(PC3PC0)。三个并行I/O端口:A口可编程为8位输入,或者8位输出,或者双向输出:B 口可编
15、程为8位输入,或者8位输出,但是不可以双向传输;C口分为两个4位口,用于输入或者输出,也可以用作A口,B口的状态控制信号。4.3交通灯硬件线路图:仿真全图单片机 74LS373 8255LED 数码管键盘4.4交通信号灯模拟控制系统设计程序流程图:主程序框图:开始定义程序中使用的变量,常量,用到的管脚及字型码表进入主程序,完成8051以及8255的初始化进入死循环,一直工作按键扫描显示数码管定时溢出中断框图:按键扫描程序框图:五 实验数据记录,测试结果分析6.1软件调试软件调试主要利用Keil与Proteus仿真软件完成电路的搭建,运行以发现设计中的错误及时改正。6.2系统功能调试通过通电测试
16、系统的功能,观察系统是否正常运行,是否达到设计指标,通过修改软件完成系统的系能指标,也可以通过仿真软件进行仿真运行,调试并修改系统,以便达到最佳水准。让系统最大限度的发挥其功效。6.3测试结果经过多次调试改进,最终达到了预期的实验效果。六. 实验现象及其遇到的困难实验现象:开始运行之后东西绿灯亮南北红灯亮,数码管显示东西从25s开始减,南北从30s开始减,当东西减到0时黄灯亮了,从5s开始减,当两个方向都减到0时,南北绿灯亮,东西红灯亮,数码管显示南北从25s开始减,东西从30s开始减,当南北减到0时黄灯亮了,从5s开始减,当两个方向都减到0时,就循环开始的。当有按键按下时就会执行对应的功能。
17、当按下恢复键时就会回到初始的状态东西绿灯亮,南北红灯亮,不同的按键有不同的功能,共5个。遇到的问题及其解决:在仿真的时候遇到程序上编译的问题,经过不断的修改以及仿真最后终于得到了预期的现象。七. 课程设计总结通过这次设计,我对单片机和C语言有了进一步的认识,对以前学的数字电路又有了一定的新认识,温习了以前学的知识,就像人们常说的温故而知新嘛 。在这次课程设计中也使我们的同学关系更进一步了,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。 平常只要是遇到跟设计相关的课题,我们都是由老师来带领着,一步一步的去解开那些百思不得其解的疑难.现在面对设计的
18、要求,虽然也有老师的指导,但是不再是老师带领我们去解答问题,而是我们要依托自己的力量,不依赖老师,去完成自己的设计课题的时候了,这对我们来说是一次挑战,也是一次战胜自我的方式。在这段时间内我也发现自己的很多问题。自己不够细心,在修正程序的时候花费了很多时间,由于程序中某一个小的地方出错或导致编译不成功,或者仿真时出不来自己想要的结果,连接实物的时候有事会有几根线没有连或者是连错了导致没有成功,这让我很费劲。自己没有耐心,在编程的时候由于自己不够细心或者不明白,连线连了好几次的时候自己就会很烦躁。从中我也获得了很多,自己在做事情前要准备,准备越充分,事情就会感觉越顺利,在进实验室之前就已经对自己
19、要做的题目搜索了资料,原理什么的都搞明白,这样即使在座的时候有错自己也可以检查出来。还有就是一定要坚持,虽然做的不一定成功,但是自己不放弃一直坚持做,一定会收获的,即使自己做不出来,那么坚持着,对自己来说也是一种考验。还有就是同学之间一定要一起努力,一起讨论,这样事情会更好的发展。总之在这次课设过程中收获了很多,无论是学习还是生活,都感触很多。八.参考文献高锋. 单片机微型计算机原理与接口技术. 北京:科学技术出版社何立民. 1990.MCS-51系列单片机应用系统设计. 北京:北京航天航空大学出版张元良. 单片机原理及其应用教程周向红. 单片机课程设计. 北京航天航空大学出版社李学礼. 基于
20、Proteus的80C51单片机实例教程. 电子工业出版社附录:源程序: /*交通灯控制系统C语言源程序*/*Author:ZhaoWenjie All Rights Reserved*/*2009/10/18*/#include #include #define uchar unsigned char#define uint unsigned int#define b8255 XBYTE0x8001#define c8255 XBYTE0x8002#define k8255 XBYTE0x8003uchar data buf4;uchar data sec_dx=25;/东西数默认uchar
21、 data sec_nb=25;/南北默认值uchar data set_timedx=25;uchar data set_timenb=25;int n;uchar data b;/定时器中断次数sbit k1=P16;/定义5组开关sbit k2=P17;sbit k3=P15;sbit k4=P30;sbit k5=P31;bit time=0;/灯状态循环标志bit set=1;/调时方向切换键标志uchar code table11= /共阴极字型码0x3f, /-00x06, /-10x5b, /-20x4f, /-30x66, /-40x6d, /-50x7d, /-60x07,
22、 /-70x7f, /-80x6f, /-90x00 /-NULL;/函数的声明部分void delay(int ms);/延时子程序void key();/按键扫描子程序void key_to1();/键处理子程序void key_to2();void key_to3();void display();/显示子程序void logo(); /开机LOGOvoid Buzzer();/主程序void main()TMOD=0X01;TH0=0X00;TL0=0X00; EA=1;ET0=1;TR0=1;EX0=1;EX1=1; k8255=0x80; logo(); c8255=0xc3; s
23、ec_nb=sec_dx+5;while(1) key(); /调用按键扫描程序display(); /调用显示程序if(time=0&sec_nb=0)set_timenb=25;sec_dx=set_timenb+5;if(time=1&sec_dx=0)set_timedx=25;sec_nb=set_timedx+5;/函数的定义部分void key()/按键扫描子程序if(k1!=1)delay(10);if(k1!=1)while(k1!=1) key_to1(); for(n=0;n40;n+) display(); if(k2!=1)delay(10);if(k2!=1)whi
24、le(k2!=1) key_to2(); for(n=0;n40;n+) display(); if(k5!=1) delay(5); if(k5!=1) while(k5!=1) key_to3(); void display() /显示子程序buf1=sec_dx/10; /第1位 东西秒十位buf2=sec_dx%10; /第2位 东西秒个位buf3=sec_nb/10; /第3位 南北秒十位buf0=sec_nb%10; /第4位 南北 b8255=tablebuf1; P1=0x0fe; /片选LCD1 delay(1); P1=0xff; b8255=tablebuf2; P1=0
25、x0fd; /片选LCD2 delay(1); P1=0xff; b8255=tablebuf3; P1=0X0fb; /片选LCD3 delay(1);P1=0xff; b8255=tablebuf0;P1=0X0f07; /片选LCD4 delay(1); P1=0xff; void time0(void) interrupt 1 using 1 /定时中断子程序b+;if(b=10) / 定时器中断次数b=0;sec_dx-;sec_nb-;if(sec_dx=0 & sec_nb=5)sec_dx=5; if(sec_nb=5 & time=0) /东西黄灯闪 c8255=0x44;i
26、f(sec_nb=0 & sec_dx=5)sec_nb=5; if(sec_dx=15) sec_nb=15; sec_dx=sec_nb-5;TR0=1; void key_to2() /键盘处理子程序之-TR0=0; /关定时器if(time=1&sec_dx=15)sec_dx=15;sec_nb=sec_dx-5;TR0=1; uint i;void key_to3() /键盘处理之紧急车通行 TR0=0; P1=0xff; for(i=0;i500;i+) c8255=0xc9; c8255=0xc8; P1=0xff; sec_dx=00; sec_nb=00; display(
27、); void int0(void) interrupt 0 using 1 /只允许东西通行TR0=0; c8255=0xc3; P1=0xff;sec_dx=00;sec_nb=00; void int1(void) interrupt 2 using 1 /只允许南北通行TR0=0; c8255=0x99;P1=0xff;sec_nb=00;sec_dx=00;void logo()/开机的Logo - - - - for(n=0;n50;n+) b8255=0x40; P1 = 0xff; delay(10);void delay(int ms)/延时子程序uint j,k,m;for(j=0;jms;j+) for(k=0;k124;k+); for(m=0;m50;m+);教师评语: 教师: 日期:设计过程30课设报告40答辩30总成绩