基于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 仿真图:
正常倒计时



4 原理图+PCB




5 实物图

6 程序设计:

代码
#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; //重赋南北方向的起始值}}
}
系统硬件框图

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

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

设计资料下载链接:
相关文章:
基于51单片机的交通灯_可调时间_夜间+紧急模式
51单片机交通灯 1 讲解视频:2 功能要求3 仿真图:4 原理图PCB5 实物图6 程序设计:7 设计报告8 资料清单(提供资料清单所有文件):设计资料下载链接: 51单片机简易交通灯_可调时间_夜间紧急 仿真代…...
网络通信原理,进制转化总结
来源,做个笔记,讲的还蛮清楚通信原理-2.5 数据封装与传输05_哔哩哔哩_bilibili ip地址范围...
西南科技大学(数据结构A)期末自测练习三
一、填空题(每空1分,共10分) 1、为解决计算机主机与打印机之间速度不匹配的问题,通常设置一个打印数据缓冲区。主机将要输出的数据依次写入缓冲区,打印机则依次从缓冲区中取出数据,则该换缓冲区的逻辑结构…...
【halcon】裁剪
前言 目前我遇到的裁剪相关的函数都是以clip打头的函数。一共4个: clip_end_points_contours_xldclip_contours_xldclip_regionclip_region_rel 前面两个是对轮廓的裁剪。 后面是对区域的裁剪。 裁剪轮廓的两端 clip_end_points_contours_xld 用于实现裁剪XLD…...
vue+less+style-resources-loader 配置全局颜色变量
全局统一样式后,可配置vue.config.js实现全局颜色变量,方便在编写时使用统一风格的色彩 一、新建global.less 二、下载安装style-resources-loader npm i style-resources-loader --save-dev三、在vue.config.js中进行配置 module.exports {pluginOpt…...
第二次量子化
专栏目录: 高质量文章导航-持续更新中 前置复盘: 玻色子和费米子: 首先,我们希望把描述单粒子态的量子力学推广到全同多粒子体系。我们的做法是从单粒子态的希尔伯特空间(Hilbert Space)出发,构造全同多粒子态的态空间——福克空间(Fock Space),它实际上就是无穷个…...
(三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言Q1:卷积网络和传统网络的区别Q2:卷积神经网络的架构Q3:卷积神经网络中的参数共享,也是比传统网络的优势所在4、 具体的实现代码网络搭建…...
【代码】多种调度模式下的光储电站经济性最优 储能容量配置分析matlab/yalmip
程序名称:多种调度模式下的光储电站经济性最优储能容量配置分析 实现平台:matlab-yalmip-cplex/gurobi 代码简介:代码主要做的是一个光储电站经济最优储能容量配置的问题,对光储电站中储能的容量进行优化,以实现经济…...
深度学习今年来经典模型优缺点总结,包括卷积、循环卷积、Transformer、LSTM、GANs等
文章目录 1、卷积神经网络(Convolutional Neural Networks,CNN)1.1 优点1.2 缺点1.3 应用场景1.4 网络图 2、循环神经网络(Recurrent Neural Networks,RNNs)2.1 优点2.2 缺点2.3 应用场景2.4 网络图 3、长短…...
ChatGPT成为“帮凶”:生成虚假数据集支持未知科学假设
ChatGPT 自发布以来,就成为了大家的好帮手,学生党和打工人更是每天都离不开。 然而这次好帮手 ChatGPT 却帮过头了,莫名奇妙的成为了“帮凶”,一位研究人员利用 ChatGPT 创建了虚假的数据集,用来支持未知的科学假设。…...
c#利用Forms.Timer定时检测Tcp连接状态
目的:本地创建客户端连接服务器端,如果连接正常显示连接正常如果连接异常显示连接异常。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.T…...
空间注意力:改变我们理解图像的方式
空间注意力:改变我们理解图像的方式 欢迎来到深度学习和计算机视觉的新时代,在这里,空间注意力机制正改变着我们理解和处理图像的方式。本文将深入探讨空间注意力的概念,它如何工作,以及为什么它在现代图像处理技术中…...
【模型报错记录】‘PromptForGeneration‘ object has no attribute ‘can_generate‘
通过这个连接中的方法解决: “PromptForGeneration”对象没有属性“can_generate” 期刊 #277 thunlp/OpenPrompt GitHub的 问题描述:在使用model.generate() 的时候报错:PromptForGeneration object has no attribute can_generate 解决方法…...
mysql学习记录
关系型数据库:不是把所有的数据全部存储在一起,而是分类存储在一起。 常见的数据库 关系型:oracle大型收费,mysql小型免费。 sql语言(操作数据库) 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、用例图(use case diagrams) 【概念】描述用户需求,从用户的角度描述系统的功能 【描述方式】椭圆表示某个用例;人形符号表示角色 【目的】帮组开发团队以一种可视化的方式理解系统的功能需求 【用例图】 2、静态图 类图&…...
杨志丰:OceanBase助力企业应对数据库转型深水区挑战
11 月 16 日,OceanBase 在北京顺利举办 2023 年度发布会,正式宣布:将持续践行“一体化”产品战略,为关键业务负载打造一体化数据库。OceanBase 产品总经理杨志丰发表了《助力企业应对数据库转型深水区挑战》主题演讲。 以下为演讲…...
版本控制系统Git学习笔记-Git分支操作
文章目录 概述一、Git分支简介1.1 基本概念1.2 创建分支1.3 分支切换1.4 删除分支 二、新建和合并分支2.1 工作流程示意图2.2 新建分支2.3 合并分支2.4 分支示例2.4.1 当前除了主分支,再次创建了两个分支2.4.2 先合并test1分支2.4.3 合并testbranch分支 2.5 解决合并…...
分布式系统中最基础的 CAP 理论及其应用
对于开发或设计分布式系统的架构师、工程师来说,CAP 是必须要掌握的基础理论,CAP 理论可以帮助架构师对系统设计中目标进行取舍,合理地规划系统拆分的维度。下面我们先讲讲分布式系统的特点。 分布式系统的特点 随着移动互联网的快速发展&a…...
计算机视觉(OpenCV+TensorFlow)
计算机视觉(OpenCVTensorFlow) 文章目录 计算机视觉(OpenCVTensorFlow)前言3.图像金字塔3.1 高斯金字塔3.2 拉普拉斯金字塔 4.图像轮廓图像边缘和图像轮廓的区别检测图像绘制边缘 5.轮廓近似外接矩形外接圆 6. 模板匹配6.1 什么是…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
