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

一.硬件方案

本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生,还能进行倒计时显示。按键可以控制禁行、深夜模式、复位、东西通行、南北通行、时间加、时间减、切换等功能。共四个二位阴极数码管,东南西北各一个显示时间,四个数码管的阴极都接到STC89C51的P1口,阳极接到74HC245芯片上,通过P0口控制74HC245芯片,起到驱动放大作用。
主要电路:51单片机+最小系统+数码管显示模块+LED指示灯模块+按键模块;

二.设计功能

(1)本设计采用四方向数码管显示时间的设计,更加符合真实的交通信号灯设计;
(2)7个按键:复位、夜间模式、紧急模式、设定时间、时间加、时间减、调试确定键;
(3)夜间模式:按下“夜间模式”按键后,四个方向的黄灯闪烁;
(4)紧急模式:当救护车、救火车等通过时,按下“紧急模式”按键,四个方向的红灯全部亮起;
(5)东西方向和南北方向的通行时间可以分开设置。就是模拟实际交通中的主干道和支干道。

三.设计原理图

(1)原理图主要采用AD软件进行设计,如图:
在这里插入图片描述
(2)Protues仿真图如下:
在这里插入图片描述

四.软件设计

主程序源码:

//主程序
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;	       				//关定时器	shanruo=0;					//闪烁标志位关P2=0x00;					//灭显示TR1=0;							//启动定时1if(set==0)					//设置键按下set_timedx++;   		//南北加1Selseset_timenb++;    		//东西加1Sif(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	shanruo=0;					//闪烁标志位关P2=0x00;					//灭显示TR1=0;						//关定时器1	if(set==0)set_timedx--;  			//南北减1Selseset_timenb--;  			//东西减1Sif(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)						//如果确定按下{  TR0=0;						//关定时器0	set=!set;					//取反set标志位,以切换调节方向TR1=0;						//关定时器1dx_nb=set;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);			//等待按键释放	}}
}

资料链接:https://pan.baidu.com/s/1RTF58-hWut5EEv6ZgvnFiw?pwd=gkv0

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

polarctf靶场[reverse]shell、PE结构、拼接

[reverse]shell 考点:脱壳 将所解压的文件拖入DIE有无有壳,文件类型 发现有UPX壳,是32位的文件,先脱壳 用FFI工具脱壳 将脱壳后的程序用32位IDA进行反汇编 点开_main_0函数进行查看 看到flag,(F5&#…

小红书广告如何推广?投放费用是多少?

小红书以其独特的社区文化和用户粘性,成为了众多品牌争相推广的热门平台,如何在小红书上有效推广广告,让品牌信息精准触达目标用户,成为了众多营销人员关注的焦点,云衔科技为企业提供专业的开户和代运营服务。 一、小…

爪哇,我初学乍道

>>上一篇(学校上课,是耽误我学习了。。) 2016年9月,我大二了。 自从我发现上课会耽误我学习,只要我认为不影响我期末学分的,我就逃课了。 绝大多数课都是要签到的,有的是老师突击喊名字…

【Docker】2、配置SSL证书远程访问Docker

1、使用 openssl 生成 ca 1、创建文件夹 mkdir -p /root/dockercd /root/docker2、创建 RSA 私钥 会提示 2 次输入证书密码,至少 4 位,创建后会生成一个 ca-key.pem 文件 openssl genrsa -aes256 -out ca-key.pem 4096得到 ca-key.pem 文件 3、创建…

倩女幽魂手游攻略:新人入坑必看指南!

《倩女幽魂》是一款经典的MMORPG游戏,凭借其丰富的剧情、精美的画面和多样的玩法,吸引了众多玩家。在游戏中,提升角色等级和战斗力是每个玩家的核心目标。本文将详细介绍如何在游戏中快速提升角色等级、增强实力,并提供一些实用的…

Java break细节(标签)

Java break细节(标签)continue也可以使用标签 break是用来跳出循环的。 当有多重循环时,可以配合标签来使用,决定跳出那一重循环。 尽量不要使用标签 1、不代标签时,默认跳出 break 所在的那重循环: 可见在 i 3 时&#xff0…

数据集——高分辨率图像分割成大小均匀图像(附Python代码)

将高分辨率图像分割成大小均匀的图像用于训练,可以提高训练效率,提高模型性能,并提供更大的灵活性。 目录 一、大小均匀图像用于训练优势二、代码2.1 代码参数修改2.2 代码2.3 输出2.4 分割结果 三、总结 一、大小均匀图像用于训练优势 内存…

onenav一为导航主题4.05开心版 可保存授权

一款大多数导航网站使用且功能非常全面的导航主题,有能力的情况下还是劝大家支持正版。 演示站:onenav一为导航主题演示站 后台演示 | 演示后台:登录 - onenav一为导航主题演示站 后台演示 后台测试账号获取:演示站后台账号获取…

快团团供货大团长如何打印电子面单?

一、功能说明 快团团打单平台是目前唯一一个服务于快团团团长的打单发货工具,免费提供给团长使用。可帮助团长快速打印面单、分拣包裹、完成发货。 目前快团团打单平台已支持大批量打印快递单、自定义快递面单、自动发货、绑定拼多多电子面单账号等功能&#xff0c…

重学java51.Collections集合工具类、泛型

"我已不在地坛&#xff0c;地坛在我" —— 《想念地坛》 24.5.28 一、Collections集合工具类 1.概述:集合工具类 2.特点: a.构造私有 b.方法都是静态的 3.使用:类名直接调用 4.方法: static <T> boolean addAll(collection<? super T>c,T... el…

AVL树的模拟实现

我们上期提到了二叉搜索树&#xff0c;只是简单的讲了一下原理&#xff0c;那么今天我们就讲一下AVL树。 目录 AVL树的概念AVL树的实现AVL树的架构insert插入引用pair对象引进parent指针仅插入数据调节平衡因子情况1&#xff1a;插入在父亲的右边&#xff0c;父亲的平衡因子后…

【算法】前缀和

Hello&#xff01;大家好&#xff0c;我是学霸小羊&#xff0c;今天讲一下前缀和算法。 这要从一个故事说起。 一天&#xff0c;老师叫小明做一道题&#xff1a;一个长度为n的数组a&#xff0c;请你计算a[x]a[x1]a[x2] a[y-1]a[y]。 输入数据 第1行 1个整数n 0≤n≤1,000…

《STM32Cube高效开发教程基础篇》- 安装软件/Demo3_1LED

文章目录 下载两个软件安装问题记录在STM32CubeMX中新建项目编辑代码在CudeMX中完成图形化设置在CudeIdea中编码在CLion中编码&#xff08;智能化&#xff09; 效果图 下载两个软件 百度网盘链接&#xff1a;https://pan.baidu.com/s/1uXLWIIVCJbF4ZdvZ7k11Pw 提取码&#xff1…

Go 错误日志处理

是不是所有的 if err ! nil 的地方都应该输出错误日志&#xff1f; 打印过多的错误日志会导致日志文件变得冗长和难以阅读。 其次&#xff0c;重复的错误信息会增加冗余。 此外&#xff0c;每一层都打印错误日志&#xff0c;一旦错误信息设计不当&#xff0c;可能会导致上下…

消费者相关高效读写ZK作用

消费者分区分配策略 目录概述需求&#xff1a; 设计思路1.消费者分区分配策略2. 消费者offset的存储3. kafka消费者组案例4. kafka高效读写&Zk作用5. Ranger分区再分析 实现思路分析 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show …

MySQL建库

删除数据库 新建数据库 右键-新建数据库 字符集选中utf8(支持中文) 修改字符集 右键--数据库的属性 将字符集支持的数量变少可以修改

vue3 部署后修改配置文件

前端项目部署之后&#xff0c;运维可以自行修改配置文件里的接口IP&#xff0c;达到无需再次打包就可以使用的效果 vue2如何修改请看vue 部署后修改配置文件&#xff08;接口IP&#xff09;_vue部署后修改配置文件-CSDN博客 使用前提&#xff1a; vite搭建的vue3项目 使用setu…

大数据技术分享 | Kylin入门系列:基础介绍篇

Kylin入门教程 在大数据时代&#xff0c;如何高效地处理和分析海量数据成为了企业面临的挑战之一。Apache Kylin作为一个开源的分布式分析引擎&#xff0c;提供了Hadoop之上的SQL查询接口及多维分析&#xff08;OLAP&#xff09;能力&#xff0c;使得对超大规模数据集的分析变…

【leetcode——栈的题目】——1003. 检查替换后的词是否有效python

题目&#xff1a; 给你一个字符串 s &#xff0c;请你判断它是否 有效 。 字符串 s 有效 需要满足&#xff1a;假设开始有一个空字符串 t "" &#xff0c;你可以执行 任意次 下述操作将 t 转换为 s &#xff1a; 将字符串 "abc" 插入到 t 中的任意位置…

前缀和(下)

目录 热身&#xff1a; 寻找数组的中心下标 题解&#xff1a; 代码&#xff1a; 进阶&#xff1a; 除自身之外数组的乘积 题解&#xff1a; 代码&#xff1a; 和为K的子数组 题解&#xff1a; 代码&#xff1a; 和可被 K 整除的子数组 题解&#xff1a; 同余定理…