基于51单片机交通灯仿真_紧急开关+黄灯倒计时+可调时间(proteus+代码+报告+讲解视频)

基于51单片机交通灯_紧急开关+黄灯倒计时+可调时间

    • ☑️开题报告
    • ☑️仿真图(提供源文件):
    • ☑️系统硬件设计
      • ☑️主控制器选择
      • ☑️系统硬件结构图
      • ☑️时钟及复位电路
      • ☑️指示灯及倒计时模块
    • ☑️倒计时模块:
    • ☑️程序
      • ☑️软件主流程框架
      • ☑️main函数
    • ☑️设计报告
    • ☑️资料清单
      • ☑️[资料下载链接](https://docs.qq.com/doc/DS2xRZHZGelhVaXJR)

基于51单片机交通灯_紧急开关+黄灯倒计时+可调时间

仿真图proteus 7.8

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:J000

功能说明:

采用51单片机以及单片机最小系统和三极管驱动电路以及外围的按键和数码管显示等部件,设计一个基于单片机的交通灯设计。

1.四路交通灯,带有红绿灯倒计时,绿灯倒计时结束后转黄灯5秒,再转红灯。

2.紧急情况下按键紧急按钮,四路黄灯快闪。

3.可以动态设置红绿灯时间。

涉及知识点:按键扫描,定时器,数码管驱动。

☑️开题报告

内容要求:

一、 任务

近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。

十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本系统采用STC89C52单片机以及单片机最小系统和三极管驱动电路以及外围的按键和数码管显示等部件,设计一个基于单片机的交通灯设计。设计通过两位一体共阴极数码管显示,并能通过按键对定时进行设置。本系统实用性强、操作简单、扩展功能强。设计通过STC89C52单片机以及单片机最小系统和三极管驱动数码管(数码管更亮,白天看的很清楚)以及外围的按键和数码管显示等部件,数码管倒计时显示时间。

image-20220827223845964

☑️仿真图(提供源文件):

image-20220903202521141

image-20220903202531050

☑️系统硬件设计

根据上面的功能要求,硬件系统主要有单片机模块、指示灯模块和倒计时显示模块。各模块选择如下

☑️主控制器选择

单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。本文的单片机特指51单片机,具体芯片型号是STC89C52RC。需注意STC89C51,STC89C52,AT89C51,AT89C52都是51单片机的一种具体芯片型号。

AT89C51是AT89C5X系列单片机的典型产品,它采用ATMEL的高密非易失存储技术制造并和工业标准MCS—51指令集和引脚结构兼容。通过在单块芯片上组合通用的CPL1和快闪存储器,ATMEL公司生产的AT89C52是一强劲的微型计算机,它对许多嵌入式控制的应用,提供了一种高度灵活和成本低的解决办法。芯片AT89C52是ATMEL公司生产的带2K字节快闪存储器的8位单片机。

​ 该单片机还具有体积小,价格低等特点。AT89C51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。

☑️系统硬件结构图

中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。

AT89C51内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。

AT89C51共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。 AT89C51有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。

AT89C51共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。 AT89C51内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。

AT89C51具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。

☑️时钟及复位电路

AT89C51内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但AT89C51单片机需外置振荡电容。

本设计中,使单片机运行在最小系统。

时钟电路由两个20nF的微调电容和一个晶振组成。AT89C51内部有一个用于构成振荡器的高增益反相放大器,它的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚接石英晶体振荡器和微调电容,构成一个稳定的自激振荡器。本系统采用12Hz的振荡器,机器周期为1us。复位操作有上电自动复位、按键电平复位和外部脉冲复位三种方式。

☑️指示灯及倒计时模块

(1)指示灯模块:

设计电路中每个路口的控制信号灯应有三个,即红灯、黄灯、绿灯各一个。因此,本电路的设计中应用到红灯、黄灯、绿灯个四个。同一方向的两个路口的同一颜色指示灯是同时亮灭,为简化电路,可让这两个灯接同一引脚。这样可用P1口控制所有的指示灯。

按照设计,指示灯采用红/绿/黄三种发光二极管。该组件及其与单片机引脚的接法如下:

☑️倒计时模块:

利用两个74HC573锁存器驱动四个两位数码管,因为南北方向和东北方向的倒计时时间是一样的,所以倒计时实际上只有两个显示。

img

☑️程序

image-20220903202729067

☑️软件主流程框架

image-20220828100640968

​ 开机上电便处于正常运行状态,南北方向通行30秒后变为东西方向通行30秒,如此60秒循环一次,使得东西方向和南北方向交替通行。

​ 显示系统则显示到下一次改变通行方向所剩的时间,利于司机调整车辆状况。每到通行方向转换时,正在通行的方向绿灯熄灭,变为黄灯闪烁,提醒司机注意通行方向的改变,避免不必要的危险。

​ 本设计支持动态修改东西南北方向的红绿灯时间。短按设置/退出设计进入修改模式。先修改南北方向绿灯时间,再短按修改东西方向红灯时间,按第四个按键保存设置的时间。

​ 紧急情况下,可以通过按键设置四方向黄灯。

​ 延时方法可以有两种,一种是利用MCS-51内部定时器才生溢出中断来确定1秒的时间,另一种是采用软延时的方法。本程序的倒计时采用软件延时。

☑️main函数

以下是主函数

#define _MAIN_C
#include "use.h"
#include "main.h"
#include "time.h"
#include "key.h"
bit flag1s;	 
uchar count1s,NS_time,WE_time;
uchar GreenTime=30,RedTime=35;//绿灯时间和红灯时间,红灯要比绿灯时间长
uchar index=0;
enum eStaSysterm StaSysterm=NormalRun;void main()
{EA=1;						  		//开总中断InintTimer0();				  		//初始化定时器0while(1){	LEDScan();				  		//数码管即LED扫描KeyDriver();			  		//键盘驱动扫描if(flag1s){flag1s=0;NS_time--;			  		//红绿灯倒计时时间减WE_time--;}	}
}
void InintTimer0()
{TMOD=0X01;TH0=0X4C;TL0=0X00;ET0=1;TR0=1;
}
void Timer0() interrupt 1
{TH0=0XBB;TL0=0X00;KeyScan();if(++count1s<50)	return;count1s=0;if(StaSysterm==NormalRun) flag1s=1;	 //非正常运行时,不红绿灯数值不减一	
}
void LEDScan()
{if(StaSysterm==NormalRun)			 //正常运行{if(NS_time==0 || WE_time==0)//当东西或者南北方向通行时间倒数到0,切换状态{switch(index)				 //改变红绿灯的状态,状态机{case 0:{index=1;NS_time=GreenTime;//南北方向绿灯通行时间WE_time=RedTime;//东西绿灯方向通行时间P2=0X09;	//需要亮的灯转换为二进制位0000 1001,对应P2口的P2^0和P2^3,//对应仿真图的绿灯L0和红灯L3亮。}break;case 1:{index=2;NS_time=RedTime-GreenTime;P2=0X0A;	}break;case 2:{index=3;NS_time=RedTime;WE_time=GreenTime;P2=0X24;	}break;case 3:{index=0;WE_time=RedTime-GreenTime;P2=0X14;	}break;default:break;}}Seg_Display(NS_time/10,0);Seg_Display(NS_time%10,1);Seg_Display(WE_time/10,2);Seg_Display(WE_time%10,3);}else if(StaSysterm==UrgentRun){								   //紧急情况运行P2=0x12;Delayms(200);P2=0x00;Delayms(200);}else							   //设置调整红绿灯时间{index=0;NS_time=0;WE_time=0;	 //重新初始化红绿灯并运行UrgentScan();}
}

☑️设计报告

image-20220903202739452

☑️资料清单

image-20220903202745825

☑️资料下载链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/155146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python实现自动登录+获取数据

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 Dy这个东西想必大家都用过&#xff0c;而且还经常刷&#xff0c;今天就来用代码&#xff0c;获取它的视频数据 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 环境使用 Python 3.8 Pycharm 模块使用 request…

DrugMAP: molecular atlas and pharma-information of all drugs学习

DrugMAP&#xff1a;所有药物的分子图谱和制药信息 - PMC (nih.gov) DrugMAP: the molecular atlas and pharma-information of drugs (idrblab.net) 构建了一个描述药物分子图谱和药物信息的新数据库&#xff08;DrugMAP&#xff09;。它提供了>30 000种药物/候选药物的相…

数字化转型导师坚鹏:数字化时代银行网点厅堂营销5大难点分析

数字化时代银行网点厅堂营销存在以下5大难点&#xff1a; 1、识别难。识别有效的客户比较难&#xff0c;传统的厅堂识别主要依据客户的衣着气质等主管感受&#xff0c;判断客户是否为潜在中高端客户&#xff0c;提供相关服务。大堂经理主管识别与智能化系统识别相结合&#xf…

C++单调向量算法:132 模式解法三枚举1

本题不同解法 包括题目及代码C二分查找算法&#xff1a;132 模式解法一枚举3C二分查找算法&#xff1a;132 模式解法二枚举2代码最简洁C二分查找算法&#xff1a;132 模式解法三枚举1性能最佳C单调向量算法&#xff1a;132 模式解法三枚举1 分析 时间复杂度 2轮循环时间复杂…

如何选择适合的开源框架来构建微服务架构?

随着科技的飞速发展&#xff0c;云计算和大规模应用的需求日益显著&#xff0c;这促使微服务架构在软件开发领域中占据了主流地位。微服务架构的广泛应用为开发人员提供了灵活性、可伸缩性和高可用性&#xff0c;从而推动了快速的应用程序开发。然而&#xff0c;在构建微服务架…

JDBC快速入门

JDBC快速入门 PS&#xff1a;上传图片有点问题&#xff0c;我整理成了PDF格式&#xff0c;方便看图文。 今日目标 掌握JDBC的的CRUD理解JDBC中各个对象的作用掌握Druid的使用 1&#xff0c;JDBC概述 在开发中我们使用的是java语言&#xff0c;那么势必要通过java语言操作数据库…

模拟电路总结

一、半导体器件 1.1 半导体的特性 导电性能介于导体和绝缘体之间。如&#xff1a;硅&#xff08;Si&#xff09;、锗&#xff08;Ge&#xff09; 1.1.1 本征半导体 纯净的、不含杂质的半导体 温度敏感&#xff1a;T0K时&#xff0c;绝缘&#xff1b;温度升高时&#xff0c;载流…

Thinkphp-商城项目之oss文件上传及web端直传

4.3头像上传 一般商城网站都会把文件上传到第三方云&#xff0c;例如阿里云(oss)&#xff0c;腾讯云(cos)&#xff0c;当然如果公司有足够的实力&#xff0c;可以自己部署一台文件服务器&#xff0c;用于文件的保存。 头像上传一般是用户在用户中心上传的&#xff0c;后台管理…

软件需求的三大层次,逐层细化的注意事项

需求逐层分解和转化是一个持续优化的过程&#xff0c;在这个过程中&#xff0c;我们需要明确软件需求的三大层次&#xff0c;从而帮助项目团队理解组织或客户的高层目标和期望&#xff0c;满足用户的期望和需求&#xff0c;有助于产品的系统设计和开发。 一、软件需求三大层次 …

坑惨啦!!!——符号冲突案例分析

背景 前段时间在北汽项目中&#xff0c;遇到了一个奇怪现象&#xff1a;程序启动之后&#xff0c;偶现运行一段时间后&#xff0c;crash&#xff0c;复现频率较高。困扰了大家较长时间。最终在和同事的不懈努力下&#xff0c;找到的根因&#xff0c;并找到了解决方法。过程中也…

影视行业如何远程完整快速传输大文件?

影视行业是一个充满创意和协作的领域。在影视制作中&#xff0c;涉及到多个环节和部门&#xff0c;包括编剧、导演、摄影、剪辑、配音、视效等。这些环节和部门通常分布在不同的地点&#xff0c;甚至不同的国家。因此&#xff0c;影视制作过程中需要频繁进行远程传输&#xff0…

科技赋能,创新发展!英码科技受邀参加2023中国创新创业成果交易会

11月17日至19日&#xff0c;2023中国创新创业成果交易会&#xff08;简称&#xff1a;创交会&#xff09;在广州市广交会展馆圆满举行。英码科技受邀参加本届创交会&#xff0c;并在会场展示了创新性的AIoT产品、深元AI引擎和行业热门解决方案。 据介绍&#xff0c;本届创交会由…

vscode编写verilog的插件【对齐、自动生成testbench文件】

vscode编写verilog的插件&#xff1a; 插件名称&#xff1a;verilog_testbench,用于自动生成激励文件 安装教程&#xff1a;基于VS Code的Testbench文件自动生成方法——基于VS Code的Verilog编写环境搭建SP_哔哩哔哩_bilibili 优化的方法&#xff1a;https://blog.csdn.net…

CMake 判断操作系统类型

上回的CMakeLists.txt里面有一句,if (WIN32)......endif(WIN32); 根据资料,这是判断操作系统是否是Windows; 下面单独看一下; 一个CMakeLists.txt文件如下; if(WIN32)# 如果是 Windowsmessage("当前操作系统为 Windows") elseif(UNIX AND NOT APPLE)# 如果…

Go 语言学习:了解 const 关键字及常量声明

如果一个变量应该有一个固定的、不能改变的值&#xff0c;你可以使用const关键字。 const关键字将变量声明为"常量"&#xff0c;这意味着它是不可改变和只读的。 语法 const CONSTNAME type value 声明常量 声明常量的示例&#xff1a; package main import (…

【MATLAB基础绘图第17棒】绘制玫瑰图

MATLAB绘制玫瑰图 玫瑰图&#xff08;Nightingale Rose Chart&#xff09;风玫瑰图&#xff08;WindRose&#xff09;准备工作&#xff1a;WindRose工具包下载案例案例1&#xff1a;基础绘图 参考 玫瑰图&#xff08;Nightingale Rose Chart&#xff09; 玫瑰图&#xff08;Ni…

Java_异常详解

前言 异常是什么,异常如何抛出,如何抛出自定义异常,异常处理主要的五个关键字&#xff1a;throw,try,catch,finally,throws ,异常的处理流程 异常是什么 在Java中&#xff0c;将程序执行过程中发生的不正常行为称为异常。比如之前写代码时经常遇到的&#xff1a; 1. 算数异…

app小程序定制开发的优势|企业软件网站建设

app小程序定制开发的优势|企业软件网站建设 小程序定制开发是目前互联网行业中备受关注的领域之一。随着智能手机的普及和移动互联网的迅猛发展&#xff0c;越来越多的企业和个人开始重视小程序的潜力&#xff0c;并积极寻求定制开发的服务。那么&#xff0c;为什么小程序定制开…

php字符串处理函数的使用

php字符串处理函数的使用 trim() trim()函数的功能用于去除字符串首尾的空白字符(包括空格、制表符、换行符等&#xff09;。它可以用于清理用户输入的数据或去除字符串中的多余空格。 <?php $char" holle world! ";echo trim($char) ?>str_repl…

【LeetCode】104. 二叉树的最大深度

104. 二叉树的最大深度 难度&#xff1a;简单 题目 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 …