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

news2025/1/21 18:47:34

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

    • 开题报告
    • 系统硬件设计
      • 主控制器选择
      • 系统硬件结构图
      • 时钟及复位电路
      • 指示灯及倒计时模块
    • 倒计时模块:
    • 程序
      • 软件主流程框架
      • main函数
    • 设计报告
    • 资料清单
      • 资料下载链接

基于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();				  		//初始化定时器0
	while(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.coloradmin.cn/o/1279913.html

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

相关文章

大学程序员的养生之道

呀哈喽&#xff0c;我是结衣。 今天给大家带来的是大学程序员的养生之道&#xff01; 作为一名大学生还没有深刻的感受到未来的恐怖&#xff0c;但每当我看到这些对程序员的评价还是不禁感慨。 不要让自己的学习之路变成这样啊&#xff01;程序员的职业发展&#xff1a;某编程语…

[数据结构]HashSet与LinkedHashSet的底层原理学习心得

我们区分list和set集合的标准是三个&#xff1a;有无顺序&#xff0c;可否重复&#xff0c;有无索引。 list的答案是&#xff1a;有顺序&#xff0c;可重复&#xff0c;有索引。这也就是ArrayList和LinkedList的共性 set的答案是&#xff1a;顺序内部再区分,不可以重复&#xf…

SpringBootAdmin监控原理Actuator,自定义指标

SpringBootAdmin监控原理Actuator&#xff0c;自定义指标 文章目录 SpringBootAdmin监控原理Actuator&#xff0c;自定义指标actuator自定义info端点信息自定义Health端点信息自定义metrics端点信息端点的自定义 actuator JMX方式就是在cmd控制台输入jconsole&#xff0c;会弹出…

无代码集成航天信息:优化电商平台用户运营,提高CRM和广告推广的效能

无代码开发的集成优势 在数字化竞争愈发激烈的商业市场中&#xff0c;企业对于提高效率和优化用户运营的需求不断增长。无代码开发的集成解决方案&#xff0c;如航天信息电子发票&#xff0c;为企业提供了无需深入编程知识即可快速实现的系统对接能力。这种集成方式简化了技术…

shell编程系列(10)-使用paste拼接列

使用paste拼接列 前言使用paste拼接列拼接两个文件 结语 前言 在前面的文章中讲解了使用cut命令选择列&#xff0c;这篇文章我们介绍使用paste命令拼接列&#xff0c;其实这个命令的使用场景很有限&#xff0c;做科研的同学可能才会用到&#xff0c;但是却非常好用&#xff0c…

STM32---MDK工程创建

本节我们带领大家学习如何新建一个寄存器库版本MDK的详细步骤&#xff1b; 由于51单片机的学习时&#xff0c;所涉及的寄存器很少&#xff0c;所以往往几个头文件、驱动文件就可以完成相关的功能&#xff0c;但是对于STM32来讲&#xff0c;涉及的寄存器、头文件等都很多&#…

洛谷 P1998 阶乘之和 C++代码

前言 今天我们来做洛谷上的一道题目。 网址&#xff1a;[NOIP1998 普及组] 阶乘之和 - 洛谷 西江月夜行黄沙道中 【宋】 辛弃疾 明月别枝惊鹊&#xff0c;清风半夜鸣蝉。稻花香里说丰年&#xff0c;听取WA声一片。 七八个星天外&#xff0c;两三点雨山前。旧时茅店社林边&…

压缩docker在主机的虚拟磁盘容量

我们在windows里使用docker时会发现&#xff0c;即使我们已经删除了无用的镜像和容器&#xff0c;主机里挂在docker虚拟磁盘的那个盘&#xff0c;可用空间也没有增加&#xff0c;这是因为虚拟磁盘不会自动缩小&#xff0c;这里我分享一个可用的解决方案。 1.先通过docker回收空…

【Leetcode题单】(01 数组篇)刷题关键点总结01【数组的遍历】

【Leetcode题单】&#xff08;01 数组篇&#xff09;刷题关键点总结01【数组的遍历】&#xff08;4题&#xff09; Easy数组的遍历485. 最大连续 1 的个数 Easy495. 提莫攻击 Easy414. 第三大的数 Easy628. 三个数的最大乘积 Easy 大家好&#xff0c;这里是新开的LeetCode刷题系…

[力扣题]1.判断一棵树是否是平衡二叉树

1.判断一棵树是否是平衡二叉树 1.1 题目描述 给你一棵二叉树的根节点 root &#xff0c;请你判断这棵树是否是一棵 完全二叉树 。 在一棵 完全二叉树 中&#xff0c;除了最后一层外&#xff0c;所有层都被完全填满&#xff0c;并且最后一层中的所有节点都尽可能靠左。最后一层…

【物联网无线通信技术】ZigBee从理论到实践(CC2530)

文章延续之前【物联网无线通信技术】系列文章的风格&#xff0c;首先对ZigBee这种在物联网发展初期出现的无线通信技术进行了相关背景概念的介绍&#xff0c;并横向介绍了几款时间跨度比较大的ZigBee芯片。然后以CC2530为例&#xff0c;从硬件到软件介绍了ZigBee这中无线通信技…

C++跨目录include问题

不同文件夹下使用预处理器指示符#include 使用举例 假设我们有如下一个工程&#xff0c;其中包含了几个源代码和头文件&#xff0c;其中main.cpp是主源代码文件&#xff0c;里面含有main函数&#xff1a; 在foldder main中包含&#xff1a;func4.hpp&#xff0c;func4.cpp&am…

C语言结构体详解(二)(能看懂文字就能明白系列)文章很长,慢慢品尝

系列文章目录 第一章 结构体的介绍和基本使用 &#x1f31f; 个人主页&#xff1a;古德猫宁- &#x1f308; 信念如阳光&#xff0c;照亮前行的每一步 文章目录 系列文章目录&#x1f308; *信念如阳光&#xff0c;照亮前行的每一步* 前言前面一篇文章主要介绍了结构体的基础…

Java 使用对应arthas 调试程序

1、作用 使用 arthas 可以进行如下操作 ① 抓取对应函数的耗时结构&#xff0c;然后分析对应的代码优化代码 ② 抓取对应函数的 入参、出参函数 ③ 重放对应的函数执行 ④ 查询对应程序占用结构&#xff0c;比如 cpu, jvm ⑤ 查询对应的 执行最频繁的 线程 ⑥ 打印函数…

震惊!我和GPT玩了一天游戏·····

最近开始研究如何基于GPT构建一个游戏引擎&#xff0c;于是先从简单的文字游戏开始探索。 从最简单的选择机制、故事机制&#xff0c;完善成一个包括天气、事件、技能、属性、伙伴、建造系统的-生化危机版文字游戏-。 我唯一的体验是&#xff1a;AI游戏&#xff0c;大有可为! …

C++11--右值引用

目录 基本概念 左值和右值 左值引用和右值引用 右值引用使用场景和意义 左值引用使用场景 左值引用的短板 右值引用和移动语义 右值引用引用左值 右值引用的其他使用场景 完美转发 万能引用 完美转发保持值得属性 完美转发使用得场景 基本概念 左值和右值 什么…

二叉树链式结构的实现和二叉树的遍历以及判断完全二叉树

二叉树的实现 定义结构体 我们首先定义一个结构来存放二叉树的节点 结构体里分别存放左子节点和右子节点以及节点存放的数据 typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right; }BTNode;…

solidity实现ERC20代币标准

文章目录 IERC20ERC20Remix 编译部署 IERC20 IERC20 是 ERC20 标准的接口规范&#xff0c;它定义和规范了一个标准 ERC20 代币合约应该实现的功能。这里让 ERC20 合约直接继承自 IERC20 接口。 // SPDX-License-Identifier: MIT pragma solidity ^0.8.4;interface IERC20 { // …

2023软件测试大赛总结

2023软件测试大赛总结 文章目录 2023软件测试大赛总结软件下载方式比赛方式个人总结断言使用java基础 预选赛省赛国赛 软件下载方式 进入官网下载插件&#xff08;直接下载一个完整的Eclipse就可以,这样比较方便&#xff09; 需要保证jdk版本和要求的一致&#xff0c;不然可能…

【Spring Boot 源码学习】ApplicationContextInitializer 详解

Spring Boot 源码学习系列 ApplicationContextInitializer 详解 引言往期内容主要内容1. 初识 ApplicationContextInitializer2. 加载 ApplicationContextInitializer3. ApplicationContextInitializer 的初始化 总结 引言 书接前文《初识 SpringApplication》&#xff0c;我们…