【proteus经典实战】定时器控制交通灯指示灯

一、简介

基于8051系列单片机实现,旨在模拟一个简单的交通灯系统,实现红、黄、绿灯的交替亮灭。使用了特殊功能寄存器(SFR)和位操作来控制硬件,使用定时器0的中断功能来控制交通灯信号的切换。通过软件控制,实现交通灯的红、黄、绿灯的亮灭和闪烁。

二、头文件选择,变量定义

在8051微控制器上基于嵌入式C语言的程序片段。定义一系列的宏定义、全局变量和特殊功能位(sbit),用于简化寄存器操作和提高代码可读性。

2.1头文件:

头文件:包含了针对8051微控制器的头文件REG52.H。

2.2宏定义:

uint 和 uchar 分别定义为 unsigned int 和 unsigned char,用于简化代码中的类型声明。

2.3全局变量:

定义了 Time_Count、Flash_Count 和 Operation_Type 三个无符号字符变量,用于控制交通灯的计时和操作类型。

2.4特殊功能位定义:

使用 sbit 关键字定义了6个特殊功能位,分别对应两个交通灯的红、黄、绿灯。

2.5主要引脚口定义:

P0 的 0~5引脚连接红绿灯,由于同方向的灯显示方式相同。

P0.0 ~ P0.2: 分别对应横向的红灯,黄灯,绿灯
P0.3 ~ P0.5: 分别对应纵向的红灯,黄灯,绿灯

三、中断函数说明

T0_INT 用于处理定时器0(Timer 0)的中断。这个中断服务程序是交通灯信号控制逻辑的核心部分,负责根据预设的时间间隔改变交通灯的状态。

3.1中断标识:

interrupt 1 表示这是一个响应定时器0中断的服务程序。数字 1 是定时器0中断的标识符。

3.2定时器重新加载:

TH0 = -50000/256; 和 TL0 = -50000%256; 这两行代码重新加载定时器0的高八位(TH0)和低八位(TL0)寄存器。这里通过计算 -50000 的高八位和低八位,设置定时器的溢出时间。这决定了交通灯状态切换的时间间隔。

3.3状态机逻辑:

使用 switch 语句根据 Operation_Type 的值来决定当前应该执行哪个操作。Operation_Type 是一个全局变量,用于跟踪交通灯的当前状态。

3.4交通灯状态控制:

在每个 case 语句中,根据当前的 Operation_Type,设置相应的交通灯信号位(RED_A, YELLOW_A, GREEN_A, RED_B, YELLOW_B, GREEN_B)。这些位与硬件上的LED灯相连,控制灯的亮灭。

3.5时间计数和状态切换:

Time_Count 用于跟踪当前状态持续的时间。当达到预设的时间(例如100个中断周期)后,Time_Count 被重置,Operation_Type 更新为下一个状态。

3.6闪烁控制:

对于黄灯闪烁的状态(Operation_Type 为2和4),使用 Flash_Count 来跟踪闪烁的次数。当黄灯闪烁了预设的次数(例如10次)后,Flash_Count 被重置,Operation_Type 更新为下一个状态。

3.7状态循环:

状态机的设计使得交通灯的状态在四个状态之间循环:红灯亮、黄灯闪烁、绿灯亮、黄灯闪烁。

3.8代码展示:

void T0_INT() interrupt 1
{TH0 = -50000/256;TL0 = -50000%256;switch(Operation_Type){case 1:RED_A=0; YELLOW_A=0; GREEN_A=1;RED_B=1; YELLOW_B=0; GREEN_B=0;if(++Time_Count != 100) return;Time_Count=0;Operation_Type = 2;break;case 2:if(++Time_Count != 8) return;Time_Count=0;YELLOW_A=!YELLOW_A;GREEN_A=0;if(++Flash_Count != 10) return;Flash_Count=0;Operation_Type = 3;break;case 3:RED_A=1; YELLOW_A=0; GREEN_A=0;RED_B=0; YELLOW_B=0; GREEN_B=1;if(++Time_Count != 100) return;Time_Count=0;Operation_Type = 4;break;case 4:if(++Time_Count != 8) return;Time_Count=0;YELLOW_B=!YELLOW_B;GREEN_B=0;if(++Flash_Count !=10) return;Flash_Count=0;Operation_Type = 1;break;}
}

四、主函数说明

main 函数是程序的入口点,负责初始化微控制器的定时器和中断系统,以便能够周期性地改变交通灯的状态。

4.1定时器模式设置:

TMOD = 0x01; 

这行代码设置了定时器模式寄存器(TMOD)。值 0x01 表示定时器0被设置为模式1,这是一个16位的定时器/计数器模式,适用于精确的时间延迟和事件计数。

4.2中断使能设置:

IE = 0x82;

这行代码设置了中断使能寄存器(IE)。值 0x82 表示允许定时器0的中断(TCON.IT0 = 1,允许定时器0的中断)和全局中断(IE.EA = 1,允许所有中断)。

4.3定时器启动:

TR0 = 1;

这行代码启动了定时器0。一旦定时器启动,它将根据系统时钟的频率计数,直到溢出并触发中断。

4.4无限循环:

点击【proteus经典实战】定时器控制交通灯指示灯——古月居可查看全文

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

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

相关文章

解决selenium打印保存为PDF时图片未加载成功的问题

使用selenium打印网页时,如果程序运行很快的话,可能会导致图片没有加载成功即进行了保存,出现这个问题最初的思考是在执行打印任务时使用js进行强制等待,后发现实现效果并不好。在加载页面时使用自动下滑的方式将网页拉到底&#…

uniapp动态计算并设置元素高度

<template><view><scroll-view id"sv-box" :scroll-y"true" :style"{height:navHeightpx}"></scroll-view><view id"btn-box"><button>取消</button><button>确认</button><…

Linux Vim教程(三):插入模式与命令模式

目录 1. Vim的基本模式介绍 2. 插入模式 2.1 进入插入模式 2.2 退出插入模式 2.3 插入模式下的快捷键 2.4 插入模式中的光标移动 3. 命令模式 3.1 进入命令模式 3.2 常用命令 3.3 搜索和替换 3.4 其他有用的命令 3.5 配置与优化 3.5.1 自动补全 3.5.2 自定义快捷…

【前后端联调】HttpMessageNotReadableException

【前后端联调】HttpMessageNotReadableException 01 问题描述 在前后端联调时产生的问题&#xff0c;关键是下面这句翻译JSON解析错误&#xff1a;无法构造“java.util.ArrayList”的实例 org.springframework.http.converter.HttpMessageNotReadableException: JSON parse …

记录贴-NGINX相关

链接: NGINX相关配置信息说明

在 CI/CD 中怎么使用 Docker 部署前端项目?

本项目代码已开源&#xff0c;具体见&#xff1a; 前端工程&#xff1a;vue3-ts-blog-frontend 后端工程&#xff1a;express-blog-backend 数据库初始化脚本&#xff1a;关注公众号程序员白彬&#xff0c;回复关键字“博客数据库脚本”&#xff0c;即可获取。 前言 在上一篇文…

Web Pages 表单

Web Pages 表单 介绍 Web pages 表单是现代网页设计中不可或缺的组成部分&#xff0c;它们允许用户与网站进行交互&#xff0c;提交信息&#xff0c;如注册、登录、反馈、预订等。表单的设计和功能对用户体验和网站的业务目标有着直接的影响。本文将深入探讨Web pages表单的各…

快速上手AI指令:打造个性化智能交互体验的全面指南

快速上手AI指令&#xff1a;打造个性化智能交互体验的全面指南 一、初识文心一言1.1 文心一言简介1.2 文心一言的特点 二、准备工作2.1 获取访问权限2.2 熟悉界面布局2.3 了解基础指令 三、基础指令操作3.1 问答互动3.2 文本创作3.3 任务规划 四、进阶指令操作4.1 复杂查询4.2 …

Python酷库之旅-第三方库Pandas(035)

目录 一、用法精讲 106、pandas.Series.iloc方法 106-1、语法 106-2、参数 106-3、功能 106-4、返回值 106-5、说明 106-6、用法 106-6-1、数据准备 106-6-2、代码示例 106-6-3、结果输出 107、pandas.Series.__iter__魔法方法 107-1、语法 107-2、参数 107-3、…

Java程序的故障排查

文章目录 Linux命令关机/重启/注销系统信息和性能查看磁盘和分区⽤户和⽤户组⽹络和进程管理常⻅系统服务命令⽂件和⽬录操作⽂件查看和处理打包和解压RPM包管理命令YUM包管理命令DPKG包管理命令APT软件⼯具 JDK命令jpsjstatjinfojmapjhatjstackjcmdjconsole 分析工具VisualVME…

ios 设置行距和获取文本行数

设置文本行距 UILabel *label [[UILabel alloc] init];label.font [UIFont systemFontOfSize:12];label.numberOfLines 0;label.lineBreakMode NSLineBreakByWordWrapping;label.textColor [UIColor colorWithHexString:"B3B3B3"];label.text textDes;//设置行…

blender和3dmax和maya和c4d比较

Blender、3ds Max、Maya和Cinema 4D (C4D)都是强大的3D建模和动画软件&#xff0c;但它们各有特点和适用领域。以下是它们的比较&#xff1a; Blender: 开源免费全面的功能&#xff0c;包括建模、动画、渲染、视频编辑等学习曲线较陡峭&#xff0c;但社区支持强大适合独立艺术家…

自动驾驶-预测概览

通过生成一条路径来预测一个物体的行为&#xff0c;在每一个时间段内&#xff0c;为每一辆汽车重新计算预测他们新生成的路径&#xff0c;这些预测路径为规划阶段做出决策提供了必要信息 预测路径有实时性的要求&#xff0c;预测模块能够学习新的行为。我们可以使用多源的数据…

超简单安装指定版本的clickhouse

超简单安装指定版本的clickhouse 命令执行shell脚本 idea连接 命令执行 参考官网 # 下载脚本 wget https://raw.githubusercontent.com/183461750/doc-record/d988dced891d70b23c153a3bbfecee67902a3757/middleware/data/clickhouse/clickhouse-install.sh # 执行安装脚本(中…

【漏洞复现】Netgear WN604 downloadFile.php 信息泄露漏洞(CVE-2024-6646)

0x01 产品简介 NETGEAR WN604是一款由NETGEAR&#xff08;网件&#xff09;公司生产的无线接入器&#xff08;或无线路由器&#xff09;提供Wi-Fi保护协议&#xff08;WPA2-PSK, WPA-PSK&#xff09;&#xff0c;以及有线等效加密&#xff08;WEP&#xff09;64位、128位和152…

机器学习 -逻辑回归的似然函数

公式解释 公式如下&#xff1a; L ( θ ) ∏ i 1 m P ( y i ∣ x i ; θ ) ∏ i 1 m ( h θ ( x i ) ) y i ( 1 − h θ ( x i ) ) 1 − y i L(\theta) \prod_{i1}^m P(y_i | x_i; \theta) \prod_{i1}^m (h_\theta(x_i))^{y_i} (1 - h_\theta(x_i))^{1 - y_i} L(θ)i1∏…

亲测--linux下安装ffmpeg最新版本---详细教程

下载地址 Download FFmpeg 下载最新的https://ffmpeg.org/releases/ffmpeg-7.0.1.tar.xz 上传到服务器 解压 tar xvf ffmpeg-7.0.1.tar.xz 编译 cd ffmpeg-7.0.1 ./configure --prefix=/usr/local/ffmpeg make && make install 报错: 解决:在后面加 跳过检测…

上海市计算机学会竞赛平台2022年9月月赛丙组二叉树的遍历

题目描述 有一棵二叉树&#xff0c;结点数量不超过 2626 个&#xff0c;树上的每个结点都有一个大写字母。 给定这棵二叉树的前序遍历及中序遍历&#xff0c;请输出它的后序遍历。 输入格式 第一行&#xff1a;一个字符串&#xff0c;表示二叉树的前序遍历&#xff1b;第二…

【分布式存储系统HDFS】架构和使用

分布式存储系统HDFS&#xff1a;架构和使用 目录 引言HDFS简介HDFS的架构 NameNodeDataNodeSecondary NameNode HDFS的工作原理 数据读写流程数据冗余与恢复 HDFS的安装和配置 环境准备HDFS安装步骤HDFS配置文件启动HDFS HDFS的使用 基本命令HDFS Shell操作Java API操作 HDFS…

【Word】——小技巧

1.PDF相关转换word PDF转换成Word在线转换器 - 免费 - CleverPDF 2. word插入公式 1.软件推荐&#xff08;免费&#xff09; 可直接将图片&#xff0c;截屏公式转为word标准规范形式 2.网址推荐 在线LaTeX公式编辑器-编辑器 &#xff08;每天有免费使次数&#xff09; 3.…