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

基于51单片机的十字路口交通灯_5s黄灯倒计时闪烁

基于51单片机十字路口交通灯_5s黄灯闪烁

(程序+仿真+仿真视频)

仿真:proteus 7.8

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:J006

功能要求

交通灯运行状态:

(1)模式1:东西向红灯与南北向绿灯亮5s;

(2)模式2:南北向绿灯灭,黄灯闪烁5s(5次);

(3)模式3:东西向绿灯与南北向红灯各5s;

(4)模式4:东西向绿灯灭,黄灯闪烁5s(5次);

(5)具体秒数可在程序改数字实现。

仿真图

南北通行image-20220831004850875

东西通行

image-20220831004910205

程序

image-20220831005300678

主要程序代码

#include<reg52.h>
#include<intrins.h>//数据类型定义
typedef unsigned char uchar;
typedef unsigned int  uint;void led_sacn();
void delay_ms(ms);
void seg_disp(uchar number,uchar wei);#define ON   1    //LED给告电平亮灯
#define OFF  0    //LED给低电平灭灯//通用IO引脚分配
sbit W0=P3^4;
sbit W1=P3^5;
sbit W2=P3^6;
sbit W3=P3^7;sbit NS_G = P2^0;
sbit NS_Y = P2^1;
sbit NS_R = P2^2;
sbit WE_R = P2^3;
sbit WE_Y = P2^4;
sbit WE_G = P2^5;bit flag1s;
bit half_1sflag;
uchar one_sec_flag,main_road_time,secondary_road_time,half_sec_flag;
//1秒定时标志位 南北方向显示时间 东西方向显示时间
uchar state=0;//正常模式不同状态
uchar code seg_du[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};uchar main_green_straight_cnt=5,yellow_cnt =5,2sec_green_straight_cnt =5; 
//南北方向直行绿灯时间            _黄灯时间      _东西方向绿灯时间void main()
{EA=1;	//开总中断TMOD=0X01;//T0的工作模式为模式1TH0=0X4C;TL0=0X00;//11.0592M晶振 50ms定时初值ET0=1; //允许定时器1中断TR0=1;//启动定时器0  
//	state=2;	while(1){	led_sacn();				  		//LED和数码管显示,时刻刷新if(flag1s)						//一秒刷新一次{flag1s=0;main_road_time--;			//红绿灯倒计时时间减secondary_road_time--;}if (half_1sflag){half_1sflag = 0;if(state == 0){//黄灯闪烁WE_Y =~WE_Y;}else if(state == 2){NS_Y =~NS_Y;}}}
}void led_sacn()
{if(main_road_time==0 || secondary_road_time==0)//当南北方向或者东西方向倒数到0,切换状态。//这一段程序只有倒计时为0才执行一次,执行完一次等下一次倒计时为0才再执行一次{switch(state)//改变红绿灯的状态{case 0:{state=1;//下次切换到下一个模式main_road_time=main_green_straight_cnt+yellow_cnt;//南北方向直行绿灯通行时间secondary_road_time=sec_green_straight_cnt;//东西方向红灯时间NS_G = ON;NS_Y = OFF;NS_R = OFF;WE_R = ON;WE_Y = OFF;WE_G = OFF;}break;case 1:{state=2;
//					main_road_time = yellow_cnt;//南北方向直行黄灯时间secondary_road_time =yellow_cnt;NS_G = OFF;NS_Y = ON;NS_R = OFF;WE_R = ON;WE_Y = OFF;WE_G = OFF;	}break;case 2:{state=3;main_road_time=sec_green_straight_cnt;secondary_road_time=sec_green_straight_cnt+yellow_cnt;NS_G = OFF;NS_Y = OFF;NS_R = ON;WE_R = OFF;WE_Y = OFF;WE_G = ON;}break;case 3:{state=0;
//					secondary_road_time=yellow_cnt;//黄灯时间main_road_time=yellow_cnt;NS_G = OFF;NS_Y = OFF;NS_R = ON;WE_R = OFF;WE_Y = ON;WE_G = OFF;}break;default:break;}}seg_disp(main_road_time/10,0);//显示W0控制的数码管 时刻刷新seg_disp(main_road_time%10,1);//显示W1控制的数码管seg_disp(secondary_road_time/10,2);//显示W2控制的数码管seg_disp(secondary_road_time%10,3);//显示W3控制的数码管}void seg_disp(uchar number,uchar wei)	//数码管动态显示程序 wei代表数码管W0 W1 W2 W3的位选
{P0=0XFF;//清零,防止重影if(wei == 0){//显示第一位W0=0;W1=1;W2=1;W3=1;	P0=seg_du[number];delay_ms(2);W0=1;}if(wei == 1){//显示第二位W0=1;W1=0;W2=1;W3=1;	P0=seg_du[number];delay_ms(2);W1=1;}if(wei == 2){//显示第三位W0=1;W1=1;W2=0;W3=1;	P0=seg_du[number];delay_ms(2);W2=1;}if(wei == 3){//显示第四位W0=1;W1=1;W2=1;W3=0;	P0=seg_du[number];delay_ms(2);W3=1;}
}

程序讲解

主要的核心点是倒计时,主干道直行绿灯时间+黄灯时间=次干道红灯时间,

在次干道红灯的过程中,主干道完成了绿灯倒计时+黄灯倒计时两个步骤。

倒计时的产生

记住这个点就可以设计软件了。首先要有时间基础,倒计时从哪来呢?

一般两个来源:

1,延时

delay(1000ms);

通过死循环卡主软件的运行来达到延时效果,程序执行效率极低,不可取。

2,定时

通过定时器产生时基。软件设置50ms产生一次定时中断,在中断执行函数中做计数。

	EA=1;	//开总中断TMOD=0X01;//T0的工作模式为模式1TH0=0X4C;TL0=0X00;//11.0592M晶振 50ms定时初值ET0=1; //允许定时器1中断TR0=1;//启动定时器0  

50ms执行一次中断函数,通过one_sec_flag累加到20判断时间过去了一秒。设置一秒标志位flag1s置一。

void Timer0() interrupt 1
{TH0=0X4C;TL0=0X00;//11.0592M晶振 50ms定时初值if(++half_sec_flag>10){half_1sflag = 1;half_sec_flag = 0;}if(++one_sec_flag<20){return;//提前结束函数}one_sec_flag=0;flag1s=1;	
}

在主函数while循环里判断标志位,如果是1,则倒计时计数值减一,即完成了倒计时的软件设计思路

    if(flag1s)						//一秒刷新一次{flag1s=0;main_road_time--;			//红绿灯倒计时时间减secondary_road_time--;}
红黄绿灯状态处理

image-20220829214546328

交通灯状态实际上分为四个状态:

1.主干道绿灯通行,次干道红灯

2.主干道黄灯通行,次干道红灯

3.主干道红灯,次干道绿灯通行

4.主干道红灯,次干道黄灯通行

做一个状态机,设置四个状态,在四个状态的变化中,设置红绿黄灯的亮和灭实现基础交通灯运行逻辑

if(main_road_time==0 || secondary_road_time==0)//当南北方向或者东西方向倒数到0,切换状态。//这一段程序只有倒计时为0才执行一次,执行完一次等下一次倒计时为0才再执行一次{switch(state)//改变红绿灯的状态{case 0:{state=1;//下次切换到下一个模式main_road_time=main_green_straight_cnt+yellow_cnt;//南北方向直行绿灯通行时间secondary_road_time=sec_green_straight_cnt;//东西方向红灯时间NS_G = ON;NS_Y = OFF;NS_R = OFF;WE_R = ON;WE_Y = OFF;WE_G = OFF;}break;case 1:{state=2;
//					main_road_time = yellow_cnt;//南北方向直行黄灯时间secondary_road_time =yellow_cnt;NS_G = OFF;NS_Y = ON;NS_R = OFF;WE_R = ON;WE_Y = OFF;WE_G = OFF;	}break;case 2:{state=3;main_road_time=sec_green_straight_cnt;secondary_road_time=sec_green_straight_cnt+yellow_cnt;NS_G = OFF;NS_Y = OFF;NS_R = ON;WE_R = OFF;WE_Y = OFF;WE_G = ON;}break;case 3:{state=0;
//					secondary_road_time=yellow_cnt;//黄灯时间main_road_time=yellow_cnt;NS_G = OFF;NS_Y = OFF;NS_R = ON;WE_R = OFF;WE_Y = ON;WE_G = OFF;}break;default:break;}}seg_disp(main_road_time/10,0);//显示W0控制的数码管 时刻刷新seg_disp(main_road_time%10,1);//显示W1控制的数码管seg_disp(secondary_road_time/10,2);//显示W2控制的数码管seg_disp(secondary_road_time%10,3);//显示W3控制的数码管
倒计时显示处理

实际上倒计时显示就是显示main_road_time–; secondary_road_time–;设计函数通过数码管分别显示主干道的main_road_time和次干道的secondary_road_time即可

		seg_disp(main_road_time/10,0);//显示W0控制的数码管seg_disp(main_road_time%10,1);//显示W1控制的数码管seg_disp(secondary_road_time/10,2);//显示W2控制的数码管seg_disp(secondary_road_time%10,3);//显示W3控制的数码管

资料清单

资料下载链接

image-20220903203349509

相关文章:

基于51单片机的十字路口交通灯_5s黄灯倒计时闪烁

基于51单片机十字路口交通灯_5s黄灯闪烁 &#xff08;程序仿真仿真视频&#xff09; 仿真&#xff1a;proteus 7.8 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;J006 功能要求 交通灯运行状态&#xff1a; &#xff08;1&…...

JavaWeb | JSP内置对象

目录&#xff1a; 1.认识JSP内置对象2.JSP内置对象的特点3.九大内置对象3.1 out对象的作用向 “客户端” 输出各种数据内容对 “服务器” 上的输出缓冲区进行管理 3.2 request对象的作用能够获取客户端的基本信息 3.3 response对象的作用利用response对象进行 “重定向”利用re…...

如何保持高能量

精力管理 精力管理对于平衡多项任务和保持热情至关重要。 通过自我积极反馈循环系统培养积极的内心声音。 培养仪式和习惯来控制内心的声音并保持能量。 学习语言带来正能量和宝贵的技能 保持高能量需要自我赋权和体力充电。 经常锻炼有很多好处&#xff0c;包括改善健康…...

Oracle研学-基础操作

学自B站黑马程序员笔记 一 创建表空间(创建数据文件) 创建表空间同时会创建一个数据文件(下面5行应该是一句话)&#xff0c;表空间在PLSQL的Object的tablespace中可以看到 create tablespace waterboss //创建表空间 datafile c:\waterboss.dbf //创建表空间对应的…...

jmeter下载地址

Jmeter安装教程【5.5】【Windows】jmeter详细安装配置教程&#xff0c;装不好你打我_一只莽夫的博客-CSDN博客...

C语言,求取数组的序亏:已知一个整数数组,求出个数组中每个元素在整个 数组的排序。

要求获取整数数组中每个元素的排序&#xff0c;可以使用以下方法&#xff1a; 1. 定义一个结构体数组&#xff0c;其中每个结构体包含数组元素的值和索引。 2. 遍历整数数组&#xff0c;将每个元素与其索引一起存储到结构体数组中。 3. 对结构体数组进行排序&#xff0c;按照…...

信息流广告行为兴趣定向底层逻辑算法

行为兴趣定向 1: 行为兴趣的背后是计划的数据 行为是用户在平台的动作&#xff1a;点赞、评论、分享、点击、下单、成交等&#xff0c;用户发生过的标签 兴趣不一定发生&#xff0c;我有打高尔夫的兴趣&#xff0c;但是从来没打过&#xff0c;因为穷 系统会根据用户的行为标…...

Selenium——isDisplayed()、isEnabled()、isSelected()

判断页面是否存在某元素 Selenium没有直接提供判断是否存在的方法&#xff0c;可以使用findElements返回的数量判断&#xff1b;或者判断findElement是否抛出异常 webDriver.findElements(By.xpath("(//div[classel-button-group]//button)[1]")).size()isDisplaye…...

unity UGUI中获取点击位置处的URL链接

需求是&#xff0c;我们在一个text组件中像写网页那样写入链接&#xff0c;然后点击这个链接&#xff0c;就能访问配置的网页啥的。比如&#xff1a; <a href"hello">链接文本</a></summary> 最终的效果如下&#xff1a; 图中&#xff0c;image区…...

【Arduino库之:FastLED库】

第一&#xff1a;基础 led [ 0 ] CRGB::Red; //为第一个灯珠设置红色 FastLED.show(); //这个作用才会显示 示例程序&#xff1a; #include <FastLED.h> #define NUM_LEDS 8 #define DATA_PIN 7 #define CLOCK_PIN 13 CRGB leds[NUM_LEDS]; CRGB myGRBcolor(0…...

两道面试题秒杀你的C++基础!

大家好&#xff0c;我是光城&#xff0c;今天发两个非常重要的面试题&#xff0c;可以留言区说出你的答案&#xff0c;这两个题目都比较重要&#xff0c;看你能答对不&#xff1f; 1.C中初始化变量有几种方式&#xff0c;各自有什么区别&#xff1f; 或者说Initialization分为哪…...

回归预测 | MATLAB实现SMA+WOA+BOA-LSSVM基于黏菌算法+鲸鱼算法+蝴蝶算法优化LSSVM回归预测

回归预测 | MATLAB实现SMAWOABOA-LSSVM基于黏菌算法鲸鱼算法蝴蝶算法优化LSSVM回归预测 目录 回归预测 | MATLAB实现SMAWOABOA-LSSVM基于黏菌算法鲸鱼算法蝴蝶算法优化LSSVM回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现SMAWOABOA-LSSVM基于黏菌算法…...

柔性数组(Flexible Array Members)在C语言中的应用

什么是柔性数组&#xff1f; 在C语言中&#xff0c;柔性数组&#xff08;Flexible Array Members&#xff0c;FAMs&#xff09;是C99标凈引入的一种便捷的数据结构&#xff0c;用于声明具有可变大小数组的结构体。柔性数组通常用于当结构体的大小在编译时不确定&#xff0c;但…...

华为手环配置技巧

前言 华为手环作为生活健康辅助设备发挥不可忽视的作用&#xff0c;但每次更换手环后需要重新配置。华为手环不仅有健康监测、消息通知、天气推送、离线支付、公交卡、运动锻炼、等功能&#xff0c;还有倒计时、计时器、手电筒、闹钟、等小工具。下文介绍如何进行配置。 配置…...

2023全球数字贸易大赛--什么是 DID 身份,中青校园APP,全球碳交易=树根格致,多元空间=购物时代的web3.0,超喵Overview

目录 什么是 DID 身份,为什么需要 DID 1. 中心化身份的问题 2. 为什么 DID 一定会出现...

有序表常见题型

给定一个数组arr和两个整数a和b求arr中有多少个子数组累加和在a到b这个范围上返回达标的子数组数量 如【3&#xff0c;6&#xff0c;1&#xff0c;9&#xff0c;2】达标的子数组通过暴力求解的方式时间复杂度为O&#xff08;N的三次方&#xff09;【找每个子数组占用O&#xf…...

【开源】基于JAVA语言的桃花峪滑雪场租赁系统

项目编号&#xff1a; S 036 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S036&#xff0c;文末获取源码。} 项目编号&#xff1a;S036&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设…...

【开源】基于Vue.js的图书管理系统

文末获取源码&#xff0c;项目编号&#xff1a; S 066 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S066。} 文末获取源码&#xff0c;项目编号&#xff1a;S066。 目录 一、 系统介绍二、 功能模块2.1 登录注册模块2.1 图书馆模块2.2 图书类型模块2.3 图书模…...

python跑ncnn(验证模型是否转换成功)

为了转ncnn模型是否成功&#xff0c;用python验证一下先 pip install ncnn分割模型的验证代码 import ncnn import cv2 import numpy as np# 创建ncnn的网络对象 net ncnn.Net()# 加载ONNX模型 net.load_param(E:\\Android_Projects\\ncnn-android-deeplabv3plus-main\\app\…...

FL Studio 21.2.1.3859中文破解激活版2024免费下载安装图文教程

FL Studio 21.2.1.3859中文破解激活版是我见过更新迭代最快的宿主软件&#xff0c;没有之一。FL Studio12、FL Studio20、FL Studio21等等。有时甚至我刚刚下载好了最新版本&#xff0c;熟悉了新版本一些好用的操作&#xff0c;Fl Studio就又推出了更新的版本&#xff0c;而且F…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...