51单片机模拟交通信号灯控制系统设计

设计要求:

1.用LED灯模拟十字路口交通灯控制

2.正常情况下双方向轮流通行

3.特殊情况时,A方向通行

4.紧急情况时,A和B方向都不通行

本任务涉及定时控制东、南、西、北四个方向上的12盏交通信号灯,且出现特殊和紧急情况时,能及时调整交通灯的指示状态。 采用12个LED发光二极管模拟红、黄、绿交通灯,用单片机的P1口控制发光二极管的亮灭状态;而单片机的P1口只有8个控制端,如何控制12个二极管的亮灭呢? 观察LED状态表,可以发现,在不考虑左转弯行驶车辆的情况下,东、西两个方向的信号灯显示状态是一样的,所以,对应两个方向上的6个发光二极管只用P1口的3根I/O端口线控制即可。同理,南、北方向上的6个发光二极管可用P1口的另外3根I/O端口线控制。 当I/O端口线输出高电平时,对应的交通灯熄灭;反之,当I/O端口线输出低电平时,对应的交通灯点亮。

实验原理图如下:

实验程序如下:

#include <REGX52.H>
#define uchar unsigned charuchar t0,t1; //关于定时器延时变量/*******************************************************************************
* 函 数 名         : delay0_5s1
* 函数功能         : 用T1的工作方式1编写延时0.5秒子函数,采用12MHz晶振
* 输    入         : 无
* 输    出         : 无
***+****************************************************************************/void delay0_5s1()
{for(t0=0;t0<10;t0++)     {TH1 = (65536-50000)/256;TL1 = (65536-50000)%256;TR1 = 1;while(!TF1);TF1 = 0;}
}/*******************************************************************************
* 函 数 名         : delay_t1
* 函数功能         : 延时函数,延时时间=0.5秒 乘上 输入值t
* 输    入         :  t 调节延时时间
* 输    出         : 无
***+****************************************************************************/void delay_t1(uchar t)
{for(t1=0;t1<t;t1++){delay0_5s1();}
}/*******************************************************************************
* 函 数 名         : int_0
* 函数功能              : 外部中断0,紧急情况中断,东西南北禁止通行
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/void int_0() interrupt 0
{uchar i,j,k,I,m;       //保护现场锁存数据EA=0;        //关闭总中断允许,该时间不能被中断i=P0;     //把P0口中断前的数据保存到 ij=t0;     //把中断前的定时t0数据保存给 jk=t1;        //把中断前的定时t1数据保存给    kI=TH1;    //把中断前的定时器初值数据保存给 I 和 mm=TL1;EA=1;        //开启总中断P0=0xf6;        //给P0赋值实现的结果,东西南北都是红灯亮其他灯灭delay_t1(10);      //延时5秒后恢复中断前数据EA=0;P0=i;                              //恢复现场恢复数据t0=j;t1=k;TH1=I;TL1=m;EA=1;
}/*******************************************************************************
* 函 数 名         : int_1
* 函数功能         : 外部中断1,特殊情况中断,只允许南北通行
* 输    入         : 无
* 输    出         : 无
***+****************************************************************************/void int_1() interrupt 2
{uchar i,j,k,I,m;       i=P0;              //保护现场锁存数据j=t0;k=t1;I=TH1;m=TL1;EA=1;P0=0xf3;delay_t1(10);        EA=0;P0=i;                //恢复现场恢复数据t0=j;t1=k;TH1=I;TL1=m;EA=1;
}/*******************************************************************************
* 函 数 名         : main
* 函数功能         : 数码管倒计时30秒显示,南北方向绿灯常亮26秒后,闪烁3秒,在变黄灯亮3秒。黄灯灭后,东西方向绿灯常亮26秒后,闪烁3秒,在变黄灯亮3秒。循环显示
* 输    入         : 无
* 输    出         : 无
***+****************************************************************************/void main()
{uchar k;TMOD = 0X10;  //定时器T1设置工作模式1  EA  = 1;   //开总中断运许IT0 = 0;   //外部中断0设置为负跳变触发方式EX0 = 1;  //开启外部中断0中断允许位PX0 = 1;  //外部中断0中断优先级高IT1 = 0; //外部中断1设置为负跳变触发方式EX1 = 1;  //开启外部中断1中断允许位PX1 = 0;  //外部中断1中断优先级低于外部中断0while(1){P0=0xf3;  //1111 0011南北通行delay_t1(48);    //延时24秒for(k=0;k<3;k++)   //绿灯闪烁3秒{P0=0xf7;delay_t1(1);  //0.5秒延时P0=0xf3;   //1111 0111 南北绿灯熄灭,东西红灯常亮delay_t1(1);}P0=0xf5;  //1111 0101 南北黄灯亮3秒,东西红灯常量delay_t1(6);P0=0xde;  //1101 1110 南北红灯亮起,东西绿灯亮delay_t1(48);for(k=0;k<3;k++){P0=0xfe;delay_t1(1);    P0=0xde;delay_t1(1);}P0=0xee; delay_t1(6);}
}

注意事项:

  1. 所遇到的问题:

问题1、定时器延时时间不准确比正常时间更快。for(t0=0;t0<2;t0++)

问题2、外部中断0的中断函数int_0 ()结束后,返回值出现误差。

问题3、紧急情况不能打断特殊情况中断

  1. 解决的方法:

问题1、最后发现是定时器延时函数delay0_5s1的程序设置错误, for(t0=0;t0<10;t0++) ,中间误差0.4秒时间。

问题2、原因在于int_0 ()函数中在写保护及恢复数据时没有对中断进行

关闭及打开导致,可能程序在写保护的时候就被紧急情况中断了,导致 写保护没能全部完成。加上EA总中断开关即可。

问题3、该问题分很多原因,原程序出现该问题在于没有对外部中断进行, 中断优先级设置,只需要在main主函数里面的加上:

PX0 = 1;  //外部中断0中断优先级高

PX1 = 0;  //外部中断1中断优先级低于外部中断0

还有一种更高级的带数码管显示倒计时时间的交通灯,但我的实验要求作业是这样所以没写那个,需要的可以关注私信,我写一下。

51单片机模拟交通信号灯控制系统设计相关推荐

  1. 【Proteus仿真】【51单片机】交通灯控制系统设计

    文章目录 一.功能简介 二.软件设计 三.实验现象 联系作者 一.功能简介 本项目使用Proteus8仿真51单片机控制器,使用数码管.按键.交通信号灯模块等. 系统运行后,交通灯系统开始运行,数码管 ...

  2. 基于51单片机十字路口交通信号灯(启动按键+绿灯同亮报警)

    基于51单片机十字路口交通信号灯(启动按键+绿灯同亮报警) 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J013 目录标题 基于51单片机十字路口 ...

  3. 51单片机实现交通信号灯

    51单片机实现交通信号灯 文章目录 51单片机实现交通信号灯 实验环境 仿真图 实验原理 代码实现 成果图 资源下载 实验环境 软件: Keil5+Proteus7 元件(主要): AT89C51 * ...

  4. 交通灯控制系统c语言编程,基于单片机的交通灯控制系统设计(本科)毕业论文设计.doc...

    基于单片机的交通灯控制系统设计 摘 要 当你路过一个十字路口时,你是否注意到各个方向车辆和行人有有条不紊的通过十字路口.这样井然有序的情境靠什么来实现的呢?靠的是交通灯控制系统.在论文中我使用单片机S ...

  5. 交通信号灯控制系统设计

    交通信号灯控制系统设计 作为一个硬件程序设计民工,最近一直在学习python,写个爬虫,排个序,再画个界面,其实还是挺好玩的.然而这不是我的主业啊!!!-_-||| 下学期开学就要找工作了,明天刚好是 ...

  6. 基于计算机控制的电压跟随器的设计,基于单片机的汽车转弯信号灯控制系统设计...

    <基于单片机的汽车转弯信号灯控制系统设计.doc>由会员分享,可免费在线阅读全文,更多与<基于单片机的汽车转弯信号灯控制系统设计>相关文档资源请在帮帮文库(www.woc88. ...

  7. c语言控制51单片机完成交通信号灯(红绿灯)

    完成目标: 模拟十字路口(东南西北走向)交通灯:通过单片机的P1口控制实验箱上6个LED灯(两红两绿两黄),按照自定义规则控制交通灯. 要求有如下过程:某种颜色灯转另一种颜色的灯之前,要闪烁六次. 我 ...

  8. 基于单片机的交通信号灯控制

    目录 一.方案流程及技术规格书设计 二.系统硬件电路设计 三.系统软件设计 四.系统调试测试与分析 前言        伴随着越来越多的家用小轿车的出现,道路安全问题也越来越被人们重视,当今,红绿灯也 ...

  9. java交通信号灯毕业论文范文_信号灯设计论文,关于基于FPGA的交通信号灯控制系统设计相关参考文献资料-免费论文范文...

    导读:本文关于信号灯设计论文范文,可以做为相关参考文献. 文/ 胡桂戎 陕西警官职业学院 陕西 西安 710021 [摘 要]本文采用FPGA 设计,结合了道路传感器,设计了交通信号灯全感应自适应的控 ...

最新文章

  1. React+Reflux博客实践
  2. php神盾 var 1.54,PHP变量可用字符 - 神盾加密解密教程(一)
  3. 使用 C# 9.0 新语法提升 if 语句美感
  4. 利用 Linux tap/tun 虚拟设备写一个 ICMP echo 程序
  5. Android:Touch和Click的区别
  6. 计算机组成原理—基本概念(不基础的部分)
  7. 我的Go+语言初体验——Go+语言构建神经网络实战手写数字识别
  8. Android进阶2之oauth认证中UC无法跳转的问题
  9. 汽车诊断协议,(K线/CAN总线、kwp2000、ISO14230、ISO1575...)转载
  10. 安装杀毒软件后计算机运行速度慢,我计算机安装杀毒软件后开机启动很慢
  11. 瑞利信道,莱斯信道和高斯信道模型
  12. 汇总!零基础到进阶Graphpad Prism完整指南!教程全方位汇总!
  13. 2020年生肖码表图_2020年十二生肖号码表 查询属相年龄岁数对照图表
  14. angular 居中_垂直居中的N种方法
  15. 等保测评--管理机构安全(ORS)
  16. elasticsearch7.5.0 集群搭建
  17. Java应用中CPU使用率过高该怎么解决
  18. Java面试题-day25 数据库之事务
  19. [自学笔记]UE4(虚幻四)初学者入门
  20. 使用串口转USB连接树莓派

热门文章

  1. Cilium 1.7发布:Hubble UI、全集群网络策略、基于eBPF的Direct Server Return以及更多
  2. 判断请假时间去除周末及节假日
  3. dataframe_缺失率筛选
  4. 关于v$process与v$session中process的理解(转载)
  5. 智能停车场项目(SpringBoot + Vue)
  6. Android开发使用ServerSocket ServerSocketChannel DatagramSocket进行TCP UDP通信 实现服务器与APP消息推送
  7. PTA(Basic Level) 1076:Wifi密码(C语言实现)
  8. 2021-2027全球与中国三相电能表市场现状及未来发展趋势
  9. csgo躲猫猫模式显示服务器已满,CSGO躲猫猫模式服务器地址 CSGO躲猫猫
  10. Android 简单使用第三方提供的.so和.h