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

基于51单片机的交通灯_可调时间_夜间+紧急模式

51单片机交通灯

  • 1 讲解视频:
  • 2 功能要求
  • 3 仿真图:
  • 4 原理图+PCB
  • 5 实物图
  • 6 程序设计:
  • 7 设计报告
  • 8 资料清单(提供资料清单所有文件):
    • 设计资料下载链接:

51单片机简易交通灯_可调时间_夜间+紧急

仿真+代码+原理图PCB+报告+讲解

仿真图proteus 7.8以上

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:J030

1 讲解视频:

包含仿真讲解和实物演示

基于51单片机的交通灯proteus实物设计

2 功能要求

基于51单片机的交通灯设计

本设计基于AT89C51/52(与AT89S51/52、STC89C51/52通用,可替换其他51内核)单片机

1.正常模式工作状态:

状态1:东西方向绿灯通行20秒,南北方向禁止通行25秒;

状态2:东西方向黄灯闪烁提醒5秒,南北继续红灯倒计时;

状态3:南北方向绿灯通行30秒,东西红灯禁止通行35秒,分别通过数码管倒计时;

状态4:南北方向黄灯闪烁提醒5秒,东西继续红灯倒计时;

状态5:执行状态1,反复循环。

\2. 紧急模式

南北方向和东西方向红灯常亮禁止通行。数码管显示00。

\3. 夜间模式

南北方向和东西方向黄灯闪烁。

\4. 可以通过按键调东西/南北方向绿灯时间。切换键切换方向,加减键调整时间。

3 仿真图:

正常倒计时

imgimg

夜间黄灯闪烁

4 原理图+PCB

img

img

img

img

5 实物图

img

6 程序设计:

img
代码

#include <reg51.h>				//头文件
#define uchar unsigned char
#define uint  unsigned int		//宏定义uchar data buf[4];					//秒显示的变量
uchar data sec_dx=20;  			//东西数默认
uchar data sec_nb=30;			//南北默认值
uchar data set_timedx=20;		//设置东西方向的时间
uchar data set_timenb=30;		//设置南北方向的时间
int n;
uchar data countt0,countt1;//定时器0中断次数
//定义6组开关
sbit  k4=P3^7;      //切换方向
sbit  k1=P3^5;		//时间加
sbit  k2=P3^6;		//时间减
sbit  k3=P3^4;		//确认
sbit  k5=P3^1;		//禁止
sbit  k6=P1^5;		//夜间模式
部分代码,不完整,完全代码在压缩包main函数
//https://docs.qq.com/doc/DS3Zab1lNU0d2QVZtsbit Red_nb=P2^6;		//南北红灯标志
sbit Yellow_nb=P2^5;	//南北黄灯标志
sbit Green_nb=P2^4;     //南北绿灯标志sbit Red_dx=P2^3;		//东西红灯标志
sbit Yellow_dx=P2^2;	//东西黄灯标志
sbit Green_dx=P2^1;		//东西绿灯标志bit set=0;				//调时方向切换键标志 =1时,南北,=0时,东西
bit dx_nb=0;			//东西南北控制位
bit shansuo=0;			//闪烁标志位
bit yejian=0;			//夜间黄灯闪烁标志位uchar code table[11]={	//共阴极字型码0x3f,  //--00x06,  //--10x5b,  //--20x4f,  //--30x66,  //--40x6d,  //--50x7d,  //--60x07,  //--70x7f,  //--80x6f,  //--90x00   //--NULL
};//函数的声明部分
void delay(int ms);			//延时子程序
void key();					//按键扫描子程序
void display();				//显示子程序
void logo();   				//开机LOGO
//主程序
void main()
{TMOD=0X11;	   				//定时器设置TH1=0X3C;		TL1=0XB0;TH0=0X3C;					//定时器0置初值 0.05STL0=0XB0;EA=1;						//开总中断ET0=1;						//定时器0中断开启ET1=1;					   //定时器1中断开启TR0=1;						//启动定时0TR1=0;						 	//关闭定时1logo();						//开机初始化P2=0Xc3;					// 开始默认状态,东西绿灯,南北黄灯   sec_nb=sec_dx+5; 			//默认南北通行时间比东西多5秒while(1)					  //主循环{	 key(); 					//调用按键扫描程序display(); 				//调用显示程序}	
}
//函数的定义部分
void key(void)	//按键扫描子程序
{	 if(k1!=1)							//当K1(时间加)按下时{display();       				//调用显示,用于延时消抖if(k1!=1)							//如果确定按下{TR0=0;	       				//关定时器	shansuo=0;					//闪烁标志位关P2=0x00;					//灭显示TR1=0;							//启动定时1if(set==0){//设置键按下set_timedx++;   		//南北加1S}else{set_timenb++;    		//东西加1S}if(set){Red_nb=1;		//南北红灯标志Yellow_nb=1;	//南北黄灯标志Green_nb=1;     //南北绿灯标志}else{Red_dx=1;		//东西红灯标志Yellow_dx=1;	//东西黄灯标志Green_dx=1;     //东西绿灯标志}if(set_timenb==100)set_timenb=1;if(	set_timedx==100)set_timedx=1;   		//加到100置1sec_nb=set_timenb ; 		//设置的数值赋给东西南北sec_dx=set_timedx;			do{ display();				 //调用显示,用于延时}while(k1!=1);			 //等待按键释放}}if(k2!=1)							//当K2(时间减)按键按下时{		display();       				//调用显示,用于延时消抖  if(k2!=1)						//如果确定按下{	TR0=0;         				//关定时器0	shansuo=0;					//闪烁标志位关P2=0x00;					//灭显示TR1=0;						//关定时器1	if(set==0){//设置键按下set_timedx--;   		//南北减1S}else{set_timenb--;    		//东西减1S}if(set){Red_nb=1;		//南北红灯标志Yellow_nb=1;	//南北黄灯标志Green_nb=1;     //南北绿灯标志}else{Red_dx=1;		//东西红灯标志Yellow_dx=1;	//东西黄灯标志Green_dx=1;     //东西绿灯标志}if(set_timenb==0)set_timenb=99;	if(	set_timedx==0 )set_timedx=99;   		//减到1重置99sec_nb=set_timenb ;	 		//设置的数值赋给东西南北sec_dx=set_timedx;do	{ display();       		//调用显示,用于延时}while(k2!=1);			   //等待按键释放}}if(k3!=1)							//当K3(确认)键按下时{	display();       				//调用显示,用于延时消抖if(k3!=1)						//如果确定按下{TR0=1;  						//启动定时器0sec_nb=set_timenb;				//从中断回复,仍显示设置过的数值sec_dx=set_timedx;				//显示设置过的时间TR1=0;							//关定时器1	if(set==0)						//时间倒时到0时{ P2=0X00;					 //灭显示Green_dx=1;						//东西绿灯亮Red_nb=1;					//南北红灯亮sec_nb=sec_dx+5; 			//回到初值}else { P2=0x00;					//南北绿灯,东西红灯Green_nb=1;Red_dx=1;sec_dx=sec_nb+5; }}}if(k4!=1)							//当K4(切换)键按下{display();       				//调用显示,用于延时消抖if(k4!=1)						//如果确定按下{ P2=0X00;					 //灭显示TR0=0;						//关定时器0	set=!set;					//取反set标志位,以切换调节方向TR1=0;						//关定时器1dx_nb=set;if(set){Red_nb=1;		//南北红灯标志Yellow_nb=1;	//南北黄灯标志Green_nb=1;     //南北绿灯标志}else{Red_dx=1;		//东西红灯标志Yellow_dx=1;	//东西黄灯标志Green_dx=1;     //东西绿灯标志}do{display(); 			   //调用显示,用于延时}				while(k4!=1);			  //等待按键释放}}	if(k5!=1)							//当K5(禁止)键按下时{display();       				//调用显示,用于延时消抖if(k5!=1)						//如果确定按下{ 	TR0=0;						//关定时器P2=0x00;					//灭显示Red_dx=1;Red_nb=1;					//全部置红灯TR1=0;sec_dx=00;					//四个方向的时间都为00sec_nb=00;do{display(); 				//调用显示,用于延时}	while(k5!=1);			//等待按键释放	}}if(k6!=1)							//当K6(夜间模式)按下 {display();       				//调用显示,用于延时消抖 if(k6!=1)						//如果确定按下{ 	TR0=0;						//关定时器P2=0x00;TR1=1;sec_dx=00;					//四个方向的时间都为00sec_nb=00;do{display(); 			  //调用显示,用于延时}	while(k6!=1);			//等待按键释放	}}
}
void display(void) //显示子程序
{		buf[1]=sec_nb/10; 		//第1位 东西秒十位buf[2]=sec_nb%10; 		//第2位 东西秒个位buf[3]=sec_dx/10; 		//第3位 南北秒十位buf[0]=sec_dx%10; 		//第4位 南北秒个位		P1=0xff;          		// 初始灯为灭的P0=0x00;				 灭显示P1=0xfe;           		//片选LED1P0=table[buf[1]];		//送东西时间十位的数码管编码			delay(1);				//延时P1=0xff;				//关显示P0=0x00;				//灭显示P1=0xfd;             	//片选LED2P0=table[buf[2]];		 //送东西时间个位的数码管编码delay(1);				 //延时P1=0xff;				//关显示P0=0x00;				//关显示P1=0Xfb;		  		//片选LED3P0=table[buf[3]];		//送南北时间十位的数码管编码delay(1);				//延时P1=0xff;				 //关显示P0=0x00;				 //关显示P1=0Xf7;				 //片选LED4	P0=table[buf[0]];		//送南北时间个位的数码管编码delay(1);				//延时
}void time0(void) interrupt 1 using 1  	//定时中断子程序
{TH0=0X3C;							//重赋初值TL0=0XB0;							//12m晶振50ms//重赋初值TR0=1;								//重新启动定时器countt0++;							//软件计数加1if(countt0==10)						//加到10也就是半秒{if((sec_nb<=5)&&(dx_nb==0)&&(shansuo==1))  		//东西黄灯闪		{Green_dx=0;Yellow_dx=0;}		   				if((sec_dx<=5)&&(dx_nb==1)&&(shansuo==1))  		//南北黄灯闪		{  Green_nb=0;Yellow_nb=0;}	}if(countt0==20)	                  	// 定时器中断次数=20时(即1秒时){	countt0=0;						//清零计数器sec_dx--;						//东西时间减1sec_nb--;						//南北时间减1if((sec_nb<=5)&&(dx_nb==0)&&(shansuo==1))  		//东西黄灯闪		{Green_dx=0;Yellow_dx=1;}		   				if((sec_dx<=5)&&(dx_nb==1)&&(shansuo==1))  		//南北黄灯闪		{  Green_nb=0;Yellow_nb=1;}		 						if(sec_dx==0&&sec_nb==5) 		//当东西倒计时到0时,重置5秒,用于黄灯闪烁时间   {sec_dx=5;shansuo=1;}if(sec_nb==0&&sec_dx==5)		//当南北倒计时到0时,重置5秒,用于黄灯闪烁时间   {sec_nb=5;shansuo=1;}if(dx_nb==0&&sec_nb==0)			//当黄灯闪烁时间倒计时到0时,{P2=0x00;					//重置东西南背方向的红绿灯Green_nb=1;Red_dx=1;dx_nb=!dx_nb;shansuo=0;sec_nb=set_timenb;			//重赋南北方向的起始值sec_dx=set_timenb+5;		//重赋东西方向的起始值}		if(dx_nb==1&&sec_dx==0)			//当黄灯闪烁时间到{P2=0X00;					//重置东西南北的红绿灯状态Green_dx=1;					 //东西绿灯亮Red_nb=1;					 //南北红灯亮dx_nb=!dx_nb;				 //取反shansuo=0;					//闪烁sec_dx=set_timedx;			//重赋东西方向的起始值sec_nb=set_timedx+5;		//重赋南北方向的起始值}}	
}

系统硬件框图

img

7 设计报告

13017字设计报告,内容包括硬件设计、软件设计、软硬件框图、调试、结论等

img

8 资料清单(提供资料清单所有文件):

0、常见使用问题及解决方法–必读!!!!
10、讲解视频
1、仿真图
2、程序源码
3、功能要求
4、原理图和PCB
5、开题报告
6、元器件清单
7、设计报告
8、软硬件流程框图
9、实物图片和说明
Altium Designer 安装破解
KEIL+proteus 单片机仿真设计教程
KEIL安装破解
Proteus元器件查找
Proteus安装
Proteus简易使用教程
单片机学习资料
相关数据手册
答辩技巧
设计报告常用描述
鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url

img

设计资料下载链接:

相关文章:

基于51单片机的交通灯_可调时间_夜间+紧急模式

51单片机交通灯 1 讲解视频&#xff1a;2 功能要求3 仿真图&#xff1a;4 原理图PCB5 实物图6 程序设计&#xff1a;7 设计报告8 资料清单&#xff08;提供资料清单所有文件&#xff09;&#xff1a;设计资料下载链接&#xff1a; 51单片机简易交通灯_可调时间_夜间紧急 仿真代…...

网络通信原理,进制转化总结

来源&#xff0c;做个笔记&#xff0c;讲的还蛮清楚通信原理-2.5 数据封装与传输05_哔哩哔哩_bilibili ip地址范围...

西南科技大学(数据结构A)期末自测练习三

一、填空题&#xff08;每空1分&#xff0c;共10分&#xff09; 1、为解决计算机主机与打印机之间速度不匹配的问题&#xff0c;通常设置一个打印数据缓冲区。主机将要输出的数据依次写入缓冲区&#xff0c;打印机则依次从缓冲区中取出数据&#xff0c;则该换缓冲区的逻辑结构…...

【halcon】裁剪

前言 目前我遇到的裁剪相关的函数都是以clip打头的函数。一共4个&#xff1a; clip_end_points_contours_xldclip_contours_xldclip_regionclip_region_rel 前面两个是对轮廓的裁剪。 后面是对区域的裁剪。 裁剪轮廓的两端 clip_end_points_contours_xld 用于实现裁剪XLD…...

vue+less+style-resources-loader 配置全局颜色变量

全局统一样式后&#xff0c;可配置vue.config.js实现全局颜色变量&#xff0c;方便在编写时使用统一风格的色彩 一、新建global.less 二、下载安装style-resources-loader npm i style-resources-loader --save-dev三、在vue.config.js中进行配置 module.exports {pluginOpt…...

第二次量子化

专栏目录: 高质量文章导航-持续更新中 前置复盘: 玻色子和费米子: 首先,我们希望把描述单粒子态的量子力学推广到全同多粒子体系。我们的做法是从单粒子态的希尔伯特空间(Hilbert Space)出发,构造全同多粒子态的态空间——福克空间(Fock Space),它实际上就是无穷个…...

(三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言Q1&#xff1a;卷积网络和传统网络的区别Q2:卷积神经网络的架构Q3:卷积神经网络中的参数共享&#xff0c;也是比传统网络的优势所在4、 具体的实现代码网络搭建…...

【代码】多种调度模式下的光储电站经济性最优 储能容量配置分析matlab/yalmip

程序名称&#xff1a;多种调度模式下的光储电站经济性最优储能容量配置分析 实现平台&#xff1a;matlab-yalmip-cplex/gurobi 代码简介&#xff1a;代码主要做的是一个光储电站经济最优储能容量配置的问题&#xff0c;对光储电站中储能的容量进行优化&#xff0c;以实现经济…...

深度学习今年来经典模型优缺点总结,包括卷积、循环卷积、Transformer、LSTM、GANs等

文章目录 1、卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;CNN&#xff09;1.1 优点1.2 缺点1.3 应用场景1.4 网络图 2、循环神经网络&#xff08;Recurrent Neural Networks&#xff0c;RNNs&#xff09;2.1 优点2.2 缺点2.3 应用场景2.4 网络图 3、长短…...

ChatGPT成为“帮凶”:生成虚假数据集支持未知科学假设

ChatGPT 自发布以来&#xff0c;就成为了大家的好帮手&#xff0c;学生党和打工人更是每天都离不开。 然而这次好帮手 ChatGPT 却帮过头了&#xff0c;莫名奇妙的成为了“帮凶”&#xff0c;一位研究人员利用 ChatGPT 创建了虚假的数据集&#xff0c;用来支持未知的科学假设。…...

c#利用Forms.Timer定时检测Tcp连接状态

目的&#xff1a;本地创建客户端连接服务器端&#xff0c;如果连接正常显示连接正常如果连接异常显示连接异常。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.T…...

空间注意力:改变我们理解图像的方式

空间注意力&#xff1a;改变我们理解图像的方式 欢迎来到深度学习和计算机视觉的新时代&#xff0c;在这里&#xff0c;空间注意力机制正改变着我们理解和处理图像的方式。本文将深入探讨空间注意力的概念&#xff0c;它如何工作&#xff0c;以及为什么它在现代图像处理技术中…...

【模型报错记录】‘PromptForGeneration‘ object has no attribute ‘can_generate‘

通过这个连接中的方法解决&#xff1a; “PromptForGeneration”对象没有属性“can_generate” 期刊 #277 thunlp/OpenPrompt GitHub的 问题描述&#xff1a;在使用model.generate() 的时候报错&#xff1a;PromptForGeneration object has no attribute can_generate 解决方法…...

mysql学习记录

关系型数据库&#xff1a;不是把所有的数据全部存储在一起&#xff0c;而是分类存储在一起。 常见的数据库 关系型&#xff1a;oracle大型收费,mysql小型免费。 sql语言&#xff08;操作数据库&#xff09; structured query language 结构化查询语言 1.DDL 数据定义语言 创建数…...

Hdoop学习笔记(HDP)-Part.11 安装Kerberos

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …...

浅谈UML的概念和模型之UML九种图

1、用例图&#xff08;use case diagrams&#xff09; 【概念】描述用户需求&#xff0c;从用户的角度描述系统的功能 【描述方式】椭圆表示某个用例&#xff1b;人形符号表示角色 【目的】帮组开发团队以一种可视化的方式理解系统的功能需求 【用例图】 2、静态图 类图&…...

杨志丰:OceanBase助力企业应对数据库转型深水区挑战

11 月 16 日&#xff0c;OceanBase 在北京顺利举办 2023 年度发布会&#xff0c;正式宣布&#xff1a;将持续践行“一体化”产品战略&#xff0c;为关键业务负载打造一体化数据库。OceanBase 产品总经理杨志丰发表了《助力企业应对数据库转型深水区挑战》主题演讲。 以下为演讲…...

版本控制系统Git学习笔记-Git分支操作

文章目录 概述一、Git分支简介1.1 基本概念1.2 创建分支1.3 分支切换1.4 删除分支 二、新建和合并分支2.1 工作流程示意图2.2 新建分支2.3 合并分支2.4 分支示例2.4.1 当前除了主分支&#xff0c;再次创建了两个分支2.4.2 先合并test1分支2.4.3 合并testbranch分支 2.5 解决合并…...

分布式系统中最基础的 CAP 理论及其应用

对于开发或设计分布式系统的架构师、工程师来说&#xff0c;CAP 是必须要掌握的基础理论&#xff0c;CAP 理论可以帮助架构师对系统设计中目标进行取舍&#xff0c;合理地规划系统拆分的维度。下面我们先讲讲分布式系统的特点。 分布式系统的特点 随着移动互联网的快速发展&a…...

计算机视觉(OpenCV+TensorFlow)

计算机视觉&#xff08;OpenCVTensorFlow&#xff09; 文章目录 计算机视觉&#xff08;OpenCVTensorFlow&#xff09;前言3.图像金字塔3.1 高斯金字塔3.2 拉普拉斯金字塔 4.图像轮廓图像边缘和图像轮廓的区别检测图像绘制边缘 5.轮廓近似外接矩形外接圆 6. 模板匹配6.1 什么是…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...