51单片机控制交通灯原理图及C语言程序

合集下载

单片机课程设计交通灯(完整版)

单片机课程设计交通灯(完整版)
共阳极段码序列号::DB0C0H,0F9H,0A4H,0B0H,99H
DB92H,82H,0F8H,80H,90H,88H
DB83H,0C6H,0A1H,86H,84H,0FFH,8CH
共阴极段码序列号:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH ,77H,7CH,39H,5EH,79H,71H,76H
设计思想基于完成以上任务分析结合所学有关知识尤其是本学期所学关于单片机的中断系统和定时计数器的相关知识及应用我们知道对于15红绿黄四组各三盏灯的控制可以通过把这十二盏灯分别接到单片机的六个输出引脚若用p1口进行输出则分配如下at89c51l1l2l3l4l5l6东西红东西黄东西绿南北红南北黄南北绿led显示分布1642
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

基于51单片机控制交通灯

基于51单片机控制交通灯

目录

1 绪论 (1)

1.1 课题研究目的 (1)

1.2 研究现状 (2)

1.3 本文的主要工作 (3)

2 系统方案设计 (3)

2.1 总体方案设计与分析 (3)

2.2 主控制器方案 (4)

2.3 显示方案 (5)

3 系统电路设计 (5)

3.1 主控制器电路 (5)

3.1.1 单片机电路 (5)

3.1.2 晶振电路 (7)

3.1.3 复位电路 (7)

3.2 显示电路 (8)

3.3 按键电路 (8)

3.4 交通灯电路 (9)

4 系统硬件设计 (9)

4.1 主程序软件设计 (9)

4.2 子程序软件设计 (11)

4.2.1 显示软件设计 (11)

4.2.2 按键扫描软件设计 (13)

5 系统测试 (13)

5.1 系统调试 (13)

5.2 故障检查 (16)

6硬件组装与调试 (16)

6.1 系统组装 (17)

6.2 上电后调试 (18)

总结 (19)

参考文献 (20)

致谢 ...................................................................................................................错误!未定义书签。附录 (21)

附录1:成品图 (21)

附录2:原理图 (22)

1 绪论

1.1 课题研究目的

19世纪的时候,英国就出现了世界上首个交通信号灯,因为他的能源来自于煤气的交通信号灯,这种方案在后期的设备运行中很容易产生爆炸,所以后来此种交通信号灯设备就没有在出现了。到了20世纪的时候,美国的克利夫兰市又有了交通灯设备,然而此次的能源设计方案是电力信号灯。1930年德国

基于STC90C51单片机的智能交通灯设计

基于STC90C51单片机的智能交通灯设计

基于STC90C51单片机的智能交通灯设计智能交通灯是一种通过感知道路车辆、行人等信息,根据交通流量和

需求来控制交通的一种系统。它能够根据道路的实际情况及交通流量自动

调整红绿灯的时间,并通过显示屏来提醒司机行车注意事项,从而提高道

路交通的效率和安全性。本文将基于STC90C51单片机,设计一个智能交

通灯系统。

首先,我们需要一块合适的开发板,STC90C51是一片广泛应用的单

片机,并且具有丰富的外设接口,适合作为智能交通灯系统的控制主板。

我们可以通过这个单片机来实现对交通灯的控制,以及对传感器信号的处理。

其次,交通灯的设计需要注意车辆和行人的感知和控制。我们可以通

过红外传感器来感知车辆和行人的存在。通过对传感器信号的采集和处理,我们可以确定交通流量,从而根据实际情况来调整交通灯的通行时间。

接下来,我们需要一个显示屏来提醒司机行车注意事项。我们可以通

过数码管或LCD显示屏来显示交通灯的状态,如红灯、绿灯和黄灯的时间等,以便司机及时了解当前交通情况。

最后,我们需要一个交通灯控制算法来实现智能交通灯的自动调整。

在实际交通中,不同道路的通行需求以及交通流量是不断变化的,因此需

要一个智能的算法来根据实时数据来调整交通灯的时间。可以根据不同情

况设置不同的时间参数,如高峰期和低峰期,根据实际情况来灵活调整交

通信号灯的时间。

总结起来,基于STC90C51单片机的智能交通灯设计,需要考虑交通灯的感知和控制、显示屏的显示和交通灯的控制算法。通过合理设计和实现,可以提高道路交通的效率和安全性,为人们的行车提供更好的体验。

红绿灯交通灯51单片机程序

红绿灯交通灯51单片机程序

#include //头文件#define uchar unsigned char#define uint unsigned int //宏定义uchar data buf[4]; //秒显示的变量uchar data sec_dx=20; //东西数默认uchar data sec_nb=30; //南北默认值uchar data set_timedx=20; //设置东西方向的时间uchar data set_timenb=30; //设置南北方向的时间int n;uchar data countt0,countt1;//定时器0中断次数//定义6组开关sbit k4=P3^7; //切换方向sbit k1=P3^5; //时间加sbit k2=P3^6; //时间减sbit k3=P3^4; //确认sbit k5=P3^1; //禁止sbit k6=P1^5; //夜间模式sbit Red_nb=P2^6; //南北红灯标志sbit Yellow_nb=P2^5; //南北黄灯标志sbit Green_nb=P2^4; //南北绿灯标志sbit Red_dx=P2^3; //东西红灯标志sbit Yellow_dx=P2^2; //东西黄灯标志sbit Green_dx=P2^1; //东西绿灯标志bit set=0; //调时方向切换键标志 =1时,南北,=0时,东西bit dx_nb=0; //东西南北控制位bit shanruo=0; //闪烁标志位bit yejian=0; //夜间黄灯闪烁标志位uchar code table[11]={ //共阴极字型码0x3f, //--00x06, //--10x5b, //--20x4f, //--30x66, //--40x6d, //--50x7d, //--60x07, //--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=0X11; //定时器设置TH1=0X3C; TL1=0XB0;TH0=0X3C; //定时器0置初值 0.05STL0=0XB0;EA=1; //开总中断ET0=1; //定时器0中断开启ET1=1; //定时器1中断开启TR0=1; //启动定时0TR1=0; //关闭定时1logo(); //开机初始化P2=0Xc3; // 开始默认状态,东西绿灯,南北黄灯 sec_nb=sec_dx+5; //默认南北通行时间比东西多5秒while(1) //主循环{ key(); //调用按键扫描程序display(); //调用显示程序} }//函数的定义部分void key(void) //按键扫描子程序{ if(k1!=1) //当K1(时间加)按下时{display(); //调用显示,用于延时消抖if(k1!=1) //如果确定按下{TR0=0; //关定时器 shanruo=0; //闪烁标志位关P2=0x00; //灭显示TR1=0; //启动定时1if(set==0) //设置键按下set_timedx++; //南北加1Selseset_timenb++; //东西加1Sif(set_timenb==100)set_timenb=1;if( set_timedx==100)set_timedx=1; //加到100置1sec_nb=set_timenb ; //设置的数值赋给东西南北sec_dx=set_timedx; do{ display(); //调用显示,用于延时}while(k1!=1); //等待按键释放}}i

51单片机用C语言实现交通灯_红绿灯_源程序

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 ;/ / 定义个位 v o i dd e l a y ( u n s 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单片机c语言交通灯设计报告

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是一种低功耗、高

单片机课程设计交通灯

单片机课程设计交通灯

单片机课程设计 - 红绿灯

第一章介绍

随着我国社会经济的发展和城市化进程的加快,道路交通拥堵问题越来越严重。如何合理管理和调度交通,尽可能减少交通拥堵,已成为我国许多地区特别是特大城市迫切需要解决的问题。问题,显然交通信号灯在其中起着不可或缺的作用。本文讨论了控制红绿灯的方法,分析了各种方案的成本效益,并通过软件和硬件实现了它们。然后,对6车道以上道路的“路口红绿灯控制”进行了分析。最后对城市交通信号灯网络的控制进行了展望。希望能给相关政府部门一些参考,更好的改善我们的城市交通。今天的交通发展迅速,车辆大量增加,道路拓宽,人行横道相对较少。即使在车流量大的地方有人行横道,行人也很难过马路。行人自动控制指示系统可以有效改善这种状况。尤其是像这样的大都市,经济高速发展,车辆多,人口稠密。缓解交通问题已成为重中之重。比如我们新校区西门(塔南路)就是这种情况。每天进出校门的学生很多,而且大部分要穿过这条繁忙的高速公路,给师生带来了很大的好处。不便。该系统主要应用于交通运输领域,具有很高的实用价值。该系统利用红灯、黄灯、绿灯来引导车辆和行人,以达到使车辆和行人停下来,减少交通拥堵,为行人节省时间的目的,即保证行人过马路时的安全,也减轻了交管部门的负担。面向公共交通设施,该产品不注重经济效益,而是着眼于未来的发展潜力,从而带动相关产业。用户可以完全掌握行人自动控制指示系统的操作方法,并配合每个按钮的功能,科技的飞速进步直接将我们带入了信息社会,计算机的应用在各个方面得到了普及。经济和社会生活领域。

51单片机C语言编程100例-单片机c语言编程

51单片机C语言编程100例-单片机c语言编程

51单片机C语言编程100例-单片机c语言

编程

51单片机C语言编程100例

在嵌入式系统领域,单片机是常用的硬件平台之一。而C语言作为一种高级编程语言,能够为单片机编程提供更高的效率和便利性。本文将介绍51单片机C语言编程的100个实例,帮助读者了解并掌握单片机的基本编程技巧和应用方法。

一、LED灯控制

1. 实例介绍:通过控制51单片机的IO口输出,实现对LED灯的亮灭控制。

2. 实例代码:

```

#include

sbit LED = P1^0; // 定义P1口的第0位为LED

void main()

{

while(1)

{

LED = 0; // LED灯亮

delay(1000); //延时1秒

LED = 1; // LED灯灭

delay(1000); //延时1秒

}

}

```

二、数码管显示

1. 实例介绍:使用数码管显示数字0-9,并实现数码管的动态显示效果。

2. 实例代码:

```

#include

unsigned char code DispTab[] =

{0xC0,0XF9,0XA4,0XB0,0X99,0X92,0X82};

sbit WeiDu = P1^2;

sbit DUAN = P1^0;

void delay(unsigned int t)

{

unsigned int i;

while(t--)

for(i=0;i<125;i++);

}

void main()

{

unsigned int i;

while(1)

{

P0 = DispTab[i]; // 显示数字i

DUAN = 1; //点亮段码

基于51单片机的交通灯(红绿灯)设计论文报告

基于51单片机的交通灯(红绿灯)设计论文报告

通过单片机仿真交通灯

班级:10级电信

姓名:***

学号:***********

第一章概述

1.设计内容:

用AT89S52单片机控制一个交通信号灯系统,晶振采用12MHZ。

设A车道与B车道交叉组成十字路口,A是主道,B是支道。设计要求如下:用发光二极管模拟交通信号灯,用按键开关模拟车辆检测信号。正常情况下,A、B两车道轮流放行,A车道放行50s,其中5s用于警告;B车道放行30s,其中5s 用于警告。交通繁忙时,交通信号灯控制系统应有手控开关,可人为地改变信号灯的状态,以缓解交通拥挤状况。在B 车道放行期间,若A车道有车而B车道无车,按下开关K1 使 A车道放行15s;在 A车道放行期间,若B车道有车而A车道无车,按下开关K1 使B 车道放行15s。有紧急车辆通过时,按下K2开关使 A、B车道均为红灯,禁行20s。

2.设计目的:

1)进一步熟悉和掌握单片机的结构和工作原理。

2)掌握单片机的接口技术及相关外围芯片的外特性,控制方法。

3)通过课程设计,掌握以单片机为核心的电路设计的基本方法和技术,了解有关电路参数的计算方法。

4)通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。

5)通过完成一个包括电路设计和程序开发的完整过程,为我们今后从事相应工作打下基础。

3.设计原理:

利用“自动控制”控制交通灯的方法。将事先编制好的程序输入单片机,利用单片机的定时、查询、中断功能;能够根据十字路口两个方向上车辆动态状况,采用查询的方式,根据具体情况,自动给予时间通行,其中利用中断方式来处理特殊情况。这样既方便驾驶员、路人,同时还可以紧急处理一些紧急实况。同样具有红、黄、绿灯的显示功能,为驾驶员、路人“照明”。

基于51单片机的十字路口交通灯控制系统设计(含源码及仿真图)

基于51单片机的十字路口交通灯控制系统设计(含源码及仿真图)

课程名称单片机原理及应用课程设计院部名称信息技术学院

专业计算机科学与技术

班级09计(嵌入式系统方向)姓名

学号**********

指导教师刘钰

金陵科技学院教务处制

摘要

本文介绍了一个基于MCS-51及PROTEUS的十字路口交通灯控制系统的设计与仿真,通过对现实路况交通灯的分析研究,理解交通控制系统的实现方法。

十字路口交通灯控制系统通常要实现自动控制和在紧急情况下禁止普通车辆,而让紧急车辆优先通行。本文还对MCS-51单片机的结构特点和重要引脚功能进行了介绍,同时对智能交通灯控制系统的设计进行了详细的分析。最后介绍了PROTEUS嵌入式系统仿真与开发平台的使用方法,利用Proteus 软件对交通灯控制系统进行了仿真,仿真结果表明系统工作性能良好。

关键字:单片机,proteus仿真,中断,十字路口交通灯控制系统

前言

1,十字路口的交通控制系统指挥着人和各种车辆的安全运行,对交叉口实行科学的管理与控制是交通控制工程的重要研究课题,是保障交叉口的交通安全和充分发挥交叉口的通行能力的重要措施,是解决城市交通问题的有效途径。交通灯信号灯的出现是人类历史上的一次重大改革,使人类的聚居生活,产生了深远的影响。使交通得以有效管制,对于疏导交通流量,提高道路通行能力,减少交通事故有明显效果。如何采用合适的控制方法,最大限度利用好耗费巨资修建的城市高速道路,缓解主干道与匝道、城区同周边地区的交通拥堵状况,越来越成为交通运输管理和城市规划部门亟待解决的主要问题。随着电子技术的发展,利用单片机技术对交通灯进行智能化管理,已成为目前广泛采用的方法。

基于51单片机的交通灯设计

基于51单片机的交通灯设计

基于51单片机的交通灯设计

交通信号灯是指示人和交通工具在道路交通中行进方向或行为的一种

交通设施。在设计交通信号灯时,应考虑交通流量、车辆速度、交叉口结

构等因素,以确保交通的顺畅和安全。本文将基于51单片机设计一种交

通信号灯系统,并详细介绍其原理和实现方法。

交通信号灯系统的设计目的是通过控制红、黄、绿三种不同颜色的灯,指示车辆和行人在交通路口安全行驶。在单片机设计中,我们将使用三个LED灯分别代表红、黄、绿三种状态。通过控制LED的亮灭,来实现交通

信号灯的变换。

首先,我们需要选择适当的硬件设备进行交通信号灯的设计。在51

单片机设计中,可以选择STC89C51或者AT89C51等型号的单片机。此外,还需要准备三个LED灯、电阻、电容、按键等器件。

接下来,我们将进行电路设计。在设计电路时,首先将三个LED灯连

接到单片机的三个IO口上,每个IO口通过一个电阻与正极连接,负极与GND连接。此外,在单片机的一个IO口上连接一个按键,通过按下按键

触发程序的执行。

在编写程序之前,首先需要确立交通信号灯的运行逻辑。一般而言,

交通信号灯的运行逻辑如下:

1.全红状态:所有车辆和行人均停止,任何方向都不可行驶。

2.绿灯状态:一些方向的车辆和行人可以行驶,其他方向均不可行驶。

3.黄灯状态:信号灯将要变成红灯或绿灯,此时车辆和行人应注意刹

车或等待。

接下来,我们将编写程序并烧录到单片机中。在程序中,需要使用到定时器和中断来进行交通信号灯的控制。具体步骤如下:

1.在程序中定义三个LED灯所对应的IO口。

2.初始化定时器,并设置定时时间,用于控制信号灯的变化。

51单片机十字路口红绿灯实验报告

51单片机十字路口红绿灯实验报告

51单片机十字路口红绿灯实验报告

引言

交通灯是城市交通管理的重要组成部分,而红绿灯是其中最为基本最常见的道路交

通信号标志,在现代城市交通系统中得到广泛应用。那么如何用单片机来设计实现十字路

口红绿灯系统呢?本次实验就是为了解决这个问题,实验主要是通过进行对单片机的应用,来探讨单片机在红绿灯系统中的应用。

材料和方法

材料:

1. 51单片机开发板;

2. LED灯,包括3颗红色LED灯、3颗黄色LED灯和3颗绿色LED灯;

3. 电阻和跳线;

4. 电源适配器。

方法:

1. 根据给定的原理图,搭建电路;

2. 将单片机与PC机连接,使用Keil和Proteus软件进行编程;

3. 连接电源适配器,测试红绿灯系统是否正常工作。

结果与分析

本实验通过对给定原理图的电路进行搭建,采用Keil和Proteus软件编程能够将单片机应用于红绿灯系统。在开发板的数码管和LED灯上,按照预设的顺序可以实现红绿灯的

交替亮灭。当实验中的按钮按下时,系统会从红灯状态切换到绿灯状态,此时绿灯亮起,

同时其他颜色的灯都与此时相应的状态相符合。当绿灯时间到期后,系统会再次切换回红

灯状态,并且重新计时。总的时间是通过函数Delay()语句来实现的。

在实验过程中,我们还修改了程序的部分代码来满足实际道路交通的需求,例如:红

绿灯通过倒计时来提示司机剩余时间,同时也可以通过按钮手动操作绿灯实现车道管制

等。

该实验在不断的调试过程中得以成功完成。通过制定的方法和步骤,我们了解了单片

机在红绿灯等交通工具中的实际应用,并且得出了相对稳定的实验结果,颇有启示和借鉴

基于51单片机的C语言程序设计

基于51单片机的C语言程序设计

基于51单片机的C语言程序设计实训100例

第 01 篇基础程序设计

01 闪烁的LED

/* 名称:闪烁的LED

说明:LED按设定的时间间隔闪烁

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit LED=P1^0;

//延时

void DelayMS(uint x)

{

uchar i;

while(x--)

{

for(i=0;i<120;i++);

}

}

//主程序

void main()

{

while(1)

{

LED=~LED;

DelayMS(150);

}

}

02 从左到右的流水灯

/* 名称:从左到右的流水灯

说明:接在P0口的8个LED

从左到右循环依次点亮,产生走

马灯效果

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

void DelayMS(uint x)

{

uchar i;

while(x--)

{

for(i=0;i<120;i++);

}

}

//主程序

void main()

{

P0=0xfe;

while(1)

{

P0=_crol_(P0,1); //P0的值向左循环移动

DelayMS(150);

}

}

03 8只LED左右来回点亮

/* 名称:8只LED左右来回点亮

说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/

#include<reg51.h>

51单片机用C语言实现交通灯(红绿灯)源程序

51单片机用C语言实现交通灯(红绿灯)源程序

51单片机用C语言实现交通灯(红绿灯)源程序

2009-10-29 23:00

交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改。

源程序如下:

/*

1、程序目的:使用定时器学习倒计时红绿灯原理主要程序和倒计时一样

2、硬件要求:数码管、晶振12M

*/

#include <reg52.h>

bit red,green,yellow,turnred; //定义红、黄、绿及转红标志

code unsigned char tab[]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//共阴数码管 0-9

unsigned char Dis_Shiwei;//定义十位

unsigned char Dis_Gewei; //定义个位

void delay(unsigned int cnt) //用于动态扫

描数码管的延时程序

{

while(--cnt);

}

main()

{

TMOD |=0x01;//定时器设置 10ms in 12M crystal定时器0,工作方式1,16位定时器

TH0=0xd8; //65535-10000=55535=D8F0(十六进制)

TL0=0xf0;

IE= 0x82; //中断控制,EA=1开总中断,ET0=1:定时器0中断允许TR0=1; //开定时器0中断

P1=0xfc;//红灯亮,根据红黄绿接灯的顺序。

red =1;

while(1)

{

P0=Dis_Shiwei;//显示十位,这里实现用8位数码管,即左1位

51单片机交通灯程序设计

51单片机交通灯程序设计

单片机控制交通灯设计方案

一、单片机设计交通灯的设计要求:

状态一:南北绿灯亮,东西红灯亮,南北人行道绿灯,东西人行道红灯,南北左拐绿灯,东西左拐红灯。(时间为15S)

状态二:南北黄灯亮,东西红灯亮,南北人行道绿灯,东西人行道红灯,南北左拐绿灯,东西左拐红灯。(时间为5S)

状态三:南北红灯亮,东西绿灯亮,南北人行道红灯,东西人行道绿灯,南北左拐红灯,东西左拐绿灯。(时间为15S)

状态四:南北红灯亮,东西黄灯亮,南北人行道红灯,东西人行道绿灯,南北左拐红灯,东西左拐绿灯。(时间为5S)

二、设计原理分析

1、首先了解实际交通灯的变化情况和规律。假设一个十字路口如上图所以,

为东南西北走向。初始状态0:为东西绿灯亮,南北红灯亮;然后转状态1:东西绿灯亮黄灯亮,南北红灯亮黄灯亮;过后转状态2:东西红灯亮,南北绿灯亮;再转状态3:东西红灯亮黄灯亮,南北绿灯亮黄灯亮。一段时间后,又循环至状态0。中间可通过中断按钮产生中断,跳入中断程序执行中断。2、对于交通信号灯来说,应该有东西南北共四组灯,但由于同一道上的两组的信号灯的显示情况是相同的,所以只要用两组就行了,因此,采用单片机内部的I/O口上的P1口中的6个引脚即可来控制6个信号灯。

3、通过编写程序,实现对发光二极管的控制,来模拟交通信号灯的管理。每延时一段时间,灯的显示情况都会按交通灯的显示规律进行状态转换。

4、通过延时时间送显,可以在原有的交通信号灯系统的基础上,增添其倒计时间的显示功能,实现其功能的扩展。

5.通过脉冲中断编写中断程序,可实现中断。

51单片机c语言交通灯设计报告

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是一种低功耗、高

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ge1=(temp+5)%10; shi2=temp/10; ge2=temp%10; if(temp==0) { temp=26; break; } } display(ge1,shi1,ge2,shi2); } } void init3() //第三个状态:东西绿灯变为黄灯闪 5 次、南北亮红灯 5S { uint temp; temp=6; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(1) { RED_NANBEI=0; GREEN_DONGXI=1; if(aa==20)//定时 20*50MS=1S { aa=0; temp--; YELLOW_DONGXI=~YELLOW_DONGXI; shi1=temp/10; shi2=shi1; ge1=temp%10; ge2=ge1; } if(temp==0) { temp=6; break; } display(ge1,shi1,ge2,shi2); } }
Proteus 仿真原理图:
Keil C 源程序: #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit RED_DONGXI = P1^0;//南北方向红灯亮 sbit YELLOW_DONGXI = P1^1;//南北方向黄灯亮 sbit RED_NANBEI = P1^3;//东西方向红灯亮 sbit GREEN_DONGXI = P1^2;//南北方向绿灯亮 sbit YELLOW_NANBEI = P1^4;//东西方向黄灯亮 sbit GREEN_NANBEI = P1^5;//东西方向绿灯亮 sbit DXweixuan1 = P1^6;//南北方向数码管位选 1 sbit DXweixuan2 = P1^7;//南北方向数码管位选 2 sbit NBweixuan1 = P3^0;//东西方向数码管位选 1 sbit NBweixuan2 = P3^1;//东西方向数码管位选 2 sbit L1=P3^5; sbit L2=P3^6; sbit L3=P3^7; uint aa, bai,shi,ge,bb; uint shi1,ge1,shi2,ge2; uint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uint code table1[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
TL0=(65535-50000)%256; aa++; } void delay(uint z) {uint x,y; for(x=0;x<z;x++) for(y=0;y<110;y++); }
while(1) { RED_NANBEI=1; RED_DONGXI=0; GREEN_DONGXI=1; GREEN_NANBEI=1; if(aa==20) { aa=0; temp--; YELLOW_NANBEI=~YELLOW_NANBEI; shi1=temp/10; shi2=shi2; ge1=temp%10; ge2=ge1; if(temp==0) { temp=6; break; } } display(ge1,shi1,ge2,shi2); } } void display(uint shi1,uint ge1,uint shi2,uint ge2) { DXweixuan1=0; DXweixuan2=1; NBweixuan1=1; NBweixuan2=1; P0=table[ge1]; delay(5); DXweixuan1=1; DXweixuan2=0; NBweixuan1=1; NBweixuan2=1; P0=table[shi1]; delay(5); DXweixuan1=1; DXweixuan2=1; NBweixuan1=0; NBweixuan2=1;
void init4()//第四个状态:东西亮绿灯 25~0S,南北方向亮红灯 30~5S; { uint temp; temp=26; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(1) { RED_DONGXI=0; RED_NANBEI=1; YELLOW_DONGXI=1;//第一个状态东西、南北均亮红灯 5S GREEN_NANBEI=0; if(aa==20) { aa=0; temp--; shi1=temp/10; shi2=(temp+5)/10; ge1=temp%10; ge2=(temp+5)%10; if(temp==0) { temp=26; break; } } display(ge1,shi1,ge2,shi2); } } void init5()//第五个状态:东西亮红灯、南北绿灯闪 5 次转亮黄灯 5S { uint temp; temp=6; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1;
P0=table[ge2]; delay(5); DXweixuan1=1; DXweixuan2=1; NBweixuan1=1; NBweixuan2=0; P0=table[shi2]; delay(5); } void xint0() interrupt 0 { RED_NANBEI=0; RED_DONGXI=0; GREEN_NANBEI=1; GREEN_DONGXI=1; YELLOW_NANBEI=1; YELLOW_DONGXI=1; P0=0x00; NBweixuan1=0; NBweixuan2=0; DXweixuan1=0; DXweixuan2=0; delay(2); return ; } void xint1() interrupt 2 { RED_NANBEI=1; RED_DONGXI=1; GREEN_NANBEI=0; GREEN_DONGXI=0; YELLOW_NANBEI=1; YELLOW_DONGXI=1; P0=0x00; NBweixuan1=0; NBweixuan2=0; DXweixuan1=0; DXweixuan2=0; delay(2); return ; } void xtimer0() interrupt 1 { TH0=(65535-50000)/256;
void void void void void void void void void void void void void
delay(uint z); init(uint a); display(uint shi1,uint ge1,uint shi2,uint ge2); xtimer0(); init1(); init2(); init3(); init4(); init5(); xint1(); xint0(); LED_ON(); LED_OFF();
Biblioteka Baidu
RED_DONGXI=0; RED_NANBEI=0; GREEN_DONGXI=1; GREEN_NANBEI=1; YELLOW_DONGXI=1; YELLOW_NANBEI=1; if(aa==20)//定时 20*50MS=1S { aa=0; temp--; } shi1=shi2=temp/10; ge1=ge2=temp%10; if(temp==0) { temp=5; break; } display(ge1,shi1,ge2,shi2); } }
void main() { P0=0xFF; P1=0xFF; P2=0x00; P3=0xFF; EA=1; EX0=1; IT0=0; init1(); while(1) { init2();//第 2 个状态 init3(); //第 3 个状态 init4(); //第 4 个状态 init5();//第 5 个状态 } } void init1()//第一个状态:东西、南北方向均亮红灯 5S { uint temp; temp=5; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(1) {
//第一个状态东西、南北均亮红灯 5S
void init2()//第二个状态:东西亮红灯 30S~5S、南北亮绿灯 25~0S; { uint temp; temp=26; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(1) { RED_DONGXI=1; RED_NANBEI=0; GREEN_DONGXI=0; GREEN_NANBEI=1; YELLOW_DONGXI=1;//第二个状态:东西亮绿灯 25S、南北亮红灯 YELLOW_NANBEI=1; if(aa==20)//定时 20*50MS=1S { aa=0; temp--; shi1=(temp+5)/10;
相关文档
最新文档