基于51单片机交通灯夜间模式+紧急模式_易懂版_(仿真+代码_报告_讲解)

J029 51单片机交通灯_易懂版__夜间+紧急(仿真+代码_报告_讲解)

51单片机交通灯_易懂版_

  • 1 **讲解视频:**
  • 2 **功能要求**
  • 3 **仿真图:**
  • 4 **程序设计:**
  • 5 **设计报告**
  • 6 **资料清单&&下载链接:**
    • **资料下载链接(可点击):**

仿真图proteus 7.8以上

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:J029

1 讲解视频:

基于51单片机的交通灯

2 功能要求

1.正常模式工作状态:

状态1:南北方向绿灯通行12秒,东西红灯禁止通行15秒,分别倒计时;

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

状态3:东西方向绿灯通行9秒,南北方向禁止通行12秒;

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

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

\2. 紧急模式

南北方向和东西方向红灯常亮。

\3. 夜间模式

南北方向和东西方向黄灯常亮。

3 仿真图:

img

4 程序设计:

img

程序主要代码

void main()
{
	EA=1;	//开总中断
	EX0=1;//外部中断0
	EX1=1;//外部中断1
	IT0=1;//设置下降沿触发中断0
	IT1=1;//设置下降沿触发中断1
	
	TMOD|= 0X01;
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;//12M晶振 50ms定时初值
	ET0=1; //允许定时器0中断
	TR0=1;//启动定时器0  
	state=0;
	while(1)
	{	
		led_sacn();				  		//LED和数码管显示,时刻刷新
		if(flag1s)//一秒执行一次
		{
			flag1s=0;
			main_road_time--;			//红绿灯倒计时时间减
			secondary_road_time--;
		}
		if(half_flag1s){
			half_flag1s = 0;
			if(state ==2){
				ns_yellow =~ns_yellow;
			}else if(state ==0){
				we_yellow =~we_yellow;
			}

		}
		
	}
}

void led_sacn()
{
	 if(run_mode==0)			 //0 正常运行
	 {
		if(main_road_time==0 || secondary_road_time==0)//当主干道或者次干道倒数到0,切换状态。
		//这一段程序只有倒计时为0才执行一次,执行完一次等下一次倒计时为0才再执行一次
		{
			switch(state)//改变红绿灯的状态
			{
				case 0:
				{
					state=1;//下次切换到下一个模式
					main_road_time=ns_green_cnt;//主干道绿灯通行时间
					secondary_road_time=ns_green_cnt+yellow_cnt; 
					 we_red    = ON;
					 we_yellow = OFF;
					 we_green  = OFF;
					 ns_red    = OFF;
					 ns_yellow = OFF;
					 ns_green  = ON;
				}break;
				case 1:
				{
					state=2;
					main_road_time = yellow_cnt;//主干道直行黄灯时间
					we_red	  = ON;
					we_yellow = OFF;
					we_green  = OFF;
					ns_red	  = OFF;
					ns_yellow = ON;
					ns_green  = OFF;	
				}break;
				case 2:
				{
					state=3;
					main_road_time=we_green_cnt+yellow_cnt;
					secondary_road_time = we_green_cnt;
					we_red	  = OFF;
					we_yellow = OFF;
					we_green  = ON;
					ns_red	  = ON;
					ns_yellow = OFF;
					ns_green  = OFF;	
				}break;
				case 3:
				{
					state=0;
					secondary_road_time = yellow_cnt;
					we_red	  = OFF;
					we_yellow = ON;
					we_green  = OFF;
					ns_red	  = ON;
					ns_yellow = OFF;
					ns_green  = 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控制的数码管
		
	}else if(run_mode==1)
	{
		we_red	  = ON;
		we_yellow = OFF;
		we_green  = OFF;
		ns_red	  = ON;
		ns_yellow = OFF;
		ns_green  = OFF;
	}
	else if(run_mode==2)//夜间模式 黄灯14 0001 0010 0x12
	{
		we_red	  = OFF;
		we_yellow = ON;
		we_green  = OFF;
		ns_red	  = OFF;
		ns_yellow = ON;
		ns_green  = OFF;
	}
}

void seg_disp(uchar number,uchar wei)	//数码管动态显示程序 wei代表数码管W0 W1 W2 W3的位选
{
#if LEDSEG_CC	
	P0=0;//清零,防止重影
	W0=W1=W2=W3=0;
	if(wei == 0){//显示第一位
		W0=1;
		P0=seg_du[number];
		delay_ms(2);
		W0=0;
	}
	if(wei == 1){//显示第二位
		W1=1;
		P0=seg_du[number];
		delay_ms(2);
		W1=0;
	}
	if(wei == 2){//显示第三位
		W2=1;
		P0=seg_du[number];
		delay_ms(2);
		W2=0;
	}
	if(wei == 3){//显示第四位
		W3=1;	
		P0=seg_du[number];
		delay_ms(2);
		W3=0;
	}
#else
	P0=0;//清零,防止重影
	W0=W1=W2=W3=1;
	if(wei == 0){//显示第一位
		W0=0;
		P0=seg_du[number];
		delay_ms(2);
		W0=1;
	}
	if(wei == 1){//显示第二位
		W1=0;
		P0=seg_du[number];
		delay_ms(2);
		W1=1;
	}
	if(wei == 2){//显示第三位
		W2=0;
		P0=seg_du[number];
		delay_ms(2);
		W2=1;
	}
	if(wei == 3){//显示第四位
		W3=0;	
		P0=seg_du[number];
		delay_ms(2);
		W3=1;
	}
#endif

}

void delay_ms(ms)	  //演示函数,大概精度
{
	uchar value=ms,i;
	while(value--) 
	for(i=0;i<110;i++);
}
void Timer0() interrupt 1
{
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;//12M晶振 50ms定时初值

	if(++half_sec_flag>10){
		half_sec_flag=0;
		half_flag1s=1;

	}
	if(++one_sec_flag<20){
		return;//提前结束函数
		}
	
	one_sec_flag=0;
	if(run_mode==0){//不是正常运行时,不红绿灯数值不减一 
		flag1s=1;	
	}
}

*程序流程框图*

img

*系统硬件框图*

img

5 设计报告

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

img

6 资料清单&&下载链接:

0.常见使用问题及解决方法–必读!!!!
1.源程序
2.仿真
3.设计报告
4.系统框图
5.讲解视频
Altium Designer 安装破解
filename.bat
KEIL+proteus 单片机仿真设计教程
KEIL安装破解
Proteus元器件查找
Proteus安装
Proteus简易使用教程
单片机学习资料
目录清单.txt
相关数据手册
答辩技巧
设计报告常用描述
鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url
img

资料下载链接(可点击):

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/190739.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

超好玩C++控制台打飞机小游戏,附源码

我终于决定还是把这个放出来。 视频在这&#xff1a;https://v.youku.com/v_show/id_XNDQxMTQwNDA3Mg.html 具体信息主界面上都有写。 按空格暂停&#xff0c;建议暂停后再升级属性。 记录最高分的文件进行了加密。 有boss&#xff08;上面视频2分47秒&#xff09;。 挺好…

2023年【N1叉车司机】新版试题及N1叉车司机作业考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 N1叉车司机新版试题参考答案及N1叉车司机考试试题解析是安全生产模拟考试一点通题库老师及N1叉车司机操作证已考过的学员汇总&#xff0c;相对有效帮助N1叉车司机作业考试题库学员顺利通过考试。 1、【多选题】《中华…

Linux系统编程 day05 进程控制

Linux系统编程 day05 进程控制 1. 进程相关概念2. 创建进程3. exec函数族4. 进程回收 1. 进程相关概念 程序就是编译好的二进制文件&#xff0c;在磁盘上&#xff0c;占用磁盘空间。程序是一个静态的概念。进程即使启动了的程序&#xff0c;进程会占用系统资源&#xff0c;如内…

【服务器能干什么】二十分钟搭建一个属于自己的 RSS 服务

如果大家不想自己捣鼓,只是想尝尝鲜,可以在下面留言,我后台帮大家开几个账号玩一玩。 哔哩哔哩【高清版本可以点击去吐槽到 B 站观看】:【VPS服务器到底能干啥】信息爆炸的年代,如何甄别出优质的内容?你可能需要自建一个RSS服务!_哔哩哔哩_bilibili 前言 RSS 服务 市…

MySQL表连接

文章目录 MySQL内外连接1.内连接2.外连接&#xff08;1&#xff09;左外连接&#xff08;2)右外连接 3.简单案例 MySQL内外连接 1.内连接 内连接的SQL如下&#xff1a; SELECT ... FROM t1 INNER JOIN t2 ON 连接条件 [INNER JOIN t3 ON 连接条件] ... AND 其他条件;说明一下…

2.5 逆矩阵

一、逆矩阵的注释 假设 A A A 是一个方阵&#xff0c;其逆矩阵 A − 1 A^{-1} A−1 与它的大小相同&#xff0c; A − 1 A I A^{-1}AI A−1AI。 A A A 与 A − 1 A^{-1} A−1 会做相反的事情。它们的乘积是单位矩阵 —— 对向量无影响&#xff0c;所以 A − 1 A x x A^{…

QT基础开发笔记

用VS 写QT &#xff0c;设置exe图标的方法&#xff1a; 选定工程--》右键--》添加---》资源--》 QString 字符串用法总结说明 Qt QString 增、删、改、查、格式化等常用方法总结_qstring 格式化-CSDN博客 总结来说&#xff1a; QString 的 remove有两种用法&#xff0c;&am…

【C++】类和对象(下篇)

这里是目录 构造函数&#xff08;续&#xff09;构造函数体赋值初始化列表 explicit关键字隐式类型转换 static成员友元友元函数友元类 内部类匿名对象匿名对象的作用const引用匿名对象 构造函数&#xff08;续&#xff09; 构造函数体赋值 在创建对象时&#xff0c;编译器通…

02、Tensorflow实现手写数字识别(数字0-9)

02、Tensorflow实现手写数字识别&#xff08;数字0-9&#xff09; 开始学习机器学习啦&#xff0c;已经把吴恩达的课全部刷完了&#xff0c;现在开始熟悉一下复现代码。对这个手写数字实部比较感兴趣&#xff0c;作为入门的素材非常合适。 基于Tensorflow 2.10.0与pycharm 1…

SASS的导入文件详细教程

文章目录 前言导入SASS文件使用SASS部分文件默认变量值嵌套导入原生的CSS导入后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Sass和Less &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努…

电子学会C/C++编程等级考试2022年12月(二级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数组逆序重放 将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1。要求改为1,4,5,6,8。输入 输入为两行:第一行数组中元素的个数n(1输出 输出为一行:输出逆序后数组的整数,每两个整数之间用空格分隔。样例输入 …

Linux:docker基础操作(3)

docker的介绍 Linux&#xff1a;Docker的介绍&#xff08;1&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/134146721?spm1001.2014.3001.5502 通过yum安装docker Linux&#xff1a;Docker-yum安装&#xff08;2&#xff09;-CSDN博客https://blog.…

Mac 最佳使用指南

官方 Mac 使用手册如何在macOS系统安装根证书mac Terminal config proxy 【mac 终端配置代理】iPhone 安装 iOS 17公测版&#xff08;Public Beta)macOS 最佳命令行客户端&#xff1a;iTermMac 配置与 Linux 互信Mac mini 外接移动硬盘无法写入或者无法显示的解决方法如何在 ma…

2016年五一杯数学建模B题能源总量控制下的城市工业企业协调发展问题解题全过程文档及程序

2016年五一杯数学建模 B题 能源总量控制下的城市工业企业协调发展问题 原题再现 能源是国民经济的重要物质基础,是工业企业发展的动力&#xff0c;但是过度的能源消耗&#xff0c;会破坏资源和环境&#xff0c;不利于经济的可持续发展。目前我国正处于经济转型的关键时期&…

牛客网刷题笔记四 链表节点k个一组翻转

NC50 链表中的节点每k个一组翻转 题目&#xff1a; 思路&#xff1a; 这种题目比较习惯现在草稿本涂涂画画链表处理过程。整体思路是赋值新的链表&#xff0c;用游离指针遍历原始链表进行翻转操作&#xff0c;当游离个数等于k时&#xff0c;就将翻转后的链表接到新的链表后&am…

线性模型加上正则化

使用弹性网络回归&#xff08;Elastic Net Regression&#xff09;算法来预测波士顿房屋价格。弹性网络回归是一种结合了L1和L2正则化惩罚的线性回归模型&#xff0c;能够处理高维数据和具有多重共线性的特征。弹性网络回归的目标函数包括数据拟合损失和正则化项&#xff1a; m…

前端学习--React(4)路由

一、认识ReactRouter 一个路径path对应一个组件component&#xff0c;当我们在浏览器中访问一个path&#xff0c;对应的组件会在页面进行渲染 创建路由项目 // 创建项目 npx create router-demo// 安装路由依赖包 npm i react-router-dom// 启动项目 npm run start 简单的路…

一文读懂MySQL基础与进阶

Mysql基础与进阶 Part1 基础操作 数据库操作 在MySQL中&#xff0c;您可以使用一些基本的命令来创建和删除数据库。以下是这些操作的示例&#xff1a; 创建数据库&#xff1a; 要创建一个新的数据库&#xff0c;您可以使用CREATE DATABASE命令。以下是示例&#xff1a; CREA…

C++ day36 贪心算法 无重叠区间 划分字母区间 合并区间

题目1&#xff1a;435 无重叠区间 题目链接&#xff1a;无重叠区间 对题目的理解 移除数组中的元素&#xff0c;使得区间互不重叠&#xff0c;保证移除的元素数量最少&#xff0c;数组中至少包含一个元素 贪心算法 局部最优&#xff0c;使得重叠区间的个数最大&#xff0c…

MyBatis Generator使用总结

MyBatis Generator使用总结 介绍具体使用数据准备插件引入配置条件构建讲解demo地址 介绍 MyBatis Generator &#xff08;MBG&#xff09; 是 MyBatis 的代码生成器。它能够根据数据库表&#xff0c;自动生成 java 实体类、dao 层接口&#xff08;mapper 接口&#xff09;及m…