当前位置: 首页 > 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;来实现…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...