51单片机交通灯程序设计
51单片机交通灯系统设计
计算机控制系统课程设计题目:单片机交通信号灯控制系统设计学院: 信息科学与工程学院专业: 自动化学号:学生姓名:指导教师:日期:单片机交通信号灯控制系统设计一、设计目的与意义1、通过用51单片机控制交通灯的课程设计,熟练51单片机的编程方法。
2、通过本课程的设计,进一步掌握I/O接口设计和常用程序设计技术,掌握单片机控制系统的设计的一般方法,能根据系统设计要求,完成应用系统的硬件和软件设计。
3、通过本课程设计将理论用于实践,提高动手能力。
二、设计内容和要求交通灯控制系统控制东西、南北两个方向信号灯,每个方向设置两组红绿灯,红灯禁止通行,绿灯允许通行。
每个方向的通行时间各由两位LED数码显示,通行时间可设置,绿灯向红灯转换前绿灯闪烁三次共3秒钟,红灯向绿灯过渡时不闪烁。
系统上电时的初始状态为东西、南北两个方向均为红灯,持续2秒后为东西方向绿灯,南北方向红灯,之后以定时方式控制两个方向的汽车轮流通行。
三、常见交通信号灯系统概述:交通信号灯是交通信号中的重要组成部分,是道路交通的基本语言。
交通信号灯由红灯(表示禁止通行)、绿灯(表示允许通行)、黄灯(表示警示)组成。
绿灯信号是准许通行信号。
按《交通安全法实施条例》规定:绿灯亮时,准许车辆、行人通行,但转弯的车辆不准妨碍被放行的直行车辆和行人通行。
红灯信号是绝对禁止通行信号。
红灯亮时,禁止车辆通行。
右转弯车辆在不妨碍被放行的车辆和行人通行的情况下,可以通行。
红灯信号是带有强制意义的禁行信号,遇此信号时,被禁行车辆须停在停止线以外,被禁行的行人须在人行道边等候放行;机动车等候放行时,不准熄火,不准开车门,各种车辆驾驶员不准离开车辆;自行车左转弯不准推车从路口外边绕行,直行不准用右转弯方法绕行。
黄灯亮时,已越过停止线的车辆,可以继续通行。
黄灯信号的含义介于绿灯信号和红灯信号之间,既有不准通行的一面,又有准许通行的一面。
黄灯亮时,警告驾驶人和行人通行时间已经结束,马上就要转换为红灯,应将车停在停止线后面,行人也不要进入人行横道。
51单片机控制交通灯设计
1、引言 (3)2、单片机概述 (3)3、芯片简介 (4)3.1 MSC-51芯片简介 (4)3.2 8255芯片简介 (7)3.3 74LS373简介 (8)4、系统硬件设计 (9)4.1交通管理的方案论证 (9)4.2系统硬件设计 (9)4.2.1 系统总框图如下 (9)4.2.2 交通灯硬件线路图 (10)4.2.3 系统工作原理 (12)5、控制器的软件设计 (12)5.1每秒钟的设定 (12)5.2计数器硬件延时 (12)5.2.1 计数器初值计算 (12)5.2.2 计算公式 (12)5.2.3 1秒的方法 (13)5.2.4相应程序代码 (13)5.3 软件延时 (14)5.4 时间及信号灯的显示 (14)5.4.1 8051并行口的扩展 (14)5.4.2显示原理 (15)5.4.3 8255PA口输出信号接信号灯 (15)5.4.4 8255输出信号与数码管的连接 (15)5.4.5 8255与8051的连接 (16)5.5 程序设计 (16)5.5.1流程图如图所示 (16)5.5.2 程序源代码 (17)结论 (22)参考文献 (23)基于单片机的交通灯设计摘要:近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。
那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。
交通信号灯控制方式很多。
本系统采用MSC-51系列单片机ATSC51和可编程并行I/O接口芯片8255A为中心器件来设计交通灯控制器,实现了能根据实际车流量通过8051芯片的P1口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示(交通灯信号通过PA口输出,显示时间直接通过8255的PC口输出至双位数码管);车辆闯红灯报警;绿灯时间可检测车流量并可通过双位数码管显示。
单片机c语言程序设计---C51-交通灯实验报告
单片机c语言程序设计---C51-交通灯实验报告课程名称:单片机c语言设计实验类型:设计型实验实验项目名称: C51-交通灯实验一、实验目的和要求1.熟悉单片机的硬件结构及其工作原理2.掌握单片机的C51编程二、实验内容和原理(1)硬件设计使用P1端口连接VD1、VD2、VD3,模拟路口东面的红、黄、绿灯;P0端口连接VD9、VD10、VD11,模拟路口西面的红、黄、绿灯;P3端口连接VD17、VD18、VD19,模拟路口南面的红、黄、绿灯;P2端口连接VD25、VD26、VD27,模拟路口北面的红、黄、绿灯。
路口红绿灯的显示规律为:①南面和北面显示红灯(即VD17和VD25为红灯)时,东面和西面显示绿灯(即VD3和VD11为绿灯)。
②南面和北面,东面和西面都变成黄灯。
③南面和北面显示绿灯,东面和西面显示红灯④南面和北面,东面和西面都变成黄灯,然后再从①进行循环(需注意:此处设置的黄灯显示时长应短于红灯或绿灯的显示时长)(2)protues仿真通过Keil编译后,利用protues软件进行仿真。
在protues ISIS 编译环境中绘制仿真电路图,将编译好的“xxx.hex”文件加入AT89C51。
启动仿真,观察仿真结果。
三、主要仪器设备四、操作方法与实验步骤1.按照硬件设计在protues上按照所给硬件设计绘制电路图。
2.在keil上进行编译后生成“xxx.hex”文件。
3.编译好的“xxx.hex”文件加入AT89C51。
启动仿真,观察仿真结果。
五、实验结果与分析void S_N(void){VD1=0;VD9=0;VD19=0;VD27=0;Delay(1000);VD1=1;VD9=1;VD19=1;VD27=1;}int main (void) {while(1){E_W();NOT();S_N();NOT();}}六、讨论和心得。
51单片机用C语言实现交通灯_红绿灯_源程序
c o d eu n s i g n e dc h a rt a b [ ] = { 0 x 3 f , 0 x 0 6 , 0 x 5 b , 0 x 4 f , 0 x 6 6 , 0 x 6 d , 0 x 7 d , 0 x 0 7 , 0 x 7 f , 0 x 6 f } ; / / 共阴数码管 0 9 u n s i g n e dc h a rD i s _ S h i w e i ; / / 定义十位 u n s i g n e dc h a rD i s _ G e w e i ;/ / 定 g n e di n tc n t ) { w h i l e ( c n t ) ; } m a i n ( ) { T M O D| = 0 x 0 1 ; / / 定时器设置 1 0 m si n1 2 Mc r y s t a l 定时器 0 ,工作方式 1 ,1 6 位定时器 T H 0 = 0 x d 8 ; / / 6 5 5 3 5 1 0 0 0 0 = 5 5 5 3 5 = D 8 F 0 (十六进制) T L 0 = 0 x f 0 ; I E =0 x 8 2 ;/ / 中断控制,E A = 1 开总中断,E T 0 = 1 :定时器 0 中断允许 T R 0 = 1 ; / / 开定时器 0 中断 P 1 = 0 x f c ; / / 红灯亮,根据红黄绿接灯的顺序。 r e d= 1 ; w h i l e ( 1 ) { P 0 = D i s _ S h i w e i ; / / 显示十位,这里实现用 8 位数码管,即左 1 位 P 2 = 0 ; d e l a y ( 3 0 0 ) ; / / 短暂延时 P 0 = D i s _ G e w e i ;/ / 显示个位,左数,2 位 P 2 = 1 ;
51单片机红绿灯设计报告
51单片机红绿灯设计报告一、引言红绿灯是城市道路交通管理中非常重要的设备,它能够有效地控制车辆和行人的通行,维护交通秩序,提高交通效率。
本报告将介绍一种基于51单片机的红绿灯设计,利用单片机的强大功能,实现了智能化、自动化的红绿灯控制系统。
二、设计原理1.硬件设计本设计使用了51单片机,通过其IO口控制LED灯的亮灭。
红绿灯的控制通过三个IO口分别连接到红、黄、绿三个LED灯,通过控制这三个IO口的电平,实现红绿灯的切换。
2.软件设计设计中使用了C语言进行程序开发。
程序通过设置IO口的状态和延时函数,控制红绿灯的切换和延时时间。
三、电路设计1.电路图电路图给出了51单片机、LED灯和电流限制电阻之间的连接关系。
单片机的P1口连接到红、黄、绿三个LED灯上,通过改变P1口的电平,控制LED的亮灭。
2.电路元件说明-51单片机:中央处理器,负责控制整个系统的运行和信号的处理。
-LED灯:用于显示红、黄、绿三种不同的状态。
-电流限制电阻:用于限制电流大小,保护51单片机和LED灯。
四、程序设计程序设计中,通过无限循环实现红绿灯系统的连续运行,程序中设置了红绿灯切换的时间间隔和黄灯亮灭的时间间隔。
五、实验结果经过测试,本设计能够正常地实现红绿灯的切换,各种状态都能够正确显示。
红灯亮10秒,黄灯亮3秒,绿灯亮15秒,然后循环重复。
六、总结本设计利用51单片机的强大功能,实现了红绿灯的自动切换。
通过控制IO口的电平和延时函数,能够实现红绿灯的各种状态的切换。
该设计简单、实用、可靠,适用于城市交通管理中的红绿灯设备。
51单片机交通灯设计报告
51单⽚机交通灯设计报告课程设计说明书课程名称:《单⽚机技术》设计题⽬:交通灯设计学院:电⼦信息与电⽓⼯程学院学⽣姓名:学号:专业班级:指导教师:课程设计任务书交通灯设计摘要:近年来随着科技的发展,单⽚机的应⽤正在不断深⼊,同时带动传统控制检测技术⽇益更新。
在实时检测和⾃动控制的单⽚机应⽤系统中,单⽚机往往作为⼀个核⼼部件来使⽤,仅单⽚机⽅⾯的知识是不够的,还应该根据具体硬件结构软硬结合,加以完善。
⼗字路⼝车辆穿梭,⾏⼈熙攘,车⾏车道,⼈⾏⼈道,有条不紊,那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的⾃动指挥系统。
交通信号灯控制⽅式很多。
本系统采⽤51系列单⽚机ATMEL89C51为核⼼控制器件来设计交通信号灯控制器,实现亮绿灯通⾏,亮黄灯闪烁并发声警⽰,亮红灯禁⽌通⾏的功能,并显⽰通⾏或禁⽌通⾏倒计时,紧急按键信号灯加时和紧急按键南北、东西红绿灯跳变。
本系统使⽤性强,操作简单,容易实现,扩展功能强,可⾃⾏修改程序扩展⾃⼰想要实现的功能。
关键词:交通灯,单⽚机,复位电路⽬录1. 设计背景 (1)1.1设计原因 (1)1.2个⼈意义 (1)2.设计⽅案 (1)2.1总体⽅案提出 (1)2.2稳压电源⽅案设计与分析 (1)2.3复位电路⽅案设计与分析 (2)3. ⽅案实施 (2)3.1总体设计框图 (2)3.2硬件设计 (3)3.3软件设计 (6)3.4电路仿真 (10)3.5制板⼦与安装过程 (11)3.6软硬件调试 (11)4. 结果与结论 (12)5 收获与致谢 (12)6. 参考⽂献 (12)7. 附件 (13)7.1硬件电路图 (13)7.2元器件清单 (14)7.3作品实物图 (15)7.4源程序: (16)1. 设计背景1.1设计原因随着社会的进步,交通的⾼速发展,红绿灯已经成为了我们⽣活中不可或缺的⼀部分,如今,红绿灯已经安装在各个道路的交接⼝处,已经成为疏导交通车辆最常见和最有效的⼿段。
51单片机 交通灯
实验二交通灯实验一、实验目的a)按键、数码管、发光二极管综合应用编程技术b)数据存储于EEPROM的技术(也可以不使用)c)定时中断技术d)按键中断技术二、实验实现的功能a)对绿黄红灯的时间进行设定。
b)紧急按键功能,当按下该键时,所有路口变成红灯,相当于交警指挥特殊车辆通过。
再按该键,恢复正常显示。
三、系统硬件设计四、系统软件设计#include <stc10.h>#define uchar unsigned char#define uint unsigned int#define N 10//0--F的共阴极字段码表ucharcodevalue[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71};uchar Num_Buffer[]={0,0};uchar GT=0,YT=0;RT=0,Operation_Type=1,sec=0,count=0,k=0;sbit P02=P0^2;sbit P03=P0^3;sbit P36=P3^6;sbit P37=P3^7;/************************北方向灯组位定义***************************/ sbit BG=P2^3;sbit BY=P2^4;sbit BR=P2^5;/************************西方向灯组位定义***************************/ sbit XG=P2^0;sbit XY=P2^1;sbit XR=P2^2;/************************南方向灯组位定义***************************/ sbit NG=P3^3;sbit NY=P3^4;sbit NR=P3^5;/************************东方向灯组位定义***************************/ sbit DG=P2^6;sbit DY=P2^7;sbit DR=P3^2;/*******************************************************************/ void delay(uint x) //延时{uchar i;while(x--){for(i=0;i<120;i++);}}void display(uchar n) //显示函数{Num_Buffer[1]=n/10;Num_Buffer[0]=n%10;P0=0XFB;P1=codevalue[Num_Buffer[1]];delay(N);P0=0XF7;P1=codevalue[Num_Buffer[0]];delay(N);}uchar scan_key() //按键扫描程序{uchar i,m;P36=0;P37=1;for(i=0;i<2;i++){delay(N);m=P0;switch(m&0xe0){case 0xc0: k=i*3+1;return k;break;case 0xa0: k=i*3+2;return k;break;case 0x60: k=i*3+3;return k;break;default: break;}P36=1;P37=0;}}void dingshi() //设定绿黄红灯的时间{uchar k;P2=0XFF;P3=0XFF;while(1){display(0); //开始时显示0k=scan_key();if(k==4) //按下4键设定主干道绿灯时间{while(1){display(GT);k=scan_key();if(k==4){ delay(20N);GT++;}if(k==3) //按下3键设定好绿灯时间{ delay(20N);break;}}}else if(k==5) //按下5键设定黄灯时间{while(1){ ;display(YT);k=scan_key();if(k==5){ delay(20N);YT++;}if(k==3) //按下3键设定好绿灯时黄间{ delay(20N);break;}}}else if(k==6) //按下6键设定红灯时间{while(1){display(RT);k=scan_key();if(k==6){ delay(20N);RT++;}if(k==3) //按下3键设定好红灯时间{ delay(20N);break;}}}else if(k==3) //再次按下3键时间设定好返回break;}}void zanting() //暂停程序{ uchar k;k=scan_key();if(k==3) //按下3键暂停{ TR0=0;delay(50N);while(1){BG=1;BY=1;BR=0;NG=1;NY=1;NR=0; //东西南北红灯都亮XG=1;XY=1;XR=0;DG=1;DY=1;DR=0;k=scan_key();if(k==3) //再次按下3键开始{delay(50N);break;}}}}void yunxing() //运行程序{ uchar i;delay(50N);while(1){switch(Operation_Type){case 1://东西向绿灯与南北向红灯亮sec=GT;while(1){if(sec>-1){TR0=1;display(sec);BG=1;BY=1;BR=0;NG=1;NY=1;NR=0;XG=0;XY=1;XR=1;DG=0;DY=1;DR=1;zanting();}else{TR0=0;Operation_Type=2;break;}}break;case 2://东西向黄灯亮5s,绿灯关闭sec=YT;while(1){if(sec>-1){TR0=1;BG=1;BY=1;BR=0;NG=1;NY=1;NR=0;XG=1;XY=~XY;XR=1;DG=1;DY=~DY;DR=1;for(i=0;i<50;i++) //以数码管显示来延时{display(sec);}zanting();}else{TR0=0;Operation_Type=3;break;}}break;case 3://东西向红灯,南北向绿灯亮sec=RT;while(1){if(sec>-1){TR0=1;display(sec);BG=0;BY=1;BR=1;NG=0;NY=1;NR=1;XG=1;XY=1;XR=0;DG=1;DY=1;DR=0;zanting();}else{TR0=0;Operation_Type=4;break;}}break;case 4://东西向红灯亮,南北向黄灯亮5ssec=YT;while(1){if(sec>-1){TR0=1;BG=1;BY=~BY;BR=1;NG=1;NY=~NY;NR=1;XG=1;XY=1;XR=0;DG=1;DY=1;DR=0;for(i=0;i<50;i++){display(sec);}zanting();}else{TR0=0;Operation_Type=1;break;}}}}}void shan(){P2=0XB6;P3=0X37;delay(5N);P2=0X6D;P3=0X2F;delay(5N);P2=0XDB;P3=0X1B;delay(5N);}main(){P1M0=0XFF;P1M1=0X00;TMOD=0X01; //定时器T0,工作方式1TH0=-50000/256; //定时器T0赋初值TL0=-50000%256;EA=1; //开总中断ET0=1; //定时器T0中断允许while(1){P02=1;P03=1;shan(); //开始时二极管闪烁scan_key();if(k==1)dingshi();if(k==2)yunxing();}}void timer0(void) interrupt 1{TH0=-50000/256;TL0=-50000%256;count++;if(count==20){count=0;sec--;}}五、实验过程中遇到的问题及解决方法问题1:将各路口的灯用P2,P3口赋值来表示,显示乱码解决:直接对每个灯进行位定义,然后直接赋值,这样简单明了易查错,而且对按键扫描程序没有任何影响问题2:设定的时间走到1直接显示下一个灯的时间,没有显示0解决:检查发现在执行时if(sec>0),改成if(sec>-1)运行正常问题3:黄灯闪烁程序为XG=1;XY=~XY;XR=1;DG=1;DY=~DY;DR=1;发现运行时黄灯不闪烁,一直为黄色解决:因为运行时执行指令的速度较快,导致黄灯的熄灭人的眼睛无法识别,加延时函数delay(5N)既可,当加入延时函数又出现了新的问题,即数码管显示不连续,有的位显示一直闪烁,分析问题在于当加入延时函数后影响了数码管的扫描频率,数码管是动态显示的,靠的就是快速移位显示来显示4为数码管,将延时函数用数码管显示程序来代替,保证了数码管的显示,又解决了黄灯的闪烁问题。
51单片机c语言交通灯设计报告
xxxxxxxxx基于AT89S52交通灯设计学院:电子信息工程专业班级: xxxxxxxxxxxxxx姓名: xx xx学号: xxxxxxxxxxx指导老师: xxxxxxxxxx摘要交通灯在我们日常生活中随处可见,它在交通系统中处于至关重要的位置。
交通灯的使用大大减少了交通繁忙路口的事故发生,给行人和车辆提供一个安全的交通环境,人们的生命和财产安全有了保障。
本设计旨在模拟十字路口的交通灯,以AT89S51单片机为基础,结合按键和数码管等元器件设计出一个简单且完全的交通灯系统。
关键词:交通灯 AT89S52 单片机目录一、设计任务 (4)二、AT89S52单片机及其他元器件简介 (4)(1)AT89S52单片机 (4)三、系统硬件电路设计 (6)(1)时钟电路设计 (6)(2)复位电路设计 (6)(3)灯控制电路设计 (7)(4)按键控制电路设计 (7)四、元件清单及实物图 (8)1、程序清单 (8)2、原理图 (9)五、实验心得 (9)附1 源程序代码 (10)附2 原理图 (16)一、设计任务(1)、设计一个十字路口的交通灯控制电路,要求南北方向和东西方向两条交叉道路上的车辆交替运行,每次通行时间都设30秒,时间可设置修改。
(2)、在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道,且黄灯亮时,要求每秒亮一次。
(3)、有紧急车辆要求通过时,系统要能禁止东西和南北两条路上所有的车辆通行。
二、AT89S52单片机及其他元器件简介(1)AT89S52单片机AT89S52是一种低功耗、高性能CMOS8位微控制器。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6位向量2级中断结构,全双工串行口,片内晶振及时钟电路。
51单片机交通灯设计汇编实验
实验四、中断实验报告一、实验内容参照实验电路,设计交通灯控制系统。
模拟交通信号灯控制:一般情况下正常显示,东西-南北交替放行,各方向通行时间为30秒。
有救护车或警车到达时,两个方向交通信号灯全为红色,以便让急救车或警车通过,设通行时间为10秒,之后交通恢复正常。
用单次脉冲模拟急救车或警车申请外部中断。
二、程序流程图3实验仿真电路4、实验程序ORG 0000HJMP MAINORG 0003H ;外部中断0的入口地址JMP X0_INTORG 000BH ;T0中断的入口地址JMP T0_INT;*************************************** MAIN:MOV TMOD, #01HMOV TH0, #3CHMOV TL0, #0B0HMOV R1, #20 ;定时1sSETB TR0SETB ET0SETB PT0SETB EX0SETB IT0SETB EAMOV SP, #60HM_LOOP:;***************************************N_B:MOV 30H, #11H ;南北MOV P1, 30HMOV R5, #30 ;CALL DISPLAYMOV R2, #27LOOP1:CALL WAIT_1SDJNZ R2, LOOP1 ;判断是否过了27s ;--------------------------MOV 30H, #21HMOV P1, 30HMOV R2, #3LOOP11:CALL WAIT_1SDJNZ R2, LOOP11 ;判断是否过了3秒;*************************************** D_X:MOV 30H, #0AH ;东西MOV P1, 30HMOV R5, #30CALL DISPLAYMOV R2, #27LOOP2:CALL WAIT_1SDJNZ R2, LOOP2 ;判断是否过了27s ;--------------------------MOV 30H, #0CHMOV P1, 30HMOV R2, #3LOOP22:CALL WAIT_1SDJNZ R2, LOOP22 ;判断是否过了3秒JMP M_LOOP;*************************************** WAIT_1S: ;等待新秒出现JNB 20H.0, $CLR 20H.0DEC R5CALL DISPLAYRET;-----------------------------DISPLAY:MOV A, R5MOV B, #10DIV ABMOV DPTR, #TAB1MOVC A, @A + DPTRMOV P2, AMOV A, BMOV DPTR, #TAB1MOVC A, @A + DPTRMOV P0, ARETTAB1:DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH ;***************************************X0_INT:MOV P1, #09H ;全部红灯PUSH ACCPUSH BPUSH PSWSETB RS0 ;换工作区MOV R5, #10 ;倒计时显示CALL DISPLAYMOV R1, #20 ;定时1s;----------------MOV R2, #10 ;倒计时LOOP3:CALL WAIT_1SDJNZ R2, LOOP3 ;判断是否到了10s ;----------------POP PSW ;恢复原区CALL DISPLAY ;显示原值MOV P1, 30H ;显示原灯POP BPOP ACCRETI;-----------------------------T0_INT: ;T0中断,高优先级 MOV TL0, #0B0HMOV TH0, #3CH ;50ms中断一次DJNZ R1, EXIT_T0MOV R1, #20 ;定时1sSETB 20H.0 ;每到一秒就置一EXIT_T0:RETI;*************************************** END。
51单片机交通灯完美设计
1 概述 (1)1.1 引言 (1)1.2 设计思路 (1)1.3 设计目的 (1)2 硬件设计 (2)2.1 AT89C51单片机简介 (2)2.2 数码管显示器的简介 (3)2.3定时器 (4)2.4定时器/计数器的概念 (4)2.5定时器/计数器的相关寄存器 (5)2.6 定时器/计数器的编程 (5)3 软件设计 (6)3.1定时器初始化 (6)3.2 程序流程图设计 (6)3.3程序代码 (7)4 电路图及仿真设计 (11)4.1设计完成原理图如下 (11)4.2 开始仿真 (12)4.3南北跳转到黄灯5s,东西仍为红灯 (12)5 总结 (13)参考文献 (14)1 概述1.1 引言自从1858年英国人,发明了原始的机械扳手交通灯之后,随后的一百多年里,交通灯改变了交通路况,也在人们日常生活中占据了重要地位,随着人们社会活动日益增加,经济发展,汽车数量急剧增加,城市道路日渐拥挤,交通灯更加显示出了它的功能,使得交通得到有效管制,对于交通疏导,提高道路导通能力,减少交通事故有显著的效果。
近年来,随着科技的飞速发展,电子器件也随之广泛应用,其中单片机也不断深入人民的生活当中。
本模拟交通灯系统利用单片机AT89C51作为核心元件,实现了通过信号灯对路面状况的智能控制。
从一定程度上解决了交通路口堵塞、车辆停车等待时间不合理、急车强通等问题。
系统具有结构简单、可靠性高、成本低、实时性好、安装维护方便等优点,有广泛的应用前景。
本模拟系统由单片机硬/软件系统,两位8段数码管和LED灯显示系统。
和复位电路控制电路等组成,较好的模拟了交通路面的控制。
1.2 设计思路(1)分析目前交通路口的基本控制技术以及各种通行方案,并以此为基础提出自己的交通控制的初步方案。
(2)确定系统交通控制的总体设计,包括,十字路口具体的通行禁行方案设计以及系统应拥有的各项功能,在这里,本设计除了有信号灯状态控制能实现基本的交通功能,还增加了倒计时显示提示,基于实际情况,又增加了紧急状况处理和通行时间可调这两项特特殊功能。
51单片机综合实验交通灯设计报告
51单片机综合实验交通灯设计报告班级:学生姓名:学号:指导教师:一实验题目交通灯控制系统设计二实验目的1、学会用8051单片机开发简单的计算机控制系统;2、学会用汇编语言和C语言开发系统软件;3、学会8051单片机开发环境wave或Keil uVision3软件的使用;4、学会Proteus软件的使用方法,会用Proteus单片机系统进行仿真;5、学会Protel软件的使用方法,会用Protel绘制电气原理图和印制板图;6、熟悉七位数码管显示的使用方法;7、了解交通灯控制系统的基本组成。
三实验要求交通灯处在十字路口上。
它有红﹑黄﹑绿三种颜色的灯组成。
红灯亮时道路上的车辆停止运行;黄灯是一种过渡用的信号灯,当它亮时,表示道路上的红绿色信号灯即将进行转换。
下面拿东西南北四个方向来说明。
当东西方向允许行车(或者左转)的时候,南北方向就禁止行车,即此时东西方向的绿灯亮红灯灭,而南北方向的绿灯灭红灯亮。
反之当南北方向允许行车(或者左转)的时候,东西方向就禁止行车,即此时南北方向的绿灯亮红灯灭,而东西方向的绿灯灭红灯亮。
交通灯配置示意图如图1所示。
同时当有特殊的情况发生时,能手动控制各个方向的信号灯。
设计任务就是将这一电路用单片机来实现具体的控制。
1 十字路口交通灯配置示意图四设计内容与原理为了在后面的分析中便于说明,将南北方向允许直行命名为状态1,南北方向允许左转命名为状态2,南北方向行车到东西方向行车的转换阶段命名为状态3,将东西方向允许直行命名为状态4,东西方向允许左转命名为状态5,东西方向行车到南北方向方向行车的转换阶段命名为状态6。
假定直行绿灯点亮的时间为25s,左转绿灯点亮的时间为20s,黄灯点亮的时间为5s,则对方红灯的点亮时间为50秒。
黄灯每隔500ms亮一次,之后灭500ms (亮灭一次叫作闪烁一次),一共闪烁5次,持续5s。
各个状态之间的变换情况如下:具体显示周期如下:图2交通信号灯点亮时间图设计电路中每个路口的控制信号灯应有四个,即绿灯两个、黄灯、红灯各一个,同时需要七段数码管一个。
基于51单片机的交通灯控制系统设计
一、摘要:随着科技的飞速发展,越来越多的控制功能强大的芯片出现在我们生活中,但8051系列单片机,因为其的廉价几成本,在我们生活中依然处于十分重要的地位。
在实时检测和自动控制的单片机应用系统中,单片机是作为一个核心部件来使用,但是仅单片机方面知识是不够的,还需要根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。
交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
作为交通控制的重要组成部份单片机。
因此,本人选择制作交通灯作为课题加以设计并实现。
交通管制应当以人性化、智能化为目的,做出相应的改善。
以此为出发点,本系统采用的单片机控制的交通信号灯。
系统具有结构简单、可靠性高、成本低、实时性好、安装维护方便等优点,有广阔的应用前景。
关键词:交通灯,51单片机,数码管二、实习目的和意义1.学习51单片机的最小系统及硬件接口设计与应用2.熟练掌握电路原理图绘制软件DPX的使用。
3.熟练单片机的程序设计与调试。
4. 自主设计出具有实际意义的能用于生活的电路系统。
5. 本次课程设计对以后的毕业设计甚至工作打下了动手自己设计的基础。
三、实习要求1. 完成以8051系列单片机为核心处理器的模拟十字路口交通灯控制的硬件设计(在altium designer下画出硬件原理图)。
布线,印制电路板,并焊接原件搭载硬件电路,做出实物。
2. 完成交通灯控制系统的软件编程。
3. 软硬件综合调试,模拟实现对交通灯控制系统的控制。
4. 撰写实验报告:报告中给出硬件方案、软件流程图、软件关键代码四、实习内容1.设计题目:基于51单片机交通十字路口信号灯设计2.实现功能:具有红、绿、黄三种颜色彩灯,并有一个数码管进行倒计时显示倒计时时间为三十秒。
还应具有按键控制特殊情况下十字路口不需要红绿灯的显示(车流量很少的地段深夜可以不设红绿灯)。
五、系统实现1.电路设计:51单片机介绍:本实验使用的51单片机为STC89C52STC89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM)。
基于51单片机交通灯程序完整版
#include<reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intbit Flag_SN_Yellow; //SN黄灯标志位bit Flag_EW_Yellow;//EW黄灯标志位uchar Time_EW;//东西方向倒计时单元uchar Time_SN;//南北方向倒计时单元uchar EW=15,SN=10,EWL=19,SNL=19; //程序初始化赋值,正常模式uchar EW1=60,SN1=40,EWL1=19,SNL1=19;//用于存放修改值的变量ucharFlag_Moden=1; //模式变量1正常模式 2 禁止南北通东西 3 禁止东西通南北 4 禁止东西南北5 夜间模式ucharFlag_key=0;uchar codetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//1~~~~9段选码sbit HC164_Data =P0^0;sbit HC164_Clk =P0^1;sbitEW_green =P0^2;sbitEW_yellow =P0^3;sbitEW_red =P0^4;sbitSN_red =P0^5;sbitSN_green =P0^7;sbitSN_yellow =P0^6;sbitSN_RXD_red =P2^7;sbitSN_RXD_green =P2^6;sbitEW_RXD_red =P2^5;sbitEW_RXD_green =P2^4;sbit FMQ = P1^0;sbit key1 = P3^3;sbit key2 = P3^4;sbit key3 = P3^5;sbit WEI1 =P2^3; // 东西数码管第一位sbit WEI2 =P2^2; // 东西数码管第二位sbit WEI3 =P2^1; // 南北数码管第一位sbit WEI4 =P2^0; // 南北数码管第二位//ucharew=40;sn=35;//函数 delay(uchar z)//功能能延时void Delay(uchar z){uchara,b;for(a=z;a>0;a--)for(b=200;b>0;b--);}void HC_164_Set_byte(ucharduan) {uchar i;for(i=0;i<8;i++){HC164_Data =duan& 0x80;HC164_Clk =0;HC164_Clk =1;duan =duan<<1;}}void display_smg(ucharwei,ucharnum){switch(wei){case 1:WEI1=0;WEI2=1;WEI3=1;WEI4=1;HC_164_Set_byte(table[num]);break; case 2: WEI1=1;WEI2=0;WEI3=1;WEI4=1;HC_164_Set_byte(table[num]);break; case 3: WEI1=1;WEI2=1;WEI3=0;WEI4=1;HC_164_Set_byte(table[num]);break; case 4: WEI1=1;WEI2=1;WEI3=1;WEI4=0;HC_164_Set_byte(table[num]);break; default: break;}}void Display(void){ucharh,l;h=Time_EW/10;l=Time_EW;display_smg(1,h);Delay(8);display_smg(2,l); Delay(8);h=Time_SN/10;l=Time_SN; display_smg(3,h); Delay(8);display_smg(4,l); Delay(8);}void Key(){if(key1==0){ Delay(10);if(key1==0){ while(!key1); Flag_key++;if(Flag_key==1) {Flag_Moden=2;}if(Flag_key==2) {Flag_Moden=3;}if(Flag_key==3) {Flag_Moden=4;}if(Flag_key==4) {Flag_Moden=5;FMQ=1;TR0=1;}if(Flag_key==5) {Flag_EW_Yellow=0; //SN关黄灯信号位 Flag_SN_Yellow=0; //SN关黄灯信号位 FMQ=1;Flag_Moden=1;TR0=1;//启动定时Flag_key=0;}}}if(key2==0){while(!key2);Flag_Moden=2;}if(key3==0){while(!key3);Flag_Moden=3;}}void timer0(void)interrupt 1 using 1 {static uchar count;TH0=(65536-50000)/256;TL0=(65536-50000)%6;count++;if(count==10){if(Flag_SN_Yellow==1) //测试南北黄灯标志位{SN_yellow=~SN_yellow;}if(Flag_EW_Yellow==1) //测试东西黄灯标志位{EW_yellow=~EW_yellow;}}if(count==20){if(Flag_Moden==1){Time_EW--;Time_SN--;}if(Flag_SN_Yellow==1)//测试南北黄灯标志位{SN_yellow=~SN_yellow;}if(Flag_EW_Yellow==1)//测试东西黄灯标志位{EW_yellow=~EW_yellow;}count=0;}}//模式1void Zc_moshi(){//*******S0状态**********EW_RXD_red=0; //EW人行道禁止EW_RXD_green=1;//EW人行道禁止SN_RXD_red=1; //EW人行道通行SN_RXD_green=0;//SN人行道通行Flag_EW_Yellow=0; //EW关黄灯显示信号 Flag_SN_Yellow=0; //SN关黄灯显示信号Time_EW=EW; //EW=45;SN=40;Time_SN=SN;SN_green =0; //SN通行,EW红灯SN_red =1;EW_red =0;EW_green =1;while(Time_EW>5){if(key1==0 || key2==0||key3==0){//Flag_Moden=1;TR0=0;//启动定时break;}Display();}SN_yellow=0; //SN黄灯亮开始闪烁5秒 SN_green =1; //灭//*******S1状态**********Time_SN=5;while(Time_EW<=5){if(key1==0 || key2==0||key3==0){//Flag_Moden=1;TR0=0;//启动定时break;}Flag_SN_Yellow=1; //SN开黄灯信号位 Display();}//*******S2状态**********Flag_SN_Yellow=0; //SN关黄灯显示信号 SN_yellow=1; EW_RXD_red=1; //EW人行道通行SN_RXD_green=1;//SN人行道禁止EW_RXD_green=0; //EW人行道通行SN_RXD_red=0;//SN人行道禁止Time_EW=SN; //EW=45;SN=40;Time_SN=EW;SN_green=1;//南北绿灯禁止东西通行 SN_red=0; //亮EW_red=1;EW_green=0; //亮while(Time_SN>5){if(key1==0 || key2==0||key3==0){//Flag_Moden=1;TR0=0;//启动定时break;}Display();}//*******S3状态**********EW_green=1;EW_yellow=0;Time_EW=5;while(Time_SN<=5){if(key1==0 || key2==0||key3==0){TR0=0;//启动定时break;}Flag_EW_Yellow=1; //SN开黄灯信号位 Display(); }Flag_EW_Yellow=0;EW_yellow=1;}////模式2 禁止南北通东西蜂鸣器响void Jsn() {EW_green =0;EW_yellow =1;EW_red =1;SN_red =0;SN_green =1;SN_yellow =1;SN_RXD_red =0;SN_RXD_green =1;EW_RXD_red =1;EW_RXD_green =0;FMQ =~ FMQ;Delay(10);WEI1=1;WEI2=1;WEI3=1;WEI4=1;}////模式3 禁止东西通南北蜂鸣器响void Jew() {EW_green =1;EW_yellow =1;EW_red =0;SN_red =1;SN_green =0;SN_yellow =1;SN_RXD_red =1;SN_RXD_green =0;EW_RXD_red =0;EW_RXD_green =1;FMQ =~ FMQ;Delay(10);WEI1=1;WEI2=1;WEI3=1;WEI4=1; }//模式4 禁止东西南北蜂鸣器响void JEwSn(){EW_green =1;EW_yellow =1;EW_red =0;SN_red =0;SN_green =1;SN_yellow =1;SN_RXD_red =0;SN_RXD_green =1;EW_RXD_red =0;EW_RXD_green =1;FMQ =~ FMQ;Delay(10);WEI1=1;WEI2=1;WEI3=1;WEI4=1;}//模式5 夜间模式,东西南北黄灯闪烁void Yejian() {EW_green =1;//EW_yellow =1;EW_red =1;SN_red =1;SN_green =1;//SN_yellow =1;SN_RXD_red =1;SN_RXD_green =1;EW_RXD_red =1;EW_RXD_green =1;Flag_EW_Yellow=1; //SN开黄灯信号位 Flag_SN_Yellow=1; //SN开黄灯信号位}void main (){P1=0xff;P2=0xff ;P3=0xff;P0=0xff;EW_green =1;EW_yellow =1;EW_red =1;SN_red =1;SN_green =1;SN_yellow =1;SN_RXD_red =1;SN_RXD_green =1;EW_RXD_red =1;EW_RXD_green =1;WEI1=1;WEI2=1;WEI3=1;WEI4=1;IT0=1; //INT0负跳变触发TMOD=0x01;//定时器工作于方式1TH0=(65536-50000)/256;//定时器赋初值 TL0=(65536-50000)%6; EA=1; //CPU开中断总允许ET0=1;//开定时中断// EX0=1;//开外部INTO中断TR0=1;//启动定时while(1){switch(Flag_Moden) {case 1:Zc_moshi(); break; case 2:Jsn(); break;case 3: Jew();break;case 4: JEwSn();break; case 5: Yejian();break; default :break;}Key(); }}。
C51交通灯程序设计
C51期末课程设计大作业课程名称:交通灯程序设计学院:信息技术学院系别:计算机应用系专业:计算机应用技术班级: Z090X组序号:第二组组员X X学号 XXXXXXXX一、功能要求 (1)二、方案论证 (1)三、硬件解读 (2)四、流程图 (5)五、软件设计 (8)六、设计总结 (15)一、功能要求(一)设计所要完成的功能如下:1、信号灯受一个起动开关控制,当起动开关接通时,信号系统开始工作,且先南北红灯亮,东西绿灯亮。
当起动开关断开时,所有信号灯都熄灭。
2、南北红灯亮维持25S。
在南北红灯亮的同时东西绿灯也亮,并维持20S。
到20S时,东西绿灯闪烁,闪烁3S后熄灭。
在东西绿灯熄灭时,东西黄灯亮,并维持2S。
到2S时,东西黄灯熄,东西红灯亮。
同时,南北红灯熄灭,南北绿灯亮。
东西红灯亮维持30S。
南北绿灯亮维持25S。
然后闪烁3S,熄灭。
同时南北黄灯亮,维持2S后熄灭,这时南北红灯亮,东西绿灯亮3、要有倒计时数码显示。
(二)设计要求:1、功能要求2、方案论证3、系统硬件电路设计(给出键盘电路、LED显示电路)4、系统程序设计(要求给出流程图和程序清单)二、方案论证(一)方案的选择和论证根据题目要求,系统可以划分为几个基本模块:1、时钟模块2、时钟设置模块3、显示译码模块4、复位电路对各模块的实现,分别有以下一些不同的设计方案:(1) 标准时基模块方案一:采用直接从晶振分频得到12MHz信号。
该方案比较容易实现,但精确度不高,很难达到题目精确度的要求。
方案二:采用单片机C51经过延时程序产生12MHz时基信号。
在单片机程序设计中通过延时程序的循环产生所需要的12MHz的时基信号,该方案精确度比较高,而且也易于程序调整,电路结构简单,系统资源占用较小。
基于上述理论分析,拟订方案二。
(2)时钟控制模块方案一:采用单片机对键盘扫描和读取来控制不同时间值。
通过单片机对键盘的引脚不停的扫描,读入某时刻按下的键,通过单片机内部查表程序译出按键所对应的值从而使时间的值发生改变。
51单片机交通灯程序设计
单片机控制交通灯设计方案一、单片机设计交通灯的设计要求:状态一:南北绿灯亮,东西红灯亮,南北人行道绿灯,东西人行道红灯,南北左拐绿灯,东西左拐红灯。
(时间为15S)状态二:南北黄灯亮,东西红灯亮,南北人行道绿灯,东西人行道红灯,南北左拐绿灯,东西左拐红灯。
(时间为5S)状态三:南北红灯亮,东西绿灯亮,南北人行道红灯,东西人行道绿灯,南北左拐红灯,东西左拐绿灯。
(时间为15S)状态四:南北红灯亮,东西黄灯亮,南北人行道红灯,东西人行道绿灯,南北左拐红灯,东西左拐绿灯。
(时间为5S)二、设计原理分析1、首先了解实际交通灯的变化情况和规律。
假设一个十字路口如上图所以,为东南西北走向。
初始状态0:为东西绿灯亮,南北红灯亮;然后转状态1:东西绿灯亮黄灯亮,南北红灯亮黄灯亮;过后转状态2:东西红灯亮,南北绿灯亮;再转状态3:东西红灯亮黄灯亮,南北绿灯亮黄灯亮。
一段时间后,又循环至状态0。
中间可通过中断按钮产生中断,跳入中断程序执行中断。
2、对于交通信号灯来说,应该有东西南北共四组灯,但由于同一道上的两组的信号灯的显示情况是相同的,所以只要用两组就行了,因此,采用单片机内部的I/O口上的P1口中的6个引脚即可来控制6个信号灯。
3、通过编写程序,实现对发光二极管的控制,来模拟交通信号灯的管理。
每延时一段时间,灯的显示情况都会按交通灯的显示规律进行状态转换。
4、通过延时时间送显,可以在原有的交通信号灯系统的基础上,增添其倒计时间的显示功能,实现其功能的扩展。
5.通过脉冲中断编写中断程序,可实现中断。
三、设计的仿真图如下;其接法为:P0接数码管的端选段,P1接数码管的位选端,P2接交通灯,接法如下:P20,P21,P22,分别接南北向的红黄绿灯,P23接南北左拐绿灯,P24,P25,P26,分别接东西向的红黄绿灯,P27接东西左拐红灯东西人行到红绿灯和南北红绿灯接到一起南北人行到红绿灯和东西红绿灯接到一起四、AT89C51的KILL程序#include "reg51.h"#define uchar unsigned char#define uint unsigned intuchar code wei[]={0x01,0x02,0x04,0x08}; //位码选择uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码选择uchar table[4]={0,0,0,0};//四位为选端赋值区间uchar num=0;uchar ID=1;uchar sec=15;uchar n=0;void init(void){P0=0xff;//端口初始化P1=0x00;//端口初始化P2=0x00;//端口初始化TMOD=0x01;//使用定时器0的工作方式EA=1;//开总中断ET0=1;//开定时器0的中断TH0=(65536-10000)/256;//定时10毫秒TL0=(65536-10000)%256;TR0=1;}void main(void){init();while(1){switch(ID)//选择函数{case 1:P2=0x14;break;//东西红,南北绿,case 2:P2=0x12;break;//东西红,南北黄,case 3:P2=0x41;break;//东西绿,南北红,case 4:P2=0x21;break;//东西黄,南北红,default:break;}}}void timer0() interrupt 1//对应中断定时器0{TH0=(65536-10000)/256;TL0=(65536-10000)%256;P1=wei[num];//位选端送值P0=duan[table[num]];//端选端送值num++;if(num==4)num=0;table[0]=(sec-1)/10;table[1]=(sec-1)%10;table[2]=(sec-1)/10;table[3]=(sec-1)%10;n++;if(n==100)//10毫秒执行一百次为一秒{n=0;sec--;if(sec==0){ID++;if(ID==5)//ID=1;switch(ID){case 1:sec=15;break; //case 2:sec=3;break;//case 3:sec=15;break;//case 4:sec=3;break;//default:break;/*default就是默认情况,这个是用在switch中,意思是若case都不满足,则执行default后面的语句*/}}}}。
C51交通灯程序设计
引言概述:
正文内容:
一、设计目的
1.1.实现交通灯的循环变化控制
1.2.提高交通流畅性和效率
1.3.确保交通安全性和顺畅进行
二、设计原理
2.1.使用C51单片机来进行交通灯的控制
2.2.通过输入和输出控制来实现交通灯的变化
2.3.利用定时器来控制交通灯的时间间隔
2.4.使用状态机来管理不同交通灯状态的切换
三、实现步骤
3.1.设计交通路口的几个不同方向的交通流线
3.2.根据交通流量和优先级确定交通灯的时间间隔
3.3.编写C语言程序,在C51单片机上实现交通灯控制3.
4.进行硬件连接和测试,确保程序正常运行
3.5.进行调试和优化,使交通灯控制更加精准和稳定
四、注意事项
4.1.注意交通流量的变化和应对策略的调整
4.2.确保交通灯程序适应不同交通流量和交通情况的变化4.3.防止信号错误和故障导致交通混乱或事故发生
4.4.遵守相关交通规则和法规,确保交通安全
总结:。
基于51单片机的交通灯C语言程序
基于51单片机的交通灯C语言程序
/*南北:P1-0红,P1-1黄,P1-2绿,
东西:P1-4红,P1-5黄,P1-6绿,*/
#include"REG51.H"
sbit P1_0 = 0x90;
sbit P1_1 = 0x91;
TR0=1;
EA=1;ET0=1;
while (1)
{
if(time>24)
P1=0xeb; //P1--2=0,P1_4=0,南北绿东西红
else if(time>19)
{ //南北绿熄灭,南北黄闪烁
P1_2=1;
P1_1=~P1_1; }
//P1=0xed;
else if(time>4 )
P1=0xbe; //P1--0=0,P1_6=0,南北红东西绿
else
{
P1_6=1; //东西绿熄灭,东西黄闪烁
P1_5=~P1_5;
}
if(time>=25)
display((time-20)+(time-25)*100);
else if(time>=20)
display((time-20)*101);
else if(time>=5)
display(time*100+(time-5));
zt=zt/10;
a[1]=zt%10;
zt=zt/10;
a[0]=zt%10;
lie=0x01;
for ( i=0;i<4;i++)
{
P3=~lie;
P2=chr[a[i]];
基于51单片机的交通信号灯系统_毕业设计
毕业设计基于单片机的交通信号的灯控制系统一. 综合实训的主要内容 1.设计任务设计一单片机控制的交通信号灯系统,模拟城市十字路口交通信号灯功能。
2.基本功能要求2.1 交通信号控制直行车道红黄绿灯控制、左行车道绿灯控制、人行横道红绿灯控制。
2.2 通行时间显示数码管倒计时显示通行时间。
2.3 时间参数设置存储按键实现通行时间的设置,并存储到EEPROM (24C02)芯片中。
二. 硬件方案设计与论证 1. 显示模块设计1.1倒计时时间显示设计思想:由于该系统要求完成倒计时显示通行时间的功能,且考虑到实际的交通系统中车辆及行人通行时间不会超过一分钟,基于以上原因,我们考虑完全采用数码管显示,四个路口分别采用一个二位共阴极数码管进行显示。
(其实物图见附录1图5.3)图2.1 数码管原理图原理图分析:为了显示数字或字符,必须对数字或字符进行编码。
七段数码管GND abcde fg dp gf ed c ba(a)(a,b,c,d,e,f,g)加上一个小数点(dp),共计8段,构成一个字节,通过对这八段给予高低平使二极管导通或截止,从而显示不同的数字或字符。
系统中所使用的是2位共阴数码管(实物图见附录),其管脚从左上方起顺时针依次为1,a,b,e,d,2,g,f,dp,c。
1.2 状态灯显示设计思想:由于该系统要求完成状态灯显示的功能,我们把各个路口的红灯和黄灯设成直行和左拐两个通行方式所共有,也就是说,一个路口只需四个状态灯,一个直行通行的绿灯,一个左拐通行的绿灯,一个共有的红灯,一个共有的黄灯,人行横道采用红绿灯控制,综上所述,我们共使用16个LED绿灯,12个LED 红灯,4个LED黄灯来完成状态灯显示功能。
2.控制模块设计2.1 设计思想由于本系统结构简单,实现较容易,不需要大量的外围扩展,所以我们采用STC89C51单片机作为主控制器,STC89C51单片机具有体积小,功耗低,控制能力强,价格低、扩展灵活,使用方便等特点,其最小系统由振荡电路、复位电路构成。
51单片机c语言交通灯设计报告
xxxxxxxxx基于AT89S52交通灯设计学院:电子信息工程专业班级:xxxxxxxxxxxxxx姓名:xx xx学号:xxxxxxxxxxx指导老师:xxxxxxxxxx摘要交通灯在我们日常生活中随处可见,它在交通系统中处于至关重要的位置。
交通灯的使用大大减少了交通繁忙路口的事故发生,给行人和车辆提供一个安全的交通环境,人们的生命和财产安全有了保障。
本设计旨在模拟十字路口的交通灯,以AT89S51单片机为基础,结合按键和数码管等元器件设计出一个简单且完全的交通灯系统。
关键词:交通灯AT89S52 单片机目录一、设计任务 (4)二、AT89S52单片机及其他元器件简介 (4)(1)AT89S52单片机 (4)三、系统硬件电路设计 (6)(1)时钟电路设计 (6)(2)复位电路设计 (6)(3)灯控制电路设计 (7)(4)按键控制电路设计 (7)四、元件清单及实物图 (8)1、程序清单 (8)2、原理图 (9)五、实验心得 (9)附1 源程序代码 (10)附2 原理图 (16)一、设计任务(1)、设计一个十字路口的交通灯控制电路,要求南北方向和东西方向两条交叉道路上的车辆交替运行,每次通行时间都设30秒,时间可设置修改。
(2)、在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道,且黄灯亮时,要求每秒亮一次。
(3)、有紧急车辆要求通过时,系统要能禁止东西和南北两条路上所有的车辆通行。
二、AT89S52单片机及其他元器件简介(1)AT89S52单片机AT89S52是一种低功耗、高性能CMOS8位微控制器。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6位向量2级中断结构,全双工串行口,片内晶振及时钟电路。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机控制交通灯设计方案
一、单片机设计交通灯的设计要求:
状态一:南北绿灯亮,东西红灯亮,南北人行道绿灯,东西人行道红灯,南北左拐绿灯,东西左拐红灯。
(时间为15S)
状态二:南北黄灯亮,东西红灯亮,南北人行道绿灯,东西人行道红灯,南北左拐绿灯,东西左拐红灯。
(时间为5S)
状态三:南北红灯亮,东西绿灯亮,南北人行道红灯,东西人行道绿灯,南北左拐红灯,东西左拐绿灯。
(时间为15S)
状态四:南北红灯亮,东西黄灯亮,南北人行道红灯,东西人行道绿灯,南北左拐红灯,东西左拐绿灯。
(时间为5S)
二、设计原理分析
1、首先了解实际交通灯的变化情况和规律。
假设一个十字路口如上图所以,
为东南西北走向。
初始状态0:为东西绿灯亮,南北红灯亮;然后转状态1:东西绿灯亮黄灯亮,南北红灯亮黄灯亮;过后转状态2:东西红灯亮,南北绿灯亮;再转状态3:东西红灯亮黄灯亮,南北绿灯亮黄灯亮。
一段时间后,又循环至状态0。
中间可通过中断按钮产生中断,跳入中断程序执行中断。
2、对于交通信号灯来说,应该有东西南北共四组灯,但由于同一道上的两组的信号灯的显示情况是相同的,所以只要用两组就行了,因此,采用单片机内部的I/O口上的P1口中的6个引脚即可来控制6个信号灯。
3、通过编写程序,实现对发光二极管的控制,来模拟交通信号灯的管理。
每延时一段时间,灯的显示情况都会按交通灯的显示规律进行状态转换。
4、通过延时时间送显,可以在原有的交通信号灯系统的基础上,增添其倒计时间的显示功能,实现其功能的扩展。
5.通过脉冲中断编写中断程序,可实现中断。
三、设计的仿真图如下;
其接法为:P0接数码管的端选段,
P1接数码管的位选端,
P2接交通灯,接法如下:
P20,P21,P22,分别接南北向的红黄绿灯,
P23接南北左拐绿灯,
P24,P25,P26,分别接东西向的红黄绿灯,
P27接东西左拐红灯
东西人行到红绿灯和南北红绿灯接到一起
南北人行到红绿灯和东西红绿灯接到一起
四、AT89C51的KILL程序
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
uchar code wei[]={0x01,0x02,0x04,0x08}; //位码选择
uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码选择
uchar table[4]={0,0,0,0};//四位为选端赋值区间
uchar num=0;
uchar ID=1;
uchar sec=15;
uchar n=0;
void init(void)
{
P0=0xff;//端口初始化
P1=0x00;//端口初始化
P2=0x00;//端口初始化
TMOD=0x01;//使用定时器0的工作方式
EA=1;//开总中断
ET0=1;//开定时器0的中断
TH0=(65536-10000)/256;//定时10毫秒
TL0=(65536-10000)%256;
TR0=1;
}
void main(void)
{
init();
while(1)
{
switch(ID)//选择函数
{
case 1:P2=0x14;break;//东西红,南北绿,
case 2:P2=0x12;break;//东西红,南北黄,
case 3:P2=0x41;break;//东西绿,南北红,
case 4:P2=0x21;break;//东西黄,南北红,
default:break;
}
}
}
void timer0() interrupt 1//对应中断定时器0
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
P1=wei[num];//位选端送值
P0=duan[table[num]];//端选端送值
num++;
if(num==4)
num=0;
table[0]=(sec-1)/10;
table[1]=(sec-1)%10;
table[2]=(sec-1)/10;
table[3]=(sec-1)%10;
n++;
if(n==100)//10毫秒执行一百次为一秒
{
n=0;
sec--;
if(sec==0)
{
ID++;
if(ID==5)//
ID=1;
switch(ID)
{
case 1:sec=15;break; //
case 2:sec=3;break;//
case 3:sec=15;break;//
case 4:sec=3;break;//
default:break;/*default就是默认情况,这个是用在switch中,意思是若case都不满足,则执行default后面的语句*/
}
}
}
}。