十字路口交通灯控制设计.doc
十字路口交通灯控制设计开放与创新实验任务书一、设计任务 设计题目:十字路口交通灯控制设计 设计内容:本设计是十字路口交通灯控制,所以依据实际交通灯的变化情况和规律,给出如下需求:一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1东西绿灯通车,南北红灯。过一段时间转状态2,东西绿灯灭,黄灯闪烁几次,南北仍然红灯。再转状态3,南北绿灯通车,东西红灯。过一段时间转状态4,南北绿灯灭,闪几次黄灯,延时几秒,东西仍然红灯。最后循环至状态1。二、系统需求 基本要求:利用STC-89C51单片机作为系统核心控制部分,用外围12个发光二极管(红、绿、蓝各4组)模拟交通灯的显示部分,自己设计电路和程序完成交通灯控制设计。 发挥部分: 1扩展外部并口芯片(如8255A)对12个发光二级管进行控制。2用硬件定时器完成交通灯转换间的延时,延时误差小于2010-6s. 3. 利用数码管进行东西、南北方向的倒计时显示。摘要 利用STC-89C51单片机作为核心控制部分,用外围12个发光二极管(红绿黄各4组)模拟交通灯的显示部分,用硬件定时器完成交通灯颜色转换间的延时。在红灯亮时用8段显示数码管完成倒计时功能,每次红灯亮时开始倒计时,从30倒计到0。在设计数码管完成倒计时功能的电路中用到了8255和8155的片子。关键词 单片机,控制,二极管,数码管,延时,定时器。一题目分析与功能要求.二总体方案设计.三单元模块设计.四系统软件系统设计.五系统调试.六系统功能与参数描述.七设计总结.一 题目分析与功能要求 本设计是十字路口交通灯控制,所以依据实际交通灯的变化情况和规律,给出如下需求:一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1东西绿灯通车,南北红灯。过一段时间转状态2,东西绿灯灭,黄灯闪烁几次,南北仍然红灯。再转状态3,南北绿灯通车,东西红灯。过一段时间转状态4,南北绿灯灭,闪几次黄灯,延时几秒,东西仍然红灯。最后循环至状态1。其间延时以硬件定时器完成,并且在红灯亮时数码管开始显示倒计时,从30倒计到0。用4个8段显示数码管两两为一组,东西红灯亮时表示东西方向红灯亮的时间的倒计时,南北方向时亦然。二 总体方案设计 开始 东西南北R东西G,南北R 延时5秒东西闪Y,南北R 东西R,南北G 东西R,南北闪Y 延时5秒 交通灯转换间的延时可用两种方法实现。一种是软件延时,另一种是硬件定时器实现。其中硬件实现计时十分准确,这个不同于软件计时要给定一定的数进行循环并由计时软件完成时间的换算,故在本设计中采用硬件定时器完成交通灯转换间的延时控制。三 单元模块设计 1 各单元模块功能简介及电路设计(1)延时:主要完成交通灯转换间的时间控制,设计电路时用到了8255的片子作为核心控制部分。(2)数码管显示倒计时:主要完成红灯转换到绿灯间的倒计时功能,在本设计中数码管显示从30到0的倒计时。设计电路时用到了8255和8155的片子作为核心控制部分。(3)交通灯:用12个二极管的亮灭表示交通灯的变换闪烁(红黄绿各4个)。2 电路参数的计算及元器件的选择3 系统硬件电路的设计四 系统软件系统的设计#include<reg51.h>#include<absacc.h>#define K8255 XBYTE0xFF2B#define C8255 XBYTE0xFF2A#define B8255 XBYTE0xFF29#define A8155 XBYTE0XFF21#define B8155 XBYTE0XFF22#define C8155 XBYTE0XFF23#define K8155 XBYTE0XFF20unsigned int i,j,k,l;unsigned int m,cnt=0;unsigned char code tal=0x40,0x10,0x00,0x78,0x02,0x12,0x19,0x30,0x24,0x79;unsigned char code tal1=0x30,0x24,0x79,0x40;void delay(unsigned int n);void main() SP=0x50; K8255=0x80; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;ET0=1; while(1) C8255=0x61; B8255=0x08; cnt=0; j=0;k=0;TR0=1; while(1) A8155=0X01; B8155=talj; l=150;while(l-); A8155=0x02; B8155=tal1k; l=150;while(l-); A8155=0X10; B8155=talj; l=150;while(l-); A8155=0x20; B8155=tal1k; l=50;while(l-); if(cnt=10) cnt=0;j+; if(j=1) k+; if(j>9) j=0; if(k=4) /k=0;j=0; break; TR0=0; for(k=0;k<5;k+) C8255=0x51; B8255=0x04; delay(100); C8255=0x41; B8255=0x00; delay(100); delay(100); C8255=0x0C; B8255=0x03; j=0;k=0;TR0=1; while(1) A8155=0X01; B8155=talj; l=150;while(l-); A8155=0x02; B8155=tal1k; l=150;while(l-); A8155=0X10; B8155=talj; l=150;while(l-); A8155=0x20; B8155=tal1k; l=50;while(l-); if(cnt=10) cnt=0;j+; if(j=1) k+; if(j>9) j=0; if(k=4) /k=0;j=0; break; for(k=0;k<5;k+) C8255=0x8A; B8255=0x02; delay(100); C8255=0x08; B8255=0x02; delay(100); delay(100); void delay(unsigned int n) for(i=0;i<n;i+) for(j=0;j<n;j+); void it0() interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; cnt+;五 系统调试根据设计要求写好程序,即系统功能实现软件,摁下DVCC实验系统左边模块小键盘上的Reset(复位键),再摁下Prest Debug 键,将软件与实验系统链接,当实验系统小键盘左边的液晶显示屏上最左边的P变成最右边显示0时表示已链接上,然后对程序进行编译与调试,如显示有错误,则根据错误提示再对已有程序进行修改,用同样的方法进行调试,直至程序运行出正确的符合要求的结果为止。此时实验系统上的12个二极管模拟交通灯应该按照设计的程序有规律地亮灭,并且数码管在红灯亮时进行从30到0的倒计时。 六 系统功能与指标参数(1)系统实现的功能 扩展外部并口芯片对12个发光二级管进行控制,用硬件定时器完成交通灯转换间的延时,延时误差小于2010-6s,利用数码管进行东西、南北方向的倒计时显示,实现十字路口交通灯的控制功能。 (2)参数测试七 设计总结 本次设计中利用STC-89C51单片机作为系统核心控制部分,主要用到了8155和8255两种片子。一二极管模拟交通灯,交通灯状态转换间的延时采用了硬件控制的方法,准确性得到保证。另外还用到了8段式数码管作为倒计时的显示器件。 由于之前从未接触过有关单片机方面的知识,在老师开设辅导基础课之前,对单片机没有任何了解,所以本次设计对于我们来说还是显得相当有难度。只是对单片机有了一个简单的认识,对其详细工作原理都没有经过深究,我们所有的知识仅来自于老师不到20的学时的讲解,所以在本次设计过程中好多问题都得经过组内成员相互讨论合作并查阅相关资料才能解决,一些专业术语的应用也是一大难题,系统功能描述的一些地方显得词不达意。 但对于作为初学者的我们来说,本次设计还是显得很有意义。虽然我们水平相当有限,但多多少少也是学了一些东西,对于单片机的认识从无到有,就凭这一点,我想在单片机课程的后续学习中,我们一定会收益良多。另外,我们报告中所有的东西都是组内成员自己撰写自己完成的,虽然写得不好,很多地方的描述都欠妥当,但至少它可以说是原创的,这也是我们感到最有意义的一点。 本次设计在让我们学到了一些专业知识的同时,也认识到了团队合作的必要性与重要性。我们希望能在课余时间多有此类的学习机会与条件,让有热情的同学能有一个学习交流的平台。