基于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 什么是…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...
高分辨率图像合成归一化流扩展
大家读完觉得有帮助记得关注和点赞!!! 1 摘要 我们提出了STARFlow,一种基于归一化流的可扩展生成模型,它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流(TARFlow&am…...
aurora与pcie的数据高速传输
设备:zynq7100; 开发环境:window; vivado版本:2021.1; 引言 之前在前面两章已经介绍了aurora读写DDR,xdma读写ddr实验。这次我们做一个大工程,pc通过pcie传输给fpga,fpga再通过aur…...
关于疲劳分析的各种方法
疲劳寿命预测方法很多。按疲劳裂纹形成寿命预测的基本假定和控制参数,可分为名义应力法、局部应力一应变法、能量法、场强法等。 1名义应力法 名义应力法是以结构的名义应力为试验和寿命估算的基础,采用雨流法取出一个个相互独立、互不相关的应力循环&…...
