当前位置: 首页 > news >正文

C51交通控制系统的设计与实现

实验要求:

本题目拟设计一个工作在十字路口的交通信号灯控制系统,设东西方向为主干道A,南北方向为辅助干道B。要求:(1)用发光二极管模拟交通灯信号;(2)灵活控制主、辅干道交通指示灯的显示时间;(3)设计交通灯控制系统硬件电路;(4)运用C51语言完成对控制系统的软件编程。

一、需求分析

1.1   实验背景

随着科技的快速发展,时间的流逝,单片机技术的应用产品已经走进了千家万户。计算器给人们日常生活中的计算带来了许多方便。随着微电子技术的高速发展,单片机已经在国民经济的个人领域得到了广泛的应用。单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理等各种测控领域的应用中独占鳌头、单片机开发技术已成为电子信息、电气、通信、自动化等专业技术人员必须掌握的技术。

单片机单芯片的微小体积和低的成本,可广泛地嵌入到如玩具、家用电器、机器人、仪器仪表、汽车电子系统、工业控制单元、办公自动化设备、金融电子系统、舰船、个人信息终端及通讯产品中,成为现代电子系统中最重要的智能化工具,于是基于单片机的计算器也顺应而生。基于单片机的计算器用按键来模拟数字、运算符的输入,从而得出结果送给显示设备显示出来,方便人们的生活。

1.2   问题描述

设计一个工作在十字路口的交通信号灯控制系统,设东西方向为主干道A,南北方向为辅助干道B。用Proteus软件进行仿真,实现此次功能。

 1.3    基本要求

1.  完成的形式

(1)  熟悉设计题目内容、查找相关资料。

(2)  确定系统的总体设计方案。

(3)  编写语言代码,并调试。

(4)  Proteus模拟实现交通灯控制

二、 概要设计

2.1     设计方案

2.1.1交通灯四种通行模式及行车方向指示

  1.  按照简单的交通路口规则,有四种模式

南北绿灯亮 东西红灯亮;

南北黄灯闪 东西红灯亮;

南北红灯亮 东西绿灯亮;

南北红灯亮 东西黄灯闪;

 2.2    程序流程图

                                                               程序流程图

2.3   模块功能

2.3.1   信号灯显示模块由于南北方向的信号灯始终是同一种状态,所以南北信号灯为一组,只需将对应的信号灯并联即可,东西方向同理。

2.3.2   倒计时显示模块

选取8个7段数码管分别模拟显示四个方向的倒计时,数码管采用共阴极接法。

为了提高P0、P2端口的电流输出能力,保证数码管亮度,保护端口引脚,在P0端口与数码管之间增加了74LS245芯片。

2.3.3   复位模块

此系统可以通过复位按键实现从新工作,电路图如图所示

三、详细设计

3.1   实验原理

3.1.1   外部中断原理

本系统主要使用了外部中断,中断信号有引脚INTO和INT1输入,低电平有效,CPU每个时钟周期都会检测INTO和INT1上的信号,AT89C51允许外部中断以电平方式或负边沿方式两种中断方式输入中断请求信号,可由用户通过设置TCON中ITO和IT1位的状态来实现。以ITO为例,ITO=0,为电平触发方式,ITO=1,为负边沿触发方式,本设计采用电平方式,IEO为其中断标志位,有中断信号则置位,中断服务子程序响应后,IEO自动清零。IE中的EA为允许中断的总控制位,为1开启,EXO为外部中断允许控制位,为1开启。

在优先级的允许下,一旦有外部中断信号产生,单片机CPU首先保护断点,PC值进栈,然后执行相应的中断服务子程序,执行完后,用RETI指令返回,此时CPU会从堆栈中取保存的断点地址,送回PC,程序再正常执行。

3.1.2  软件延时原理

MCS-51的工作频率为12MHZ,机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12∗(1/12MHZ)=1us。我们可以知道具体每条指令的周期数这样我们就可以通过指令的执行条数来确定1秒的时间,但同时由于单片机的运行速很快其他的指令执行时间可以忽略不计。

3.1.3  数码管显示原理

共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。

3.2   设计思路

(1)利用仿真软件绘制仿真实例

   1.用 traffic light 和一个led灯表示红、黄、绿的信号灯。

   2.用p0口控制交通灯,用P1口控制数码管的段选,P2口控制数码管的位选。

   3.p3.6和p3.7接收中断信号并返回给INT0接口处理。

 (2)利用keil软件按要求编写程序实现相应功能。

3.3   主要程序编写

#include <reg51.h>
#define	uchar	unsigned char
#define	uint	unsigned intsbit	SN_LED2=P2^3;	//SN_LED2控制位
sbit	SN_LED1=P2^2;	//SN_LED1控制位
sbit	EW_LED2=P2^1;	//EW_LED2控制位
sbit	EW_LED1=P2^0;	//EW_LED1控制位sbit  EW_Yellow=P1^6; //EW黄灯
sbit  EW_Red=P1^7;    //EW红灯
sbit  EW_Green=P1^5;  //EW绿灯
sbit  SN_Yellow=P1^2; //SN黄灯
sbit  SN_Red=P1^3;    //SN红灯
sbit  SN_Green=P1^1;  //SN绿灯bit	  Restore_flag=0;			//恢复正常标志位
bit   Flag_EW_Yellow;     //EW黄灯标志位
bit   Flag_SN_Yellow;     //SN黄灯标志位
char	Time_SN;  //南北方向倒计时单元
char	Time_EW;  //东西方向倒计时单元
uchar SN=15,EW=20;     //程序初始化赋值       
uchar SN1=15,EW1=10;   //用于存放修改值的变量 
uchar code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0~~~~9段选码
uchar code S[9]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84,0x88};//交通信号灯控制代码/**********************延时子程序************************/
void delay_ms(uint x) //延时ms
{uint i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);
}
/*****************显示函数**************************/
void Display(void)
{char h,l;h=Time_SN/10;l=Time_SN%10;P0=table[l];SN_LED2=1;delay_ms(1);SN_LED2=0;P0=table[h];SN_LED1=1;delay_ms(1);SN_LED1=0;				//南北方向数码管显示h=Time_EW/10;l=Time_EW%10;P0=table[l];EW_LED2=1;delay_ms(1);EW_LED2=0;P0=table[h];EW_LED1=1;delay_ms(1);EW_LED1=0;				//东西方向数码管显示	
} /**********************T0中断服务程序*******************/
void timer0()  interrupt 1 
{static uchar count;			 //count为静态变量初值为0TL0 = 0xB0;						 	 //重赋定时初值50msTH0 = 0x3C;							 //重赋定时初值50mscount++;								 //计数if(count==10)					   //加快闪烁速度{if(Flag_EW_Yellow==1)  //测试东西黄灯标志位{EW_Yellow=~EW_Yellow;}//东西黄灯闪烁if(Flag_SN_Yellow==1)  //测试南北黄灯标志位{SN_Yellow=~SN_Yellow;}//南北黄灯闪烁}if(count==20)						 			//20*50=1000ms=1S	{Time_SN--;				 					//南北方向倒计时Time_EW--;			   					//东西方向倒计时if(Flag_EW_Yellow==1)					//测试东西黄灯标志位{EW_Yellow=~EW_Yellow;}		//东西黄灯闪烁if(Flag_SN_Yellow==1)					//测试南北黄灯标志位{SN_Yellow=~SN_Yellow;}		//南北黄灯闪烁count=0;}
}/*********************主程序开始**********************/
void main(void)
{
/*********************中断初始化**********************/IT0=1;									 //设置外部中断0触发方式(下降沿触发)EX0=1;									 //打开外部中断0的IE寄存器中断EA=1;  									 //CPU开中断总允许ET0=1;									 //开定时中断TMOD=0x01;							 //定时器工作于方式1TL0 = 0xB0;						 	 //设置定时初值50msTH0 = 0x3C;		           //设置定时初值50msTF0 = 0;		             //清除TF0标志TR0 = 1;		             //定时器0开始计时
while(1)										{if(Restore_flag)break;		/*******S1状态(南北直行状态)**********/Time_SN=SN;							//南北数码管赋值10s	Time_EW=EW;							//东西数码管赋值15swhile(Time_EW>=6)				//东西方向倒计时前10s循环体{  Flag_EW_Yellow=0;  	//南北关黄灯显示信号			  P1=S[4];	 						//南北通行,东西红灯Display();  					//调用显示函数if(Restore_flag)break;}/*******S2状态(南北直行黄灯闪烁状态)**********/P1=0x00;							//所有路口红绿灯短时熄灭if(Time_EW==5)					//当东西倒计时为5s时Time_SN=5;					//南北重新从5s开始倒计时while(Time_EW>=1)				//东西方向倒计时最后5s循环体{Flag_SN_Yellow=1;		//南北开黄灯信号位EW_Red=1;						//南北黄灯开始闪烁,东西红灯亮	Display();						//调用显示函数if(Restore_flag)break;			 }/***********赋值(南北通行变东西通行)**********/SN=SN1;									//南北10s-->15sEW=EW1;									//东西15s-->10s	 /*******S3状态(东西直行状态)**********/			Time_SN=SN;							//南北数码管赋值15sTime_EW=EW;							//东西数码管赋值10swhile(Time_SN>=6)			//南北方向倒计时前10s循环体{ Flag_SN_Yellow=0;	  //南北关黄灯显示信号P1=S[0];	 					//东西通行,南北红灯Display();				  //调用显示函数if(Restore_flag)break;		}/*******S4状态(东西直行黄灯闪烁状态)**********/P1=0X00; 					    //所有路口红绿灯短时熄灭if(Time_SN==5)				//当南北倒计时为5s时Time_EW=5;					//东西重新从5s开始倒计时while(Time_SN>=1)				//南北方向倒计时最后5s循环体{Flag_EW_Yellow=1;	  //东西开黄灯信号位SN_Red=1;            //东西黄灯开始闪烁,南北红灯亮Display();				    //调用显示函数if(Restore_flag)break;				 }/***********赋值(东西通行变南北通行)**********/SN=EW1;									//南北15s-->10sEW=SN1;									//东西10s-->15s	 } 			    }
  • 四、测试与分析

 

4.1   仿真结果

首先焊接各个电路板,焊接完每个电路板以后,对电路板对的每个模块分别进行测试,以确保在整个系统焊接完能正常的工作。单独测试后,将2个电路板连接起来,进行最后的结果测试。

实验结果与预期相符:

                      

                            

相关文章:

C51交通控制系统的设计与实现

实验要求&#xff1a; 本题目拟设计一个工作在十字路口的交通信号灯控制系统&#xff0c;设东西方向为主干道A&#xff0c;南北方向为辅助干道B。要求&#xff1a;&#xff08;1&#xff09;用发光二极管模拟交通灯信号&#xff1b;&#xff08;2&#xff09;灵活控制主、辅干…...

深度学习的超参数

1. 引言 1.1 什么是超参数&#xff1f; 在机器学习和深度学习中&#xff0c;超参数&#xff08;Hyperparameter&#xff09; 是在模型训练前由开发者设置的参数&#xff0c;这些参数决定了模型的训练过程和模型的结构。例如&#xff1a; 神经网络的层数和每层神经元的数量。…...

网络安全面试题及经验分享

本文内容是i春秋论坛面向专业爱好者征集的关于2023年面试题目和答案解析&#xff0c;题目是真实的面试经历分享&#xff0c;具有很高的参考价值。 shiro反序列化漏洞的原理 Shiro反序列化漏洞的原理是攻击者通过精心构造恶意序列化数据&#xff0c;使得在反序列化过程中能够执…...

【Golang 面试题】每日 3 题(三十一)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…...

微服务架构:挑战与机遇并存

微服务架构在提升系统灵活性、可扩展性和容错性的同时&#xff0c;也引入了一系列挑战。微服务带来的挑战主要有以下几点&#xff1a; 1. 系统复杂性增加&#xff1a;想象一下&#xff0c;你原本有一个大厨房&#xff08;单体应用&#xff09;&#xff0c;里面有几个大厨&…...

Vue语音播报功能

使用Web Speech API的SpeechSynthesis接口来实现文本转语音 Web Speech API可能不在所有浏览器中都能完美支持 特别是旧浏览器 在生产环境中&#xff0c;你可能需要添加功能检测和后备方案。<template><div><textarea v-model"text" placeholder&quo…...

【Java设计模式-4】策略模式,消灭if/else迷宫的利器

各位Java编程小伙伴们&#xff01;今天咱们要一起探索一个超级厉害的Java设计模式——策略模式&#xff0c;它就像是一把神奇的魔法剑&#xff0c;专门用来斩断那些让我们代码变得乱糟糟的if/else语句迷宫&#xff01; 一、if/else的烦恼 在编程的奇妙世界里&#xff0c;我们…...

citrix netscaler13.1 重写负载均衡响应头(基础版)

在 Citrix NetScaler 13.1 中&#xff0c;Rewrite Actions 用于对负载均衡响应进行修改&#xff0c;包括替换、删除和插入 HTTP 响应头。这些操作可以通过自定义策略来完成&#xff0c;帮助你根据需求调整请求内容。以下是三种常见的操作&#xff1a; 1. Replace (替换响应头)…...

【AI学习】地平线首席架构师苏箐关于自动驾驶的演讲

在地平线智驾科技畅想日上&#xff0c;地平线副总裁兼首席架构师苏箐&#xff08;前华为智驾负责人&#xff09;做了即兴演讲&#xff0c;以下是其演讲的主要内容&#xff1a; 对自动驾驶行业的看法 自动驾驶的难度与挑战&#xff1a;苏箐表示自动驾驶非常难&#xff0c;他做自…...

QILSTE H11-D212HRTCG/5M高亮红绿双色LED灯珠 发光二极管LED

型号&#xff1a;H11-D212HRTCG/5M&#xff0c;一款由QILSTE&#xff08;HongKong&#xff09;Technology Co., Ltd精心打造的高亮度红绿双色LED产品&#xff0c;其尺寸仅为2.01.251.1 mm&#xff0c;却蕴含着强大的光电特性。这款产品采用透明平面胶体封装&#xff0c;不仅外观…...

2️⃣java基础进阶——多线程、并发与线程池的基本使用

一、概念介绍 什么是线程&#xff0c;什么是进程&#xff0c;两者有什么关系&#xff1f; 进程是操作系统资源分配的独立单位&#xff1b;而线程是操作系统能够进行调度和分派的最小单位&#xff1b;线程包含于进程之中&#xff0c;是进程中的实际运作单位。 例如&#xff1a…...

RAG多路召回

什么是多路召回&#xff1f; 多路召回&#xff08;Multi-Route Retrieval&#xff09; 是指在信息检索系统中&#xff0c;为了提升检索的全面性和准确性&#xff0c;通过多条不同的检索路径或不同的检索策略来获取信息的技术。多路召回的核心思想是&#xff0c;单一的检索路径…...

复杂 C++ 项目堆栈保留以及 eBPF 性能分析

在构建和维护复杂的 C 项目时&#xff0c;性能优化和内存管理是至关重要的。当我们面对性能瓶颈或内存泄露时&#xff0c;可以使用eBPF&#xff08;Extended Berkeley Packet Filter&#xff09;和 BCC&#xff08;BPF Compiler Collection&#xff09;工具来分析。如我们在Red…...

网安——计算机网络基础

一、计算机网络概述 1、Internet网相关概念及发展 网络&#xff08;Network&#xff09;有若干结点&#xff08;Node&#xff09;和连接这些结点的链路&#xff08;link&#xff09;所组成&#xff0c;在网络中的结点可以是计算机、集线器、交换机或路由器等多个网络还可以通…...

ZCC1923替代BOS1921Piezo Haptic Driver with Digital Front End

FEATURES • High-Voltage Low Power Piezo Driver o Drive 100nF at 190VPP and 250Hz with 490mW o Drives Capacitive Loads up to 1000nF o Energy Recovery o Differential Output o Small Solution Footprint, QFN & WLCSP • Low Quiescent Current: SHUTDOWN; …...

Kutools for Excel 简体中文版 - 官方正版授权

Kutools for Excel 是一款超棒的 Excel 插件&#xff0c;就像给你的 Excel 加了个超能助手。它有 300 多种实用功能&#xff0c;现在还有 AI 帮忙&#xff0c;能把复杂的任务变简单&#xff0c;重复的事儿也能自动搞定&#xff0c;不管是新手还是老手都能用得顺手。有了它&…...

PostgreSQL和MySQL有什么区别?

一、数据存储与管理方面 数据类型支持 PostgreSQL&#xff1a; 提供了非常丰富的数据类型。除了基本的整数、浮点数、字符、日期等类型外&#xff0c;对复杂数据类型的支持很出色。例如&#xff0c;它原生支持数组&#xff08;Array&#xff09;类型&#xff0c;可以方便地存储…...

比较之舞,优雅演绎排序算法的智美篇章

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文一、冒泡排序&#xff1a;数据海…...

C语言数据结构与算法(排序)详细版

大家好&#xff0c;欢迎来到“干货”小仓库&#xff01;&#xff01; 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;无人扶我青云志&#xff0c;我自踏雪至山巅&#xff01;&#xff01;&am…...

JAVA:利用 RabbitMQ 死信队列实现支付超时场景的技术指南

1、简述 在支付系统中&#xff0c;订单支付的超时自动撤销是一个非常常见的业务场景。通常用户未在规定时间内完成支付&#xff0c;系统会自动取消订单&#xff0c;释放相应的资源。本文将通过利用 RabbitMQ 的 死信队列&#xff08;Dead Letter Queue, DLQ&#xff09;来实现…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...