基于单片机的交通灯信号控制器设计

一:功能要求

设计一个基于单片机的交通灯信号控制器。已知东、西、南、北四个方向各有红黄绿色三个灯,在东西方向有两个数码管,在南北方向也有两个数码管。要求交通灯按照表1进行显示和定时切换,并要求在数码管上分别倒计时显示东西、南北方向各状态的剩余时间。

二:任务分析与整体设计思路

通过分析可知本次设计要求实现的功能主要包括计时功能、动态扫描以及状态的切换等几部分。

计时功能:要实现计时功能则需要使用定时器来计时,通过设置定时器的初始值来控制溢出中断的时间间隔,再利用一个变量记录定时器溢出的次数,达到定时1秒钟的功能。当计时每到1秒钟后,东西、南北信号灯各状态的暂存剩余时间的变量减1。当暂存剩余时间的变量减到0时,切换到下一个状态,同时将下一个状态的初始的倒计时值装载到计时变量中。开始下一个状态,如此循环重复执行。

根据表1我们可以将其整个过程看做是一个以60秒钟为一个单位的大循环,这个单位又可以细分为4个小的部分,如下图所示:

当东西方向为红灯时,南北方向有25秒的绿灯加5秒的红灯组成;当南北方向为红灯时,南北方向有25秒的绿灯加5秒的红灯组成。这一点在做数码管倒计时显示的时候应该多加注意。

动态扫描:需要使用4个数码管分别显示东西、南北的倒计时数字,将暂存各状态剩余时间的数字从变量中提取出“十位”和“个位”,用动态扫描的方式在数码管中显示。

三:硬件电路图设计

硬件protuse仿真电路如图所示。考虑到现实的情况,东西与南北方向的电路是呈镜像的。因此只需要考虑斜对称电路中的任何一边。

本电路设计是用P0口的P0.0至P0.5控制南北方向六盏灯,用P1口作数码管的段选,用P2口的前四个端口作为数码管的位选。具体连接方式见图。

四:代码分析

//**************************************************************************// // trafficlight // // (c)copyright luyang // //**************************************************************************// //*****************************文件信息************************************* //**文 件 名:trafficlight.c //**创 建 人:卢阳 //**联系(QQ):1341679830 //**创建日期:2011-02-26 //************************************************************************** #include <reg51.h> #define uchar unsigned char #define uint unsigned int //定义全局变量 uchar a=0; //东西显示时间的缓存变量 uchar b=0; //南北显示时间的缓存变量 uchar time=0; //记录循环单位的位置 uchar int_time=0;//记录中断的次数 uchar clock_a_red=30; //东西定时器初值 uchar clock_a_green=25; uchar clock_a_yellow=5; uchar clock_b_red=30; //南北南北计时器初值 uchar clock_b_green=25; uchar clock_b_yellow=5; uchar code table[]={ //数码管显示编码 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; //延时模块 void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } //主函数模块 void main() { TMOD=0X01; TH1=(65535-50000)/256; TH0=(65535-50000)%256; EA=1; ET0=1; TR0=1; P2=0xff; P1=0x00; while(1) { /*数码管显示模块*/ P2=0xfe; P1=table[a/10]; delayms(1); P2=0xfd; P1=table[a%10]; delayms(1); P2=0xfb; P1=table[b/10]; delayms(1); P2=0xf7; P1=table[b%10]; delayms(1); } } //中断服务模块 void T0_tme() interrupt 1 { TH1=(65535-50000)/256; TH0=(65535-50000)%256; if(20==int_time++) { time++; if(time>=0&&time<25) { P0=0xde; a=clock_a_red--; b=clock_b_green--; } else if(time>=25&&time<30) { P0=0xee; clock_b_green=25; a=clock_a_red--; b=clock_b_yellow--; } else if(time>=30&&time<55) { P0=0xf3; clock_a_red=30; clock_b_yellow=5; a=clock_a_green--; b=clock_b_red--; } else if(time>=55&&time<60) { P0=0xf5; clock_a_green=25; a=clock_a_yellow--; b=clock_b_red--; } else { time=0; clock_a_yellow=5; clock_b_red=30; } int_time=0; } }

五:问题思考

1、代码的继续优化

2、显示黄灯时黄灯的闪烁实现

3、功能的继续增强

……

【注】代码文档和仿真文件下载地址http://download.csdn.net/source/3049609

基于单片机的交通灯信号控制器设计相关推荐

  1. 基于AT89C51单片机的交通灯控制系统的设计

    一.前言 本文中交通灯系统采用MSC-51单片机AT89C51核心来设计交通灯控制器,利用单片机的外围扩展,显示电路构成基本硬件,编程实现对定时.控制.显示电路的控制,调试仿真,完成设计.本系统实现了 ...

  2. 基于单片机的交通灯设计

    摘要 本系统由单片机系统.键盘.LED 显示.交通灯演示系统组成.系统包括人行道.左转.右转.以及基本的交通灯的功能.系统除基本交通灯功能外,还具有倒计时.时间设置.紧急情况处理.分时段调整信号灯的点 ...

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

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

  4. 【019】基于51单片机的交通灯Proteus仿真设计

    一.资料内容 (1).基于51单片机的交通灯proteus仿真设计一份: (2).基于51单片机的交通灯proteus仿真设计keli源代码一份: (3).基于51单片机的交通灯proteus仿真设计 ...

  5. 单片机中灯泡显示miss_基于单片机的交通灯计 参考文献1.doc

    基于单片机的交通灯计 参考文献1 基于单片机的交通灯设计 发布: 2011-5-17 | 作者: -- | 来源:jiaoyouhao| 查看: 578次 | 用户关注: 一. 系统功能要求:1. 设 ...

  6. 基于单片机的交通灯设计c语言程序,基于单片机AT89C51控制的十字路口交通灯系统设计...

    摘要:本文设计一个单片机AT89C51控制的十字路口交通灯,通过硬件电路设计.元器件使用.软件设计.仿真等环节,实现主干道和支干道的分时控制,保证正常的交通秩序. 关键词:单片机 系统设计 交通灯 1 ...

  7. 基于51单片机的交通灯控制系统课程设计(含proteus仿真图及代码)

    一.设计要求: 1,十字路口的交通控制系统指挥着人和各种车辆的安全运行,对交叉口实行科学的管理与控制是交通控制工程的重要研究课题,是保障交叉口的交通安全和充分发挥交叉口的通行能力的重要措施,是解决城市 ...

  8. 基于51的交通灯Proteus仿真设计

    目录 运行环境 仿真图像 特点 软件硬件实现 注意: 部分代码 交通灯逻辑处理部分代码 HC595发送代码 运行环境 keil5,proteus8.5 仿真图像 特点 这个设计相比较其他设计而言,使用 ...

  9. 基于单片机十字路口交通灯系统(含原理图)-资料

    资料下载地址-1072(百度网盘):点击下载 #include<reg51.h> #define uchar unsigned char #define uint unsigned int ...

最新文章

  1. apache 重定向tomcat端口_Tomcat
  2. 【开发环境】Mac 中 IntelliJ IDEA 运行 Python 程序 ( 安装 Python Community Edition 插件 )
  3. 【LeetCode】128. 最长连续序列
  4. 【Spring 5】响应式Web框架实战(上)
  5. crontab执行shell脚本日志中出现乱码
  6. (47)Xilinx VIO IP核配置(八)(第10天)
  7. 苹果公司反诉堡垒之夜开发商Epic,寻求惩罚性赔偿
  8. 利用数组构造MaxTree
  9. 妙哉!那个用文言文编程的小哥,竟从28万行唐诗中找出了对称矩阵
  10. 计算机科学与技术双一流排名,计算机科学与技术学科排行榜(大学名单大全2020版)...
  11. 【Latex】将TIF文件转换成EPS文件
  12. localtime和localtime_r
  13. Excel如何将单元格多数据拆分并
  14. 单目深度估计 | Learning Depth from Monocular Videos using Direct Methods 学习笔记
  15. 2022-2027年中国棉纱行业市场全景评估及发展战略规划报告
  16. 【第三届集创赛】Arm杯一等奖作品分享一:车牌的高速精准识别
  17. cento7安装kvm并通过kvm命令行安装centos7
  18. fastadmin 简单的根据单选按钮显示对应的文本框
  19. 【雷达系统导论】-雷达简介
  20. Jenkins 凭证管理

热门文章

  1. 入门嵌入式,开发板应该怎么选?
  2. Jenkins + Gitlab 实现代码流水线部署
  3. Google PR值原理和详细解说
  4. 三:debian安装,附加开店系统
  5. C - 数字三角形问题
  6. springboot线程中获取spring beans
  7. java hibernate 是什么意思_Java开源项目Hibernate意义是什么?
  8. 如何通俗的解释全微分
  9. solaris配置php,Solaris 9.0下安装配置Apache-2.0.45+php-4.3.1+mysql-4.1.0
  10. 交换机安全技术你还一知半解?赶紧来学习吧